本文摘自本人的毕业设计《数字图像滤波算法研究》2019, Chang’an University, Xi’an, China.
本文适用于原始图像(即不含噪声的图像)存在的情况下。
- 使用待计算SNR图像(记为A)与原始图像(记为B)做相减运算,得到一幅图像(记为C);
- 我们将B视为A的信息部分,将C视为A的噪声部分;
- 分别计算B、C的方差;
- 计算上述两项之比,得到SNR的值。
- 对SNR的值对数化,得到以dB为单位的SNR值。
附matlab代码
clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
warning off % 消除警告
feature jit off % 加速代码运行
A=imread(‘C:UsersLenovoDesktopdipxx.jpg’);
B=imread(‘C:UsersLenovoDesktopdiporiginal.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);
example
计算结果
SNR=10.1861dB