平均绝对误差MAE
;用于计算原始影像与经过处理后影像的平均绝对误差 MAE
function calMAE, image_or, image_deal
nDim = size(image_or, /n_dimension)
nDim2 = size(image_deal, /n_dimension)
if nDim le 2 and nDim2 le 2 then begin
valid_data_or = image_or[where(~finite(image_or, /nan))]
valid_data_deal = image_deal[where(~finite(image_deal, /nan))]
if n_elements(valid_data_or) eq n_elements(valid_data_deal) then begin
nums = n_elements(valid_data_or)
MAE = total(abs(valid_data_or - valid_data_deal)) / nums
endif else begin
print, 'vaild data in 2 image is not equal'
return, 0
endelse
endif else begin
print, 'image is not le 2 dims.'
return, 0
endelse
return, MAE
end
均方误差MSE
;用于计算原始影像与经过处理后影像的均方误差MSE
function calMSE, image_or, image_deal
nDim = size(image_or, /n_dimension)
nDim2 = size(image_deal, /n_dimension)
if nDim le 2 and nDim2 le 2 then begin
valid_data_or = image_or[where(~finite(image_or, /nan))]
valid_data_deal = image_deal[where(~finite(image_deal, /nan))]
if n_elements(valid_data_or) eq n_elements(valid_data_deal) then begin
nums = n_elements(valid_data_or)
MSE = total((valid_data_or - valid_data_deal)*(valid_data_or - valid_data_deal)) / nums
endif else begin
print, 'vaild data in 2 image is not equal'
return, 0
endelse
endif else begin
print, 'image is not le 2 dims.'
return, 0
endelse
return, MSE
end
峰值信噪比PSNR
PSNR 峰值信噪比 - Peak Signal to Noise Ratio
peak的中文意思是顶点。而ratio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,输出的影像都会在某种程度与原始影像不同。为了衡量经过处理后的影像品质,我们通常会参考PSNR值来衡量某个处理程序能否令人满意。它是原图像与被处理图像之间的均方误差相对于(2n-1)2的对数值(信号最大值的平方,n是每个采样值的比特数),它的单位是dB。
;用于计算单波段影像的峰值信噪比PSNR
function calPSNR, image, MSE
nDim = size(image, /n_dimension)
if nDim le 2 then begin
image_max = max(image, /nan)
PSNR = 20 * alog(image_max / sqrt(MSE))
return, PSNR
endif else begin
print, 'image dims is not le 2.'
return, 0
endelse
end
信息熵H
信息熵H是图像信息量的反映,是衡量图像信息丰富程度的重要指标。单波段图像的信息熵越大,信息量越大。
其中bit是色深的最大灰度值,p(i)是灰度值i的概率密度。
; 用于计算单波段影像的信息熵H
function calEntroy, image
nDim = size(image, /n_dimension)
if nDim le 2 then begin
pixNums = histogram(image, binsize=1, /nan)
nums = total(pixNums, /nan)
pby = pixNums*1d / nums
imageEntroy = -total(pby*alog(pby) / alog(2), /nan)
return, imageEntroy
endif else begin
print, 'image dims is not le 2.'
return, 0
endelse
end
辐射质量改善因子IF
辐射质量改善因子IF定义为去除条纹前后两幅图像的灰度值沿条纹方向的变化。
其中mIR(i)和mIE(i)分别表示移除条纹之前和之后第i列的平均值。IF值越大,算法的解扩能力越强。
;计算影像辐射质量改善因子IF
function calIF, image_or, image_deal
mean_or = mean(image_or, dimension=1, /nan)
row_num = n_elements(mean_or)
sum_or = 0
for i=1, row_num-1 do begin
number = (mean_or[i] - mean_or[i-1]) * (mean_or[i] - mean_or[i-1])
sum_or = sum_or + number
endfor
mean_deal = mean(image_deal, dimension=1, /nan)
sum_deal = 0
for i=1, row_num-1 do begin
number = (mean_deal[i] - mean_deal[i-1]) * (mean_deal[i] - mean_deal[i-1])
sum_deal = sum_deal + number
endfor
IF_cal = 10 * alog(total(sum_or / sum_deal))
return, IF_cal
end