最近一直在做实验,所以好久没有更新了,先把上周做的一些小的实验贴出来供大家分享。
在医生诊断时,是会将CT图像调整成不同的窗来处理的。比如说肺部CT吧,肺窗(窗宽为2000,窗位为-400)用于看小的肺结节;腹部窗(窗宽400,窗位40)用于看大的肺结节和纵隔淋巴结,还有骨窗。所以在处理CT图像的时候会需要选择不同的窗,那么怎么来使得你的.dcm文件.IMA文件.mhd文件以不同的窗宽窗位显示:
# -*- coding=utf-8 -*-
import dicom
import os
import cv2
import numpy
from os.pathimport splitext
def getfile(file):
dcm = dicom.read_file(file)
img2 = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept
return img2
def get_window_size(window_type):
if window_type =='lung':
center = -500
width =2000
elif window_type =='abdomen':
center =40
width =400
elif window_type =='bone':
center =300
width =2000
return center, width
#调整CT图像的窗宽窗位
def setDicomWinWidthWinCenter(img_data, window_type):
img_temp = img_data
rows =len(img_temp)
cols =len(img_temp[0])
center, width = get_window_size(window_type)
img_temp.flags.writeable =True
min = (2 * center - width) /2.0 +0.5
max = (2 * center + width) /2.0 +0.5
dFactor =255.0 / (max - min)
for iin numpy.arange(rows):
for jin numpy.arange(cols):
img_temp[i, j] =int((img_temp[i, j]-min)*dFactor)
min_index = img_temp <0
img_temp[min_index] =0
max_index = img_temp >255
img_temp[max_index] =255
return img_temp
path ='G:\lowdosect\CH_image/quater_dose_image\L067/'
for root, dirs, filesin os.walk(path):
for i in range(0,len(files),10):
filename = splitext(files[i])[0] +"." +"bmp"
print(filename)
#print(files[i])
im = getfile(path+files[i])
im1 = setDicomWinWidthWinCenter(im,'bone')
cv2.imwrite("G:\lowdosect\CH_image/bone/quarter/" + filename, im1)
还不太会编辑,所以可能空格会有问题,我是在数据集里每10张处理一张存储到新的数据集里,希望对大家有帮助!
网友评论