评价图像质量SNR和PSNR

评价图像质量

SNR方法

https://blog.csdn.net/itigoitie/article/details/91077307
计算步骤
1.使用待计算SNR图像(记为A)与原始图像(记为B)做相减运算,得到一幅图像(记为C);我们将B视为A的信息部分,将C视为A的噪声部分;
2.分别计算B、C的方差;
3.计算上述两项之比,得到SNR的值。
4.对SNR的值对数化,得到以dB为单位的SNR值。
下面是链接里的matlab代码:

clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
 warning off % 消除警告
 feature jit off % 加速代码运行
 A=imread(‘C:\Users\Lenovo\Desktop\dip\xx.jpg’);
 B=imread(‘C:\Users\Lenovo\Desktop\dip\original.jpg’);
 C=imsubtract(A,B);
 avg1=mean2©; %求图像均值
 [m,n]=size©;
 s1=0;
 for x=1:m
 	for y=1:n
 		s1=s1+(C(x,y)-avg1)^2; %求得所有像素与均值的平方和。
	 end
 end
 C1=s1/(mn); %利用方差公式求得
 avg2=mean2(B); %求图像均值
 [m,n]=size(B);
 s2=0;
 for x=1:m
 	for y=1:n
 		s2=s2+(B(x,y)-avg2)^2; %求得所有像素与均值的平方和。
 	end
 end
 B1=s1/(mn); %利用方差公式求得
 D1=B1/C1;
 D1=10*log10(D1);

PSNR

function S = PSNR(s,t)
%计算PSNR
%输入参数
% s--图像矩阵1
% t--图像矩阵2
[m,n,~] = size(s);
s = im2uint8(mat2gray(s));
t = im2uint8(mat2gray(s));
s = double(s);
t = double(t);

sd = 0;
mi = m*n*max(max(s.^2));
for u =1:m
	for v = 1:n
		sd = sd + (s(u,v)-t(u,v))^2;
	end
end
if sd = =0
	sd =1;
end
S = mi/sd;
S = 10*log10(S);

信息熵

http://blog.sina.com.cn/s/blog_68bd4bbd0100z7or.html

[filename1, pathname1] = uigetfile('*.*', '读入融合效果');
fusion_img = imread([pathname1, filename1]);
A=double(fusion_img);
[M,N]=size(A);

temp=zeros(1,256);
%对图像的灰度值在[0,255]上做统计
for m=1:M
    for n=1:N
        if A(m,n)==0
            i=1;
        else
            i=A(m,n);
        end
        temp(i)=temp(i)+1;
    end
end
temp=temp./(M*N);

%由熵的定义做计算
result=0;

for i=1:length(temp)
    if temp(i)==0;
        result=result;
    else
        result=result-temp(i)*log2(temp(i));
    end
end
result

Guess you like

Origin blog.csdn.net/math_new_photo/article/details/109251507