基于matlab的线性平滑滤波图像增强并给出其PSNR指标
最简单的平滑滤波是将原图中一个像素的灰度值和它周围邻近8个像素的灰度值相加,然后将求得的平均值(除以9)作为新图中该像素的灰度值。这种方法称为邻域平均法,它采用模板计算的思想,模板操作实现了一种邻域运算,即某个像素点的结果不仅与本像素灰度有关,而且与其邻域点的像素值有关。
邻域平均处理方法是以图像模糊为代价来减小噪声的,且模板尺寸越大,噪声减小的效果越显著。如果f(x,i) 是噪声点,其邻近像素灰度与之相差很大,采用邻域平均法就是用邻近像素的平均值来代替它,这样能明显消弱噪声点,使邻域中灰度接近均匀,起到平滑灰度的作用。因此,邻域平均法具有良好的噪声平滑效果,是最简单的一种平滑方法.
Matlab代码:
I= imread('1.jpg');%自己任意给出一张图片
I=im2double(I);
H=rgb2gray(I);
J=imnoise(H, 'salt& pepper', 0.02);
h1=fspecial('average',3);
h2=fspecial('average',5);
h3=fspecial('average',7);
K1=filter2(h1, J);
K2=filter2(h2, J);
K3=filter2(h3, J);
subplot(221);imshow(J);title('0');
subplot(222);imshow(K1);title('1');
subplot(223);imshow(K2);title('2');
subplot(224);imshow(K3);title('3');
[g w]=size(K1);
L=imresize(K1,[floor(g/2)floor(w/2)]);
L=imresize(L,[gw]);
M=im2uint8(K1);
N=im2uint8(L);
B=8;
MAX=2^B-1;
MES=sum(sum((M-N).^2))/(g*w);
PSNR=20*log10(MAX/sqrt(MES))
[g w]=size(K2);
L=imresize(K2,[floor(g/2)floor(w/2)]);
L=imresize(L,[gw]);
M=im2uint8(K2);
N=im2uint8(L);
B=8;
MAX1=2^B-1;
MES1=sum(sum((M-N).^2))/(g*w);
PSNR1=20*log10(MAX1/sqrt(MES1))
[g w]=size(K3);
L=imresize(K3,[floor(g/2)floor(w/2)]);
L=imresize(L,[gw]);
M=im2uint8(K3);
N=im2uint8(L);
B=8;
MAX2=2^B-1;
MES2=sum(sum((M-N).^2))/(g*w);
PSNR2=20*log10(MAX2)/sqrt(MES2)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |