稀疏孔径光学系统的几种图像质量评价方法

        在这里列举了几个稀疏孔径光学系统,常用于比对对成像后的图像的复原效果进行评价,也可用于评价不同光学系统的成像效果等。

        第一类是通用的图像质量评价算法,即可适用于任何的图像。由于不是本次的核心,仅简单过一遍公式和代码。以下f表示参考图像(原始图像),g表示复原图像。大小都为m*n。

        (1)均方误差(Mean Square Error,MSE)

MSE以及同系的均方根误差(RMSE)、平均绝对误差(MAE)

        

f=imread('f.jpg');
g=imread('g.jpg');
MSE=mean2((double(f)-double(g)).^2);
%RMSE=sqrt(MSE);
RMSE=sqrt(mean2((double(f)-double(g)).^2));
MAE=mean2(abs(double(f)-double(g)));

为方便起见,直接用灰度图像,彩色图像可先转为灰度图像,由于图像读入为uin8格式,在uint8格式中,最小为0,为了防止出现uint8(2)-uint8(22)=0(uint8)这种错误,改为double格式。RMSE可直接由MSE开方获得。

        (2)峰值信噪比(Peak Signal to Noise Ratio,PSNR)

信噪比(SNR)如下,PSNR可由MSE间接得到。

SNR=10*log10(sum(sum(double(f).^2))/sum(sum((double(f)-double(g).^2))));
PSNR=10*log10(255^2/MSE);

        (3)信息熵

Pi为g的灰度值i出现的概率,max为灰度级,一般为255,每个灰度值的概率可由直方图得到。

plist=imhist(g);
plist=plist/(sum(sum(plist)));
E=-sum(plist.*log2(plist));

        (4)清晰度

为了书写方便,将f和g转为double格式(应该先转的)。

G=0;
f=double(f);
g=double(g);
for i=1:m-1
    for j=1:n-1
        G=G+(g(i+1,j)-g(i,j))^2+(g(i,j+1)-g(i,j))^2;
    end
end
D=sqrt(G/2)/(m*n);

        (5)相关系数

就是数学中的那个相关系数,大于0小于1,为正相关,等于0,为不相关,大于-1小于0,为负相关。

式中E[·]为数学期望,即均值。

% cormatrix=corrcoef(f,g);
% cor=cormatrix(1,2);
cor=mean2((f-mean2(f)).*(g-mean2(g)))/(sqrt(mean2(f.^2)-mean2(f)^2)*sqrt(mean2(g.^2)-mean2(g)^2));

        (6)结构相似度

C1、C2为两个常数,miu表示平均亮度(均值),sigma_x表示标准差,sigma_fg表示f和g地协方差。这个算法使用地最广,代码也很容易得到,包括Matlab也有自带,所以就不赘述了。

       第二类为针对稀疏孔径光学系统所提出的算法,相对于第一类方法,该类方法更针对稀疏孔径或其他成像系统,所用的算法更有说服力。

(1)峰值旁瓣积分比(Peak to Intergrated-Sidelobe Ratio,PISLR)

PISLR是描述成像系统的PSF函数主峰内集中能量大小的算法,定义为PSF在主瓣圆内外能量之比,即

一个PSF函数平面和三维面如下所示

主峰(主瓣圆)可以看作是三维(平面)图中间最高(亮)的那一部分,其他地方视作旁瓣。首先要做的是定义多大的峰宽(直径)内作为主峰(主瓣圆)的界限。在这里采用论文《稀疏孔径光学成像系统图像恢复算法研究 蒋艳超》中的提及:主瓣圆的直径可以表示为峰值半高宽(Full Width Half Maximum,FWHM)的倍数关系:

(注:论文《光学合成孔径系统成像性能优化与分析》中的乘子为1.18) 

峰值半高宽又称半高宽、半高全宽,是在函数中最大峰(最大值)前后两个点对应的函数值为函数最大峰对应的最大值一半的宽度。即某函数最大值为1,峰值半高宽为最大值附近两个取值为0.5的点的距离。

由于PSF具有旋转对称性,并且PSF在Matlab中表示是离散化的(以矩阵形式读取文件直接获得),在实现中,首先通过find函数找到最大值所在的坐标(r,c),然后向右查找,直到这个坐标对应的值小于0.5倍的最大值结束,这个遍历长度(不包括最后小于0.5倍的坐标)的二倍就是离散化后的峰值半高宽,因为离散化所以最小间隔为1,可以通过采样或拟合等提高精度。得到峰值半高宽,就得到了主瓣圆的直径,根据之前的公式,就得到了最后的PISLR,同样由于离散化,实质上公式右侧的分子等于与峰值坐标距离小于半径(之前计算的直径的一半)的所有坐标对应的PSF值之和,分母等于大于半径的所有坐标对应的PSF值之和。

[h,w]=size(Psf);
[r,c]=find(Psf==max(max(Psf)));
FHWM=0;
for i=c+1:w
    if Psf(r,i)<0.5*max(max(Psf))
        break
    else
        FHWM=FHWM+1;
    end
end
wpeak=2.37*FHWM;
Smain=0;
Sside=0;
for i=1:h
    for j=1:w
        if sqrt((i-r)^2+(j-c)^2)<=0.5*wpeak
            Smain=Smain+Psf(i,j);
        else
            Sside=Sside+Psf(i,j);
        end
    end
end
PISLR=10*log10(Smain/Sside);

(2)中高频MTF

反映了物体不同频率成分的传递能力。一般来说,高频部分反映物体的细节传递情况,中频部分反映物体的层次传递情况低频部分反映物体的轮廓传递情况。不同成像系统表现在MTF的中高频下降的速度,所以中高频内的平均MTF可以作为衡量成像系统的成像性能的标准。

OTF由PSF的归一化傅里叶变换得到,MTF为OTF的模。

由于OTF是复数矩阵,其模相当于每个元素实数的平方加上虚数的平方再开根号,在matlab中可直接用abs()函数表示模,所以计算如下:

OTF=fftshift(fft2(Psf))./(sum(sum(Psf)));
MTF=abs(OTF);

得到的MTF三维面以及频率变化曲线:

计算中高频MTF公式如下:

rou_Dc和rou_dc分别为系统截止频率和子孔径截止频率:

lambda为波长,D为子孔径外接圆直径,d为子孔径直径,di为出瞳到像面的距离。由于作者比较菜,所以频率与矩阵的比例关系只能手动地建立关系。

[rm,cm]=find(MTF==max(max(MTF)));
di=10;
d=0.5;
D=1;
lambda=7e-10;
mtf=MTF(rm,cm:w);
DC=D/lambda/di;
dc=d/lambda/di;
midfre=0;
r=43;%截止频率对应的矩阵内的半径
for i=1:h
    for j=1:w
        if sqrt((i-rm)^2+(j-cm)^2)>=r && sqrt((i-rm)^2+(j-cm)^2)<=r*(DC/dc)
            midfre=midfre+MTF(i,j);
        end
    end
end
midfre=midfre/(2*pi^2*(DC^2/dc^2-1));

猜你喜欢

转载自blog.csdn.net/qq_36614557/article/details/108473601