查看DICOM图像
import pydicom
import matplotlib.pyplot as plt
dicom_file_path = 'DICOM_anon/i0000,0000b.dcm'
dicom_data = pydicom.dcmread(dicom_file_path)
print("DICOM Metadata:")
print(dicom_data)
pixel_data = dicom_data.pixel_array
plt.imshow(pixel_data, cmap=plt.cm.gray)
plt.axis('off')
plt.title('DICOM Image')
plt.show()
查看该dcm文件是否为单张多帧
import pydicom
dicom_file_path = 'do_dcm/1-1.dcm'
dicom_data = pydicom.dcmread(dicom_file_path)
if 'NumberOfFrames' in dicom_data:
num_frames = dicom_data.NumberOfFrames
print(f"This DICOM file contains {num_frames} frames.")
else:
print("This DICOM file is not a multi-frame image.")
单张单帧的dcm文件转为png图像
import look_dcm
import numpy as np
from PIL import Image
dicom_file_path = 'DICOM_anon/i0000,0000b.dcm'
dicom_data = pydicom.dcmread(dicom_file_path)
pixel_data = dicom_data.pixel_array
pixel_data_normalized = ((pixel_data - np.min(pixel_data)) / (np.max(pixel_data) - np.min(pixel_data))) * 255
pixel_data_normalized = pixel_data_normalized.astype(np.uint8)
png_image = Image.fromarray(pixel_data_normalized, mode='L')
output_png_path = '/root/autodl-tmp/datasets/CHAOS/CT/1/DICOM1.png'
png_image.save(output_png_path)
将文件夹中多个单张单帧的dcm转为png图像
import os
import look_dcm
import numpy as np
from PIL import Image
import pydicom
input_folder = '19/DICOM_anon'
output_folder = '19/19DICOM_PNG/'
os.makedirs(output_folder, exist_ok=True)
for dcm_file_name in os.listdir(input_folder):
if dcm_file_name.endswith('.dcm'):
dcm_file_path = os.path.join(input_folder, dcm_file_name)
dicom_data = pydicom.dcmread(dcm_file_path)
pixel_data = dicom_data.pixel_array
pixel_data_normalized = ((pixel_data - np.min(pixel_data)) / (np.max(pixel_data) - np.min(pixel_data))) * 255
pixel_data_normalized = pixel_data_normalized.astype(np.uint8)
png_image = Image.fromarray(pixel_data_normalized, mode='L')
png_file_path = os.path.join(output_folder, dcm_file_name.replace('.dcm', '.png'))
png_image.save(png_file_path)
单张多帧的dcm转为png图像
import pydicom
import os
import numpy as np
from PIL import Image
dicom_file_path = '/root/autodl-tmp/wzh/do_dcm/1-1.dcm'
dicom_data = pydicom.dcmread(dicom_file_path)
if 'NumberOfFrames' in dicom_data:
num_frames = dicom_data.NumberOfFrames
print(f"This DICOM file contains {num_frames} frames.")
output_folder = 'do_dcm/dcm_framesPNG/'
os.makedirs(output_folder, exist_ok=True)
for frame_idx in range(num_frames):
frame_data = dicom_data.pixel_array[frame_idx, ...]
pixel_data_normalized = ((frame_data - np.min(frame_data)) / (np.max(frame_data) - np.min(frame_data))) * 255
pixel_data_normalized = pixel_data_normalized.astype(np.uint8)
png_image = Image.fromarray(pixel_data_normalized, mode='L')
png_file_path = os.path.join(output_folder, f'frame_{frame_idx:03d}.png')
png_image.save(png_file_path)
else:
print("This DICOM file is not a multi-frame image.")
将文件夹中多个单张多帧的dcm转为png图像
import os
import pydicom
from PIL import Image
input_folder = 'path/to/your/input/folder'
output_folder = 'path/to/output/folder'
os.makedirs(output_folder, exist_ok=True)
for file_name in os.listdir(input_folder):
if file_name.endswith('.dcm'):
dcm_file_path = os.path.join(input_folder, file_name)
dicom_data = pydicom.dcmread(dcm_file_path)
pixel_data = dicom_data.pixel_array
sub_folder_name = os.path.splitext(file_name)[0]
sub_folder_path = os.path.join(output_folder, sub_folder_name)
os.makedirs(sub_folder_path, exist_ok=True)
png_file_path = os.path.join(sub_folder_path, f'{sub_folder_name}.png')
png_image = Image.fromarray(pixel_data, mode='L')
png_image.save(png_file_path)