zoukankan      html  css  js  c++  java
  • MATLAB 图像滤波时的边界处理2

    我真是弱爆了,我原来以为边界处理用我上一篇的方法就能很好的处理了,结果效果并不好。我只是和标准的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))

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

    原图

    自己的方法滤波

    直接调用系统函数滤波

  • 相关阅读:
    C 运算符, 有符号数据运算,
    P1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火
    [POI2011]Garbage 欧拉回路
    # bzoj2215: [Poi2011]Conspiracy 2-sat
    hdu1814 Peaceful Commission 2-sat
    2-sat相关复习
    #2718. 「NOI2018」归程 kruskal重构树
    JXOI2018守卫 区间DP
    [NOI1995]石子合并 四边形不等式优化
    3900: 交换茸角
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13646069.html
Copyright © 2011-2022 走看看