使用网上的大多数格式转换过来图像失真过于严重,出现了这种情况:
而原始图像是:
读取的过程中直接变成了二值图,所以就先对读取到的原始像素矩阵做归一化,在*255变为灰度图,代码如下:
import SimpleITK as sitK
import numpy as np
import cv2
import os
def convert_from_dicom_to_png(img,low_window,high_window,save_path):
lungwin = np.array([low_window*1.,high_window * 1.])
newimg = (img-lungwin[0])/(lungwin[1]-lungwin[0]) #归一化
newimg = (newimg*255).astype('uint8') #扩展像素值到【0,255】
cv2.imwrite(save_path,newimg)
读取dicom需要用到sitk,安装命令:
pip install SimpleITK
读取dicom图像:
ds_array = sitK.ReadImage(dcm_image_path)
img_array = sitK.GetArrayFromImage(ds_array)
shape = img_array.shape
img_array = np.reshape(img_array,(shape[1],shape[2]))
high = np.max(img_array)
low = np.min(img_array)
convert_from_dicom_to_png(img_array,low,high,output_png_file)
最后的得到的png图像与原图看起来没什么区别。