Art der Daten
Der Speicherbereich von uint16 beträgt 2 ** 16 = 65535. Wenn der Wert nach der Datenverarbeitung größer als 65535 ist, treten Probleme auf
Zum Beispiel
import matplotlib.pyplot as plt
if __name__=="__main__":
path = r'C:\Users\user\Desktop\00000002.dcm'
ds = dicom.dcmread(path)
img = dicom.pixel_data_handlers.apply_rescale(ds.pixel_array, ds) # 288 234 uint16
print(img.dtype)
img = img / img.max() *255
# img=np.array(img,np.int32)
print(img.max(),img.min())
plt.imshow(img,cmap=plt.cm.gray,vmin=0,vmax=255)
plt.show()
Erläuterung:
Die wichtige Operation lautet: img = img / img.max() *255
Der Zweck der obigen Operation besteht darin, die Daten in den Bereich von 0 bis 255 umzuwandeln. Wenn der Wertebereich von img nicht konvertiert wird, wird sein Maximalwert angezeigt ist: 377,
weil: 377x255=96135 > 65535 Es wird also Probleme mit der Speicherung geben. Das Ergebnis wird also die folgende Realität sein.
Wenn der x255 nach hinten verschoben wird, kann er normal angezeigt werden
# opencv show numpy array
# opencv 可以直接显示numpy数组
import pydicom as dicom
import cv2
import numpy as np
import matplotlib.pyplot as plt
if __name__=="__main__":
path = r'C:\Users\user\Desktop\00000002.dcm'
ds = dicom.dcmread(path)
img = dicom.pixel_data_handlers.apply_rescale(ds.pixel_array, ds) # 288 234 uint16
print(img.dtype)
print(img.max(),img.min())
img = img / img.max() * 255
# img=np.array(img,np.int32)
print(img.max(),img.min())
plt.imshow(img,cmap=plt.cm.gray,vmin=0,vmax=255)
plt.show()
Das angezeigte Ergebnis ist: