当 uint16 图像的最大像素值不是 65535(它小于该值)(实际上是 2970)时,我需要将图像从 uint16 转换为 uint8,以便将其保存到磁盘。我注意到 scikit-image 有用于此类转换的方法img_as_ubyte 。看来这个方法将 65535 转换为 255,并且所有值都与此成比例。问题是图像的最大值为 2000,转换为 12 后会损失大量分辨率。我也在考虑将图像保存为 numpy
我尝试使用此处提出的 rescale 函数以及 cv2.normalize 函数。但是,我注意到 cv2.normalize 函数创建了dtype=uint16的图像。
另外,我检查了 matlab 中的 mat2gray,发现 cv2.normalize 与 mat2gray 比普通 python 中带有标准化函数的方法更相似。
使用普通的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)
Run Code Online (Sandbox Code Playgroud)
我觉得使用 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, …Run Code Online (Sandbox Code Playgroud)