图像信噪比
简介图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算, 有一种方法可以近似估计图像信噪比,即信号与噪声的方差之比。首先计算图像所有象素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。 峰值信噪比经常用作图像压缩等领域中信号重建质量的测量方法,它常简单地通过均方差(MSE)进行定义。两个m×n单色图像I和K,如果一个为另外一个的噪声近似,那么它们的的均方差定义为:
峰值信噪比定义为: 其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。更为通用的表示是,如果每个采样点用 B 位线性脉冲编码调制表示,那么 MAXI 就是
对于每点有RGB三个值的彩色图像来说峰值信噪比的定义类似,只是均方差是所有方差之和除以图像尺寸再除以 3。 图像压缩中典型的峰值信噪比值在 30 到 40dB 之间,愈高愈好。
%%%%%%%%%%%%%%%%%
程序:(I 是原图像,K是滤波后的图像,默认原图无噪声,测试那种滤波效果好)
video=mmreader('che2.AVI');
I1=read(video,590); I1=rgb2gray(I1); [m,n]=size(I1); J=imnoise(I1,'gaussian',0,0.002); %加入高斯噪声 %进行均值滤波 h=fspecial('average',3); %fspecial函数用于产生预定义滤波器 I2=uint8(round(filter2(h,I1))); %filter2函数用于图像滤波,此处h是滤波参数(均值),I1是要处理的图像 %进行中值滤波 I3=medfilt2(J,[3,3]); %medfilt2函数用于图像的中值滤波 %进行维纳滤波 I4=wiener2(J,[3,3]);%进行一次维纳滤波 I5=wiener2(I4,[3,3]);%进行二次维纳滤波 subplot(2,3,1),imshow(I1),title('原图象') subplot(2,3,2),imshow(J),title('加噪声图象') subplot(2,3,3),imshow(I2),title('均值滤波后图象') subplot(2,3,4),imshow(I3),title('中值滤波后图象') subplot(2,3,5),imshow(I4),title('维纳滤波后图象') I1=double(I1); I2=double(I2); I3=double(I3); I4=double(I4); I5=double(I5); s2=0; s2=double(s2); s3=0; s3=double(s3); s4=0; s4=double(s4); s5=0; s5=double(s5); for i=1:m for j=1:n s2=s2+(I1(i,j)-I2(i,j))^2;
s3=s3+(I1(i,j)-I3(i,j))^2; s4=s4+(I1(i,j)-I4(i,j))^2; s5=s5+(I1(i,j)-I5(i,j))^2; end end MSE2=s2/(m*n) MSE3=s3/(m*n) MSE4=s4/(m*n) MSE5=s5/(m*n) PSNR2=10*log10(double(255^2/MSE2)) PSNR3=10*log10(double(255^2/MSE3)) PSNR4=10*log10(double(255^2/MSE4)) PSNR5=10*log10(double(255^2/MSE5)) PSNR2 =
33.6596
PSNR3 = 32.6051
PSNR4 = 33.8043
PSNR5 = 34.3825
一般情况,信噪比越大越好。
|
|