图像数据集制作——窗位窗宽+归一化处理【python版本】

在图像训练集制作中,尤其对于医学影像,为了获得更好的训练效果,往往需要增大图像间像素值差异。同时,为了防止训练中出现数值暴增,补充简单归一化处理。

源代码

import numpy as np
import matplotlib.pyplot as plt  
import random
import math

#-----------data-----------#
rawData = np.fromfile('CDH_Low.raw', dtype=np.int16) #读取.raw数据
# window-level Processing
rawData_win=np.zeros(rawData.shape,dtype='float32')
window_center=1200 #窗位
window_width=400  #窗宽
win_min = (2*window_center - window_width)/2.0 + 0.5  
win_max = (2*window_center + window_width)/2.0 + 0.5    
dFactor = 255.0/(win_max - win_min) 
nNumPixels=rawData.shape[0]
for i in range(nNumPixels):
    pixel_val = rawData[i]
    if pixel_val < win_min:
        disp_pixel_val = 0 
        continue;  
    if pixel_val > win_max: 
        disp_pixel_val = 255  
        continue;  
    nPixelVal = (pixel_val - win_min)*dFactor
    if nPixelVal < 0:
        disp_pixel_val = 0 
    elif nPixelVal > 255:
        disp_pixel_val = 255  
    else:
        disp_pixel_val = nPixelVal
    rawData_win[i]=disp_pixel_val
# normalize processing
rawData_win=(rawData_win-np.min(rawData_win))/(np.max(rawData_win)-np.min(rawData_win))

窗位窗宽图像增强

win_min = (2*window_center - window_width)/2.0 + 0.5  
win_max = (2*window_center + window_width)/2.0 + 0.5    

nPixelVal = [(pixel_val - win_min)/(win_max - win_min) ]*255 这里映射为8bit 0~255灰度图像

窗位窗宽可根据数据特征和自身需求手动设置,本帖中博主使用为CT数据,故选择常用窗宽400,窗位1200参数。

图像归一化处理

(1)线性函数转换,表达式如下:
y=(x-MinValue)/(MaxValue-MinValue)
说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
(2)对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。
(3)反余切函数转换,表达式如下:
y=atan(x)*2/PI
(4)一个归一化代码.
I=double(I);
maxvalue=max(max(I)');%max在把矩阵每列的最大值找到,并组成一个单行的数组,转置一下就会行转换为列,再max就求一个最大的值,如果不转置,只能求出每列的最大值。
f = 1 - I/maxvalue; %为什么要用1去减?
Image1=f;

你可能感兴趣的:(图像数据集制作——窗位窗宽+归一化处理【python版本】)