• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MATLAB 图像滤波时的边界处理2

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我真是弱爆了,我原来以为边界处理用我上一篇的方法就能很好的处理了,结果效果并不好。我只是和标准的imfilter函数进行了比较,其实imfilter函数还有一些参数我没用上,比如‘replicate’,\'symmetric\'等,如果加上这些参数,我的效果就比不上matlab的效果了,所以这次不用上一篇的方法了,就用边界扩展好了。

  边界扩展是把原图的四周都加上r个像素,并且把这r个像素的值用原图最外围的r个像素来替代,然后再对新图像滤波,取原图的大小就行了。这种方法虽然在时间与空间复杂度上比我上一篇方法稍高,不过效果的确很好,代码也很简洁。

 1 clear all;
 2 close all;
 3 clc;
 4 r=20;
 5 w=fspecial(\'average\',[2*r+1 2*r+1]);
 6 
 7 img=imread(\'lena.jpg\');
 8 img=mat2gray(img);
 9 [m n]=size(img);
10 imshow(img);
11 
12 imgn=zeros(m+2*r+1,n+2*r+1);
13 imgn(r+1:m+r,r+1:n+r)=img;
14 
15 imgn(1:r,r+1:n+r)=img(1:r,1:n);                 %扩展上边界
16 imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);    %扩展右边界
17 imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);    %扩展下边界
18 imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);       %扩展左边界
19 
20 
21 for i=r+1:m+r
22     for j=r+1:n+r        
23         s=imgn(i-r:i+r,j-r:j+r).*w;
24         imgn(i,j)=sum(sum(s))/sum(sum(w));
25     
26     end
27 end
28 figure;
29 imshow(mat2gray(imgn(r+1:m+r,r+1:n+r)));
30 
31 figure;
32 img=imfilter(img,w,\'replicate\');
33 imshow(mat2gray(img))

下面是处理后的效果,可以看出相比上一篇中图像这里四周的黑色已经没有了。虽然后面两幅有些不同,不过那只是边界扩展时用的方法不同而已,用不同的方法扩展边界肯定会有不同的效果哦。

原图

自己的方法滤波

直接调用系统函数滤波


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
VisualRust+VisualGDB编辑调试Rust发布时间:2022-07-18
下一篇:
如何从Rust发出HTTP请求发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap