大家好,这是我两年前写的一篇博客修正版本,本来打算删掉了,但是阅读量很多,可能对大家会有一点小小的帮助,就重新放上来吧。
适用情况
本文适用于原始图像(即不含噪声的图像)存在的情况下。
计算步骤
- 使用待计算SNR图像(记为A)与原始图像(记为B)做相减运算,得到一幅图像(记为C);
- 我们将B视为A的信息部分,将C视为A的噪声部分;
- 分别计算B、C的方差;
- 计算上述两项之比,得到SNR的值。
- 对SNR的值对数化,得到以dB为单位的SNR值。
附matlab代码
A=imread('xx.jpg'); B=imread('original.jpg'); C=imsubtract(A,B); avg1=mean2(C); %求图像均值 [m,n]=size(C); s1=0; for x=1:m for y=1:n s1=s1+(C(x,y)-avg1)^2; %求得所有像素与均值的平方和。 end end C1=s1/(m*n); %利用方差公式求得 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=s2/(m*n); %利用方差公式求得 D1=B1/C1; D1=10*log10(D1);
example
计算结果
SNR=10.1861dB
计算峰值信噪比
如何计算两幅图像之间的PSNR呢?请看另一篇博客,代码简洁、可读性高。