import os
import numpy as np
import cv2
import matplotlib.pyplot as plt

pngno = 1
NumOfCTSlice = len(CT_Slice)
zio = sorted(CT_Slice, key=lambda x: x.SliceLocation, reverse=True)
for gio in range(NumOfCTSlice):
    qq = zio[gio]
    mm = qq.Organ
    if mm is None:
        continue
    len = 0
    a = []
    b = []
    NumOfOrgan = len(mm)
    ak = dicominfo(qq.name)
    filepath = os.getcwd()
    L = dicomread(qq.name)
    
    # 尺寸本来就是 512*512,无需修改
    
    # 在将原图尺寸修改为 512*512 后,imshow 中的 []、'border'、'tight' 属性会使 print 在打印时,一定将图片的尺寸修改为 640*640
    # 此处用 imwrite 代替 print,结合 getframe 不会改变保存图片的尺寸
    # 此处%
    
    # dicomread 读取了 CT 文件信息后不能像普通图片那样直接用 imwrite 保存,如果使用了 imwrite,保存的图片是全黑的 (应该是图像文件格式不一样函数使用不对口所致),
    # 所以这里要先用 imshow,把图像展示出来,再用 imwrite 结合 getframe 保存所需图像
    
    os.chdir('D:\hzx\datawinnoxyf\train1')  # 根据需要,此处为放置制作的输入图像
    # figure(pngno)
    # img1 = imshow(L, [], 'border', 'tight')
    # f1 = getframe(gcf)
    L1 = L * ak.RescaleSlope + ak.RescaleIntercept
    M = cv2.normalize(L1, None, alpha=-5, beta=75, norm_type=cv2.NORM_MINMAX)  # 归一化
    cv2.imwrite(ak.PatientID + '_' + str(pngno) + '.png', M)
    # delete(img1)
    # close all
    
    # h1 = figure(pngno)
    # set(h1,'visible','off')
    ggsv = np.zeros((512, 512))
    img2 = plt.imshow(L, [], 'border', 'tight')
    plt.hold(True)
    ax = [0, 0, 512, 512]
    bx = [0, 512, 512, 0]
    plt.fill(ax, bx, 'k')
    plt.hold(True)
    for g in range(NumOfOrgan):
        if mm[g]['name'] == 'OR TP Lobe-L' or mm[g]['name'] == 'TemporalLobe_L':
            dcmOrigin = ak.ImagePositionPatient
            dcmSpacing = ak.PixelSpacing
            K = len(qq.Organ[g]['ContourData']) / 3
            x1 = np.zeros(K + 1)
            y1 = np.zeros(K + 1)
            for ii in range(K):
                x1[ii] = (mm[g]['ContourData'][1 + (ii - 1) * 3] - dcmOrigin[0, 0]) / dcmSpacing[0, 0]
                y1[ii] = (mm[g]['ContourData'][2 + (ii - 1) * 3] - dcmOrigin[1, 0]) / dcmSpacing[1, 0]
            x1[K + 1] = x1[0]
            y1[K + 1] = y1[0]
            plt.fill(x1, y1, [1 / 255, 1 / 255, 1 / 255])
            f = plt.gcf()
            gg = f.canvas.tostring_rgb()
            gg = cv2.cvtColor(np.frombuffer(gg, dtype=np.uint8).reshape(f.canvas.get_width_height()[::-1] + (3,)), cv2.COLOR_RGB2GRAY)
            a, b = np.where(gg)
            len = len(a)
            for j in range(len):
                ggsv[a[j], b[j]] = 1/255
            plt.fill(ax, bx, 'k')
            plt.hold(True)
    pngno += 1
Matlab 代码转换为 Python 代码:CT 图像处理及器官分割

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

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