基于局部对比度的质量评价隶属于全参考的图片质量评估,是将图片分块后求加权均值和方差最后利用提出的公式计算QILV的一共方法,原文:《Image Quality Assessment Based on Local Variance,Santiago A.F.》
步骤:对原图像和参考图像
1.将原始图像转化为灰度图像后,转化为若干个M*N大小的图像分块。利用同等大小的二维高斯函数获得每个像素对应的权值;
maxi=max(m,n); mini=min(m,n); sig=randi([mini,maxi]); w_x=(1-floor(n/2):n-floor(n/2));%为与图像大小相同 mn互换 w_y=(1-floor(m/2):m-floor(m/2)); [X,Y]=meshgrid(w_x,w_y); W=exp(-(X.^2+Y.^2)./sig.^2);%生成二维高斯函数,用于计算块内每个的像素的权值
W即为高斯函数
2.加权求每个(第k个)分块的均值和方差;
3.求原图像的总均值和方差( len(mean)表示分了多少个子图像)
4.对于两个图像I J 分别得到miu和kesi后,求基于局部对比的相似度:
5.根据一下公式求最后的QILV:
代码:
function [avg,var]=get_every_image(I)%返回子图象的加权均值和方差 [m,n]=size(I); maxi=max(m,n); mini=min(m,n); sig=randi([mini,maxi]); w_x=(1-floor(n/2):n-floor(n/2));%为与图像大小相同 mn互换 w_y=(1-floor(m/2):m-floor(m/2)); [X,Y]=meshgrid(w_x,w_y); W=exp(-(X.^2+Y.^2)./sig.^2);%生成二维高斯函数,用于计算块内每个的像素的权值 avg=0; var=0; for i=1:m for j=1:n avg=avg+W(i,j)*I(i,j); end end avg=avg/sum(sum(W));%计算均值 for i=1:m for j=1:n var=var+((I(i,j)-avg)^2)*W(i,j); end end var=var/sum(sum(W));%计算方差 end
function [miu,kesi,I_comp]=getcompI(I,lenx,leny)%返回图像的总Miu和kesi [m,n]=size(I); co_m=floor(m/lenx);%一块的长度 co_n=floor(n/leny); I_comp=zeros(lenx*leny,2);%存储每一块的均值和方差 num=0; kesi=0; for i=1:lenx for j=1:leny I_del=I(1+(i-1)*co_m:i*co_m,1+(j-1)*co_n:j*co_n); num=num+1; [I_comp(num,1),I_comp(num,2)]=get_every_image(I_del); end end miu=mean(I_comp(:,2)); for i=1:size(I_comp,1) kesi=kesi+(I_comp(i,2)-miu)^2; end kesi=kesi/(size(I_comp,1)-1); kesi=sqrt(kesi); end
主函数入口:
function[QILV]=qilv(I1,I2) I1=double(rgb2gray(I1)); I2=double(rgb2gray(I2)); lenx=8;%一行分为多少个 leny=7;%一列分为多少个 [miu1,kesi1,I_comp1]=getcompI(I1,lenx,leny); [miu2,kesi2,I_comp2]=getcompI(I2,lenx,leny); kesi=0; for i=1:lenx*leny kesi=kesi+(I_comp1(i,2)-miu1)*(I_comp2(i,2)-miu2);%对比度 end kesi=kesi/(lenx*leny-1); QILV=abs(4*miu1*miu2*kesi1*kesi2*kesi/((miu1^2+miu2^2)*(kesi1^2+kesi2^2)*kesi1*kesi2)); end
文章来源: https://blog.csdn.net/qq_36614557/article/details/86764086