import numpy as np import cv2 import os

假设 CT_Slice 是一个包含 DICOM 图像信息的列表

pngno = 1 NumOfCTSlice = len(CT_Slice)

使用 SliceLocation 属性对 CT_Slice 列表进行排序,并以降序排列

zio = np.sort([slice.SliceLocation for slice in CT_Slice])[::-1]

使用索引列表对排序后的 CT_Slice 列表进行遍历

for gio in range(NumOfCTSlice): qq = zio[gio] mm = CT_Slice[qq].Organ # 检查器官是否为空,如果为空则跳过 if mm is None: continue len = 0 a = [] b = [] NumOfOrgan = len(mm) # 获取 DICOM 文件信息 ak = dicominfo(CT_Slice[qq].name) filepath = os.getcwd() # 读取 DICOM 图像数据 L = dicomread(CT_Slice[qq].name)

# 设置工作目录,将处理后的图像保存到指定的文件夹
os.chdir('D:\hzx\datawinnoxyf\train1')
# 使用 RescaleSlope 和 RescaleIntercept 属性进行图像灰度值转换
L1 = L * ak.RescaleSlope + ak.RescaleIntercept
# 使用 OpenCV 库进行图像归一化,将灰度值映射到 -5 到 75 之间
M = cv2.normalize(L1, None, -5, 75, cv2.NORM_MINMAX)
# 保存处理后的图像
cv2.imwrite(f"{ak.PatientID}_{pngno}.png", M)

# 创建一个 512x512 的空白图像
ggsv = np.zeros((512, 512))
# 显示原始图像,并等待用户按下任意键
img2 = cv2.imshow('image', L)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 定义矩形的顶点坐标
ax = np.array([0, 0, 512, 512])
bx = np.array([0, 512, 512, 0])
# 在空白图像上绘制黑色矩形
cv2.fillPoly(ggsv, [ax, bx], (0, 0, 0))

# 遍历器官轮廓数据
for g in range(NumOfOrgan):
    # 检查器官名称是否为 'OR TP Lobe-L' 或 'TemporalLobe_L'
    if mm[f'Item_{g}'].name == 'OR TP Lobe-L' or mm[f'Item_{g}'].name == 'TemporalLobe_L':
        # 获取 DICOM 图像的原点和像素间距信息
        dcmOrigin = ak.ImagePositionPatient
        dcmSpacing = ak.PixelSpacing
        # 获取器官轮廓数据的长度
        K = len(CT_Slice[qq].Organ[f'Item_{g}'].ContourData) // 3
        # 创建存储器官轮廓坐标的数组
        x1 = np.zeros(K+1)
        y1 = np.zeros(K+1)
        # 将器官轮廓数据转换为图像坐标系
        for ii in range(K):
            x1[ii] = (mm[f'Item_{g}'].ContourData[1+(ii-1)*3, 1] - dcmOrigin[0, 0]) / dcmSpacing[0, 0]
            y1[ii] = (mm[f'Item_{g}'].ContourData[2+(ii-1)*3, 1] - dcmOrigin[1, 0]) / dcmSpacing[1, 0]
        # 连接轮廓的起点和终点
        x1[K+1] = x1[0]
        y1[K+1] = y1[0]
        # 使用白色填充器官轮廓区域
        cv2.fillPoly(ggsv, [x1, y1], (1/255, 1/255, 1/255))
        # 在空白图像上绘制黑色矩形
        cv2.fillPoly(ggsv, [ax, bx], (0, 0, 0))
        continue

# 处理完所有器官后,保存处理后的图像
# ...
将 MATLAB 代码转换为 Python 代码:处理医学图像并提取器官轮廓

原文地址: https://www.cveoy.top/t/topic/o7WH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录