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

基于局部对比度的质量评价隶属于全参考的图片质量评估,是将图片分块后求加权均值和方差最后利用提出的公式计算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

主函数入口:

I1 = imread("xxx.jpg");
I2 = imread("yyy.jpg");
qilv(I1, I2)


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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值