我正在尝试使用DICOM库将DICOM文件加载到Python中。我已经完成了以下步骤。
ds=dicom.read_file(r"C:\Users\Z003SPFR.AD005\ML\GLCM AND SVM\data\NECT\1.IMA")
# # store the raw image data
DicomImage = ds.pixel_array
这给了我看起来像是12位的值,因为获得的最高值约为3047,最低值为0。然后我编写了自己的映射函数将其转换到0-255的范围内。我使用了以下代码:
leftMin = 0
leftMax = np.amax(DicomImage)
rightMin = 0
rightMax = 255
def translate(value, leftMin, leftMax, rightMin, rightMax):
# Figure out how 'wide' each range is
leftSpan = leftMax - leftMin
rightSpan = rightMax - rightMin
# Convert the left range into a 0-1 range (float)
valueScaled = float(value - leftMin) / float(leftSpan)
# Convert the 0-1 range into a value in the right range.
return rightMin + (valueScaled * rightSpan)
#print(translate(value, leftMin, leftMax, rightMin, rightMax))
def int12_to_int8(img):
img_array = []
for eachRow in img:
for eachPix in eachRow:
img_array.append(translate(eachPix,leftMin, leftMax, rightMin, rightMax))
img_array = np.array(img_array)
img_array = img_array.reshape(512,512)
return img_array
correct_range_image = int12_to_int8(DicomImage)
做完这个之后,我意识到数组 img_array
是 uint16
类型的。我想要它是 uint8
类型的。所以我使用了以下代码将其转换为 uint8
:
cvuint8 = cv2.convertScaleAbs(correct_range_image)
然后我展示了生成的图像。但是我收到的图像并没有很好地代表原始图像。我已经发布了原始图像和转换后的图像的图片。如何使转换更好,以便获得更好的原始图像表示?我用来显示的代码在此处:
cv2.imwrite('1.jpeg', cvuint8 )
cv2.imshow('image',cvuint8 )[enter image description here][1]
cv2.waitKey(0)
图片