准备工作
读取DICOM格式图像
#首先要安装pydicom
#pip install pydicom
#读取DICOM文件
ds=pydicom.dcmread("ChestDCM.dcm")
#像素值矩阵
im=ds.pixel_array
后续操作可以对im进行处理,完成骨窗抽取等
一、开窗及其原理
将给定的肺部医学图像ChestDCM(dicom格式)开骨窗,即开窗后的图像只显示图像中的骨骼。
开窗的原理:通过调整图像的灰度值范围,将骨骼的灰度值范围突出显示,以便更清晰地观察和诊断骨骼结构。
对于DICOM格式的医学图像,可以利用其包含的像素灰度值信息和窗宽(Window Width)与窗位(Window Level)两个参数来实现开骨窗操作。窗宽定义了显示图像中灰度值范围的宽度,而窗位定义了该范围的中心位置。通过调整这两个参数,可以将骨骼的灰度值范围置于窗宽内,并将窗位调整到合适的位置,从而使骨骼结构更加清晰地显示出来。
import cv2
import numpy as np
import matplotlib.pyplot as plt # 用于显示图像
# 读取DICOM图像
def read_dicom_image(file_path):
import pydicom
dicom_image = pydicom.dcmread(file_path)
image_array = dicom_image.pixel_array
return image_array
# 应用窗宽窗位
def apply_window(image, window_width, window_level):
image = image.astype(np.float32) # 转换为浮点数以避免数据溢出
windowed_image = (image - window_level) / (window_width / 2)
# 将结果裁剪到0-255范围,并转换为8位无符号整数
windowed_image = np.clip(windowed_image, -1, 1) * 255
windowed_image = windowed_image.astype(np.uint8)
return windowed_image
# 显示图像
def display_images(original_image, windowed_image):
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(original_image, cmap='gray', vmin=np.min(original_image), vmax=np.max(original_image))
plt.axis('off')
plt.subplot(1, 2, 2)
plt.title('Bone Windowed Image')
plt.imshow(windowed_image, cmap='gray')
plt.axis('off')
plt.show()
# 主函数
def main():
file_path = 'D:\pycharm\image\ChestDCM.dcm' # 假设的DICOM文件路径
dicom_image = read_dicom_image(file_path)
window_width = 1500 # 窗宽
window_level = 1500 # 窗位
bone_windowed_image = apply_window(dicom_image, window_width, window_level)
display_images(dicom_image, bone_windowed_image)
if __name__ == '__main__':
main()
开窗结果: