图像平滑处理.docx

上传人:b****5 文档编号:27747688 上传时间:2023-07-04 格式:DOCX 页数:17 大小:1.48MB
下载 相关 举报
图像平滑处理.docx_第1页
第1页 / 共17页
图像平滑处理.docx_第2页
第2页 / 共17页
图像平滑处理.docx_第3页
第3页 / 共17页
图像平滑处理.docx_第4页
第4页 / 共17页
图像平滑处理.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

图像平滑处理.docx

《图像平滑处理.docx》由会员分享,可在线阅读,更多相关《图像平滑处理.docx(17页珍藏版)》请在冰豆网上搜索。

图像平滑处理.docx

图像平滑处理

1用butterworth和理想低通滤波器对受椒盐噪声和高斯噪声污染的图像进行平滑处理,计算平滑前后的PSNR(峰值信噪比).

解答:

首先利用imnoise函数产生被噪声污染的图像,首先实现理想低通滤波器的平滑处理,对于理想低通的截止频率,下面分别尝试了取0.05,0.1,0.2个宽的长度

以下是理想低通实现对椒盐噪声的平滑处理,程序如下

f=imread(‘face.jpg’);

以下分别获得两个噪声图像

fsalt=imnoise(f,'salt&pepper',0.1);

fgauss=imnoise(f,'gaussian',0,0.02);

首先进行fft变换

f1=fft2(fsalt);

改变中心坐标

>>f2=fftshift(f1);

设定截止频率

>>d0=0.05*495;

开始填充新的幅频图

fori=1:

1:

642

forj=1:

1:

495

if(i-321)*(i-321)+(j-248)*(j-248)

f3(i,j)=f2(i,j);

else

f3(i,j)=0;

end

end

end

>>f4=ifftshift(f3);

反变换以及输出

>>ff=abs(ifft2(f4));

>>subplot(2,2,1);

>>imshow(f);

>>subplot(2,2,2);

>>imshow(fsalt);

>>subplot(2,2,3);

>>imshow(abs(log(1+f3)),[]);

>>subplot(2,2,4);

>>imshow(mat2gray(ff))

下面分别是原图,噪声图像,以及分别取0.05,0.1,0.2个直径作为截止频率得到的新的幅频图像和最后反变换得到的平滑图像

可见当截止频率比较低时候平滑效果是比较好的,噪声得到较好地抑制,但是代价是原图的细节也被磨掉了,所以后面增大截止频率后虽然噪声有所增加,但是图像原来的细节也越来越明显,图像变得细腻了

 

原图及椒盐噪声图像

0.05

0.1

0.2

峰值信噪比定义为:

其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用8位表示,那么为255

下面首先计算原图与椒盐噪声图像的峰值信噪比,程序和结果如下

f=double(f);

fsalt=double(fsalt);

s=0;

fori=1:

1:

642

forj=1:

1:

495

m=(f(i,j)-fsalt(i,j))^2;

s=s+m;

end

end

>>mse=s/(642*495);

>>PSNR=10*log10(255^2/mse)

PSNR=14.1058

下面计算处理过的图像,取0.2的那一幅平滑图像

f=double(f);

ff=double(ff);

s=0;

fori=1:

1:

642

forj=1:

1:

495

m=(f(i,j)-ff(i,j))^2;

s=s+m;

end

end

mse=s/(642*495);

>>PSNR=10*log10(255^2/mse)

PSNR=

22.9686

比较可得峰值信噪比提高了,不过好像还不是很大

下面用二阶巴特沃斯滤波器处理高斯噪声污染的图像,过程跟上面差不多,只不过是滤波器换了

下面是程序和结果,这里也就不多写了

f1=fft2(fgauss);

f2=fftshift(f1);

d0=(0.05*495)^2;

fori=1:

1:

642

forj=1:

1:

495

d=(i-321)^2+(j-248)^2;

主要就是二阶滤波器这里应该这样子写,当然阶数越多就越接近理想低通

f3(i,j)=f2(i,j)/(1+(d/d0)^2);

end

end

f4=ifftshift(f3);

ff=abs(ifft2(f4));

subplot(2,2,1);

imshow(f);

subplot(2,2,2);

>>imshow(fgauss);

>>subplot(2,2,3);

imshow(abs(log(1+f3)),[]);

subplot(2,2,4);

imshow(mat2gray(ff))

下面分别是截止频率为0.050.10.2时候复原的图像,可见振铃现象有所减少

好吧还得计算其峰值信噪比啊,首先计算原图与高斯噪声污染的图的信噪比,程序和结果如下,也就不多说了,直接上

