最近一直在做實(shí)驗(yàn)铸豁,所以好久沒(méi)有更新了,先把上周做的一些小的實(shí)驗(yàn)貼出來(lái)供大家分享菊碟。
在醫(yī)生診斷時(shí)节芥,是會(huì)將CT圖像調(diào)整成不同的窗來(lái)處理的。比如說(shuō)肺部CT吧逆害,肺窗(窗寬為2000头镊,窗位為-400)用于看小的肺結(jié)節(jié);腹部窗(窗寬400魄幕,窗位40)用于看大的肺結(jié)節(jié)和縱隔淋巴結(jié)相艇,還有骨窗。所以在處理CT圖像的時(shí)候會(huì)需要選擇不同的窗纯陨,那么怎么來(lái)使得你的.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
#調(diào)整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)
還不太會(huì)編輯坛芽,所以可能空格會(huì)有問(wèn)題,我是在數(shù)據(jù)集里每10張?zhí)幚硪粡埓鎯?chǔ)到新的數(shù)據(jù)集里翼抠,希望對(duì)大家有幫助咙轩!