Objective Evaluation Index of image
Objective Evaluation Index of image
图像质量客观评价指标
在做红外图像细节增强算法研究时,很重要一点就是要对经过算法处理的图像结果进行评价,分成两种评价方法。一种是视觉效果评价:主观的人眼观察,主要是通过观察者能否看到更多图像细节,给人的感觉是否真实自然,与其他算法处理的图像的亮度和对比度的比较。在论文中的呈现方式,就是把各个算法的处理结果和原图一起呈现给观察者,再对图像某一具体区域进行详细分析,如图像中的文字,黑暗区域,栏杆树木和建筑物等细节信息进行比较,看那种算法的结果更清晰,暴露出更多的细节。当然咯,主观评价方式往往取决于观察者,并不是一种客观可靠的方式,往往需要几种公认的图像质量客观评价指标,对红外图像细节增强算法的处理结果进行比较。通过阅读大量的SCI文献,如IEEE Transactions on Image Processing,Optic Engineering, Applied Optics, Optik, Infrared Physics & Technology等多种权威期刊的图像处理论文精读,本文选取了四种经典的客观评价指标:RMSC, SSIM, FSIM, MOS
一 RMSC
The Root-Mean-Square Contrast (RMSC) index,即均方根对比度,用来衡量图像的对比度,其值越大对比度越高。其中, 为图像总像素的均值。I为图像某点的像素。M和N分别为图像的高和宽。
The MATLAB code of RMSC is following:
MATLAB Code
二 SSIM
The Structural SIMilarity (SSIM) index between two images, 图像结构相似性,是一种衡量两幅图像相似度的指标。用来判断图片压缩后的质量。由于这个图像指标很流行,百度搜索一大堆,而且MATLAB有函数可以调用,故不再详细介绍。接下来,只是给出我平时用SSIM评价红外图像质量的MATLAB代码:
How to use SSIM in MATLAB:
The use of SSIM Code
上面的MATLAB代码,注释为以前的编写的,输入图像和参考图像以tif和bmp格式。没注释则为今天编写的,为mat格式,更加准确,一般经典的图像增强算法,输入图像都是mat格式。即把结果保存为mat格式,用save,直接在命令窗口输入help save查看保存为mat格式的具体用法。论文的算法,输入也是mat格式。
三 FSIM
feature similarity index mersure(FSIM),是SSIM的变种,该算法认为一张图片中的所有像素并非具有相同的重要性,比如物体边缘的像素点对于界定物体的结构肯定比其他背景区域的像素点更为重要;另外一种重要的评价指标VIF尽管在不同的子带上具有不同的权重,但是在具体的某一子带上参与计算的像素点均具有相同的权重;根据图像本身的特性,这样不加区分并不合适。因此改进的方向实际上重在如何区分这些重要点并给与合适的权重。在GitHub上可以搜到代码,要想进一步理解,可以去搜作者的论文。
在MATLAB软件里有函数可以调用,直接help FSIM, 即[FSIM, FSIMc] = FeatureSIM(img1, img2);
FSIM Code
上面的MATLAB代码为我在网上搜索的FSIM代码,还未详细研究和调用,故以后再进一步介绍。
四 MOS
the mean opinion score(MOS),一种主观的评价方式,即对图像的处理效果打分,我的理解为观察者对算法的处理结果从对比度,真实性,细节清晰度等三方面进行打分,如每一项满分5分,值越大说明处理结果越好,具体的介绍见下面的文献[ref]:
【ref】Realtime infrared image detail enhancement based on fast guided image filter and plateau equalization.
五 信息熵(entropy)
图像中平均信息量的多少。这是一种简单的评价方式,MATLAB代码在网上和matlab软件里都有函数可以调用。
The matlab code of entropy
Entropy Code
当然图像的评价指标还有psnr, mse等都是常见的,由于简单,故不会作为论文中的客观评价指标。本文选取的为RMSC, SSIM, MOS三种。还有算法运行时间,这个与MATLAB软件,个人电脑的内存,CPU型号,系统等有关,故作为评价指标并不可靠,谨记!通常用算法复杂度衡量更准确。算法运行时间,在matlab中用tic与 toc函数分别加在算法的开头与末尾即可。
六 常见图像处理指标(图像的均值和标准差)
这些基本的代码是得掌握,直接贴出matlab代码如下:
1. 求图像的均值 close all; clear; clc; i=imread('d:/lena.jpg'); %载入真彩色图像路径 i=rgb2gray(i); %转换为灰度图 i=double(i); %将uint8型转换为double型,否则不能计算统计量 [m,n]=size(i); s=0; for x=1:m for y=1:n s=s+i(x,y); %求像素值总和 s , i(x,y)表示位于某个坐标下的像素值 end end %所有像素均值 a1=mean(mean(i)); %第一种方法:先计算列向量均值,再求总均值。 a2=mean2(i); %第二种方法:用函数mean2求总均值 a3=s/(m*n); %第三种方法:按公式计算,像素值总和除以像素个数。 a4=sum(sum(i))/(m*n); %第四种方法:也是按公式计算,但是用sum来求像素值总和。 2.求图像的标准差 close all clear clc; i=imread('d:/lena.jpg'); %载入真彩色图像 i=rgb2gray(i); %转换为灰度图 i=double(i); %将uint8型转换为double型,否则不能计算统计量 avg=mean2(i); %求图像均值 [m,n]=size(i); s=0; for x=1:m for y=1:n s=s+(i(x,y)-avg)^2; %求得所有像素与均值的平方和。 end end %求图像的方差 a1=var(i(:)); %第一种方法:利用函数var求得。 a2=s/(m*n-1); %第二种方法:利用方差公式求得 a3=(std2(i))^2; %第三种方法:利用std2求得标准差,再平方即为方差。
六 MATLAB调试(找错与改正)
错误使用 conv2
不支持 N 维数组。
出错 filter2 (line 59)第二级
y = conv2(hcol, hrow, x, shape);
出错 ssim (line 188)第一级
mu1 = filter2(window, img1, 'valid');
出错 SSIM_CAL (line 24)顶层
mval = ssim(A,ref)
%%上面为报错信息
1.找错:
一是看懂MATLAB提示,最底下为最顶层函数1,往上为第一级函数1.1,第二级函数1.1.1。在上面的例子,SSIM_CAL 为顶层函数,在其24行的ssim函数(第一级)出错。在ssim函数的188行的filter2函数(第二级)出错。再继续深入到filter2函数中的59行出错,即conv2函数出错;就是问题源头所在、已找到错误。
2.改正(解决问题)
设置断点,即在问题源头出设置断点,运行matlab程序,然后再查看断点处函数的值或变量值,找到出错原因,并改正。比如,本例子中则在filter2函数中的59行(问题源头)设置断点,运行后查看这一行代码conv2的变量值,和conv2函数的用法和注意事项,即conv2函数仅支持2维数组卷积,但运行到这个断点,发现conv2函数中的x变量,即输入图像为m*n*3,即多维数组,故报错。通过断点找到原因后,解决问题十分容易,即将输入图像搞成二维即可。
这就是调试matlab程序的方法,通过报错定位问题,再通过设置断点找出问题,再根据问题源头解决即可!
这是今天做红外图像细节增强算法的收获!
来源https://www.cnblogs.com/Xwangzi66/p/14847721.html