f=double(f);

fgauss=double(fgauss);

s=0;

fori=1:

1:

642

forj=1:

1:

495

m=(f(i,j)-fgauss(i,j))^2;

s=s+m;

end

end

>>mse=s/(642*495);

>>PSNR=10*log10(255^2/mse)

PSNR=

18.5093

下面计算平滑后的信噪比

f=double(f);

ff=double(ff);

s=0;

fori=1:

1:

642

forj=1:

1:

495

m=(f(i,j)-ff(i,j))^2;

s=s+m;

end

end

mse=s/(642*495);

PSNR=10*log10(255^2/mse)

PSNR=

28.9013

简单比较就是信噪比的确提高了很多

2.用3x3邻域平均平滑和3x3中值滤波对受椒盐噪声和高斯噪声污染的图像进行平滑处理,计算平滑前后的PSNR(峰值信噪比).

解答:

怎么还是这样的题目,好吧

领域平均平滑就很简单了,就是求平均了,以这个均值作为自己的灰度值

程序如下

fori=2:

1:

641

forj=2:

1:

494

f1(i,j)=(1/9)*(fsalt(i-1,j-1)+fsalt(i-1,j)+fsalt(i-1,j+1)+fsalt(i,j-1)+fsalt(i,j)+fsalt(i,j+1)+fsalt(i+1,j-1)+fsalt(i+1,j)+fsalt(i+1,j+1));

end

end

>>imshow(f1)

Warning:

Imageistoobigtofitonscreen;displayingat67%

>Inimuitools\private\initSizeat73

Inimshowat262

>>subplot(1,2,1);

>>imshow(fsalt);

>>subplot(1,2,2);

>>imshow(f1);

首先这里偷懒了,边缘没有补充,可以取临近值近似啥的,不过影响不大,这里就忽略了

得到的原图和输出的平滑图像,可见是真很大啊,只有个大概的轮廓了,黑白都融合了

均值滤波效果图椒盐噪声

求其信噪比,由于加噪后的前面已经做过了,这里只做平滑后的

上程序,跟之前差不多

f=double(f);

f1=double(f1);

s=0;

fori=2:

1:

641

forj=2:

1:

494

m=(f(i,j)-f1(i,j))^2;

s=s+m;

end

end

mse=s/(641*494);

PSNR=10*log10(255^2/mse)

PSNR=12.3306

前面噪声的是PSNR=14.1058

信噪比竟然减小了,所以这样子不妥啊,我决定给加个阈值,再来做一次平均值降噪

程序如下

f=imread('face.jpg');

fsalt=imnoise(f,'salt&pepper',0.1);

fori=2:

1:

641

forj=2:

1:

494

f1(i,j)=(1/9)*(fsalt(i-1,j-1)+fsalt(i-1,j)+fsalt(i-1,j+1)+fsalt(i,j-1)+fsalt(i,j)+fsalt(i,j+1)+fsalt(i+1,j-1)+fsalt(i+1,j)+fsalt(i+1,j+1));

ifabs(fsalt(i,j)-f1(i,j))>150

f2(i,j)=f1(i,j);

else

f2(i,j)=fsalt(i,j);

end

end

end

subplot(1,2,1);

imshow(fsalt);

subplot(1,2,2);

imshow(f2);

对于这幅图尝试了几次,最后阈值顶到这么大,左边脸还是有块疤啊

有阈值的均值滤波效果图椒盐噪声

可见均值对椒盐噪声没啥办法,下面来试试高斯噪声

f=imread(‘face.jpg’);

fsalt=imnoise(f,’gaussian’,0,0.02);

fori=2:

1:

641

forj=2:

1:

494

f1(i,j)=(1/9)*(fsalt(i-1,j-1)+fsalt(i-1,j)+fsalt(i-1,j+1)+fsalt(i,j-1)+fsalt(i,j)+fsalt(i,j+1)+fsalt(i+1,j-1)+fsalt(i+1,j)+fsalt(i+1,j+1));

end

end

>>imshow(f1)

Warning:

Imageistoobigtofitonscreen;displayingat67%

>Inimuitools\private\initSizeat73

Inimshowat262

>>subplot(1,2,1);

>>imshow(fsalt);

>>subplot(1,2,2);

>>imshow(f1);

我偷了个懒,这次虽然写的是fsalt,其实是gaussian噪声,不过效果也不明显啊,都做烦了,这个的信噪比就不求了,看样子也不高

均值滤波效果图高斯噪声

下面来做中值滤波,我估计对于高斯噪声这种图像中值滤波会很好用的,滤波原理就是求出中间值了,把这个中间值作为新的填充灰度,上程序

