gpt4 book ai didi

python-3.x - 当最大像素值小于65535时,如何规范化uint16图像并将其转换为uint8?

转载 作者:行者123 更新时间:2023-12-02 17:04:04 25 4
gpt4 key购买 nike

我需要将图像从uint16转换为uint8,以便在uint16图像的最大像素值不是65535(小于该值)(实际上是2970)时将其保存到磁盘。我注意到scikit-image具有用于这种转换的方法 img_as_ubyte 。似乎此方法将65535转换为255,并且所有值均与之成比例。问题是图像的最大值2000转换为12,会损失很多分辨率。我也在考虑将图像保存为numpy

我尝试使用建议的scalet函数here和cv2.normalize函数。但是,我注意到cv2.normalize函数创建了一个图像 dtype = uint16

另外,我检查了来自matlab的mat2gray和cv2.normalize与mat2gray相比,比普通python中具有normalize函数的方法更相似。

使用普通python:

orig_min = mammogram_dicom.min()
orig_max = mammogram_dicom.max()
target_min = 0.0
target_max = 255.0
mammogram_scaled = (mammogram_dicom-orig_min)*((target_max-
target_min)/(orig_max-orig_min))+target_min
mammogram_uint8_by_function = mammogram_scaled.astype(np.uint8)

我觉得使用np.uint8很奇怪,我宁愿不使用它,但这是我进入uint 8的唯一方法

对于cv2.normalized,我还必须使用np.uint8来获取uint8:
mammogram_uint8_by_cv2 = np.zeros(mammogram_dicom.shape).astype(np.uint8)
mammogram_uint8_by_cv2 = cv2.normalize(mammogram_dicom, None, 0, 255, cv2.NORM_MINMAX)

有没有更好的方法可以在uint8中将此图像转换为uint16?

我期望在matlab中与mat2gray类似或更好的行为。我对来自matlab的同一图像和使用上述代码计算出的图像进行了比较。 Cv2标准化是最相似的一种。具有重缩放功能的方法-我称之为“纯python”-看起来与肉眼相似,但有所不同:
mat2gray_from_matlab_image-plain_python_image

有一些差异,值为1像素

有没有办法标准化scikit-image中的图像?

最佳答案

1)OpenCV解决方案

如果未指定normalize,则OpenCV dtpye 返回与源类型相同的图像。要将uint16标准化为uint8而不使用numpy,请使用:

mammogram_uint8_by_cv2 = cv2.normalize(mammogram_dicom, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)

2)Skimage解决方案

首先将图像 rescale 完整显示,然后使用 uint8 将其转换为 img_as_ubyte:
from skimage import exposure, img_as_ubyte
mammogram_uint8_by_ski = img_as_ubyte(exposure.rescale_intensity(mammogram_dicom))

关于python-3.x - 当最大像素值小于65535时,如何规范化uint16图像并将其转换为uint8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57462701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com