基于局部对比度的质量评价(QILV)的matlab实现

匿名 (未验证) 提交于 2019-12-02 23:34:01

基于局部对比度的质量评价隶属于全参考的图片质量评估,是将图片分块后求加权均值和方差最后利用提出的公式计算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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!