p
y
d
i
c
o
m
数
据
的
处
理
pydicom数据的处理
pydicom数据的处理
读取Dicom文件后,可以借助Numpy以及图像处理库(如PIL.Image)来进行简单的处理
读取图像
folder_path = r"D:\project"
file_name = "IM62.dcm"
file_path = os.path.join(folder_path,file_name)
dcm = pydicom.dcmread(file_path)
获取像素矩阵
dcm = pydicom.dcmread(file_path)
img_arr = dcm.pixel_array
print(type(img_arr))
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/828a7b210a9a86701b1671435b4460b1.png)
获取像素矩阵的shape
print("shape",img_arr.shape)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4c8cdd587639dcf388b35132142134dd.png)
获取像素矩阵的dtype(uint16)
print("dtype",img_arr.dtype)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0b8f0303c4816bfe9169dba8eea516e5.png)
查看所有值
flatten_data = img_arr.flatten()
print("flatten_data", flatten_data)
print(len(flatten_data))
list_data = flatten_data.tolist()
print("list_data", list_data)
set_data = set(list_data)
print("set_a",set_data)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/890e1b64aea10dbfccc20fefaee3bb79.png)
借助PIL.Image
可以直接进行简单的图像处理
from PIL import Image
data_img = Image.fromarray(ds.pixel_array)
print(type(data_img))
print(data_img)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c29550ae78dc5145fb4d55ec9ccdc3d6.png)
Image转ndarray,查看dtype
img_convert_ndarray = np.array(data_img)
print(img_convert_ndarray.dtype)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8cde716865acdae664777b95a6e935b5.png)
查看所有值(没有变化)
flatten_data = img_convert_ndarray.flatten()
print("flatten_data", flatten_data)
print(len(flatten_data))
list_data = flatten_data.tolist()
print("list_data", list_data)
set_data = set(list_data)
print("set_a",set_data)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b57f44a3ffc211745c2072f0b6bb2a7d.png)
借助PIL.Image
选择45°,data_img_rotated的像素值不会受到影响
data_img.show()
data_img_rotated = data_img.rotate(angle=45)
data_img_rotated.show()
经过PIL.IMAGE处理后的dicom图像转为ndarray后,可以重新保存为dicom文件
data_rotated = np.array(data_img_rotated)
dcm.PixelData = data_rotated.tobytes()
dcm.Rows,dcm.Columns = data_rotated.shape
new_name = "dicom_rotated.dcm"
dcm.save_as(os.path.join(".",new_name))
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8fbc56ac42778d49dbcb928580cced0c.png)
dcm_rotated = pydicom.dcmread(os.path.join(".",new_name))
dicom_rotated_img = Image.fromarray(dcm_rotated.pixel_array)
dicom_rotated_img.show()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/52df7235c244de88db2474b186f09000.png)
可视化
方式一(pyplot)
from matplotlib import pyplot
pyplot.imshow(ds.pixel_array,cmap=pyplot.cm.bone)
pyplot.show()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b1e74fc661be6ffc7adf5aac9f573e8e.png)
方式二(PIL.Image)
from PIL import Image
data_img = Image.fromarray(dcm.pixel_array)
data_img.show()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c6a78ab86a12d68ec6e1ab2759e04727.png)