f=imread('face.jpg');

fsalt=imnoise(f,'salt&pepper',0.1);

>>fori=2:

1:

641

forj=2:

1:

494

a=[fsalt(i-1,j-1)fsalt(i-1,j)fsalt(i-1,j+1)fsalt(i,j-1)fsalt(i,j)fsalt(i,j+1)fsalt(i+1,j-1)fsalt(i+1,j)fsalt(i+1,j+1)];

fork=8:

-1:

1;

forl=1:

1:

k;

冒泡排序法

ifa(l)>a(l+1)

temp=0;

temp=a(l);

a(l)=a(l+1);

a(l+1)=temp;

end

end

end

f1(i,j)=a(5);

end

end

>>subplot(1,2,1);

imshow(fsalt);

subplot(1,2,2);

imshow(f1)

得到如下输出,效果真的是很好啊

中值滤波效果图椒盐噪声

计算一下此时的信噪比

f=double(f);

f1=double(f1);

s=0;

fori=1:

1:

641

forj=1:

1:

494

m=(f(i,j)-f1(i,j))^2;

s=s+m;

end

end

mse=s/(641*494);

PSNR=10*log10(255^2/mse)

PSNR=

39.6073

这是原图与滤波后图像的信噪比,真的比之前加噪声的图像PSNR=14.1058db要好很多很多,比之前的平均值滤波效果要好很多很多,几乎和原图近似了,可见中值滤波对付椒盐噪声是很有效的

下面来看均值滤波对付高斯噪声是啥效果

程序就不贴了,跟前面一样,只是把椒盐噪声图像换成高斯噪声图像,直接贴结果

中值滤波高斯噪声

失真很大啊,大概只能看个轮廓,下面试验一下加个阈值再来一次中值滤波看看效果

阈值为100时的效果图

把代码也附上吧

f=imread('face.jpg');

fsalt=imnoise(f,'gaussian',0,0.02);

fori=2:

1:

641

forj=2:

1:

494

a=[fsalt(i-1,j-1)fsalt(i-1,j)fsalt(i-1,j+1)fsalt(i,j-1)fsalt(i,j)fsalt(i,j+1)fsalt(i+1,j-1)fsalt(i+1,j)fsalt(i+1,j+1)];

fork=8:

-1:

1;

forl=1:

1:

k;

ifa(l)>a(l+1)

temp=0;

temp=a(l);

a(l)=a(l+1);

a(l+1)=temp;

end

end

end

ifabs(a(5)-fsalt(i,j))<100

f1(i,j)=a(5);

else

f1(i,j)=fsalt(i,j);

end

end

end

subplot(1,2,1);

imshow(fsalt);

subplot(1,2,2);

imshow(f1)

1.用roberts算子和Laplace算子对一图像进行锐化处理,得到其边缘二值图像.

首先使用罗伯茨算子,程序和结果如下

f=imread('face.jpg');

fori=2:

1:

641

forj=2:

1:

494

g1(i,j)=1*max(abs(f(i+1,j+1)-f(i,j)),abs(f(i+1,j)-f(i,j+1)));

g2(i,j)=2*max(abs(f(i+1,j+1)-f(i,j)),abs(f(i+1,j)-f(i,j+1)));

g3(i,j)=5*max(abs(f(i+1,j+1)-f(i,j)),abs(f(i+1,j)-f(i,j+1)));

end

end

subplot(1,4,2);

imshow(g1);

subplot(1,4,3);

imshow(g2);

subplot(1,4,4);

imshow(g3);

>>subplot(1,4,1);

>>imshow(f);

罗伯茨算子得到的边缘锐化图像三个不同比例下的效果图

下面使用拉普拉斯算子

程序跟上面差不多,也是用不同强度的锐化得到几个以作比较

f=imread('face.jpg');

fori=2:

1:

641

forj=2:

1:

494

g1(i,j)=1*(f(i+1,j)+f(i-1,j)+f(i,j+1)+f(i,j-1)-4*f(i,j));

g2(i,j)=2*(f(i+1,j)+f(i-1,j)+f(i,j+1)+f(i,j-1)-4*f(i,j));

g3(i,j)=5*(f(i+1,j)+f(i-1,j)+f(i,j+1)+f(i,j-1)-4*f(i,j));

end

end

subplot(1,4,2);

imshow(g1);

subplot(1,4,3);

imshow(g2);

subplot(1,4,4);

imshow(g3);

subplot(1,4,1);

imshow(f);

最后的输出效果如下图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1