欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab:imclearborder函数原理解释

程序员文章站 2022-07-13 09:09:07
...

如果这篇文章帮到了你,别忘了给个赞!

网上关于imclearborder函数的算法原理实在太少,这篇博客对这个函数做一个大致的解释。

简单说,这个函数的作用就是:把与图像边界相连接的像素全部清除。

这里的图像边界,并不是指图像里面物体和背景的边界,而是指实实在在的图像显示的边界。

举个例子:

假如图像是30 X 40 像素,那么图像边界就是指:[1, :](第一行),[30, :](最后一行),[:, 1](第一列),[:, 40](最后一列)这些像素的位置。

这个算法的操作就是,把与这4条边相连的 像素区域 全部清除。

 

实验如下:

BW = [0     0     0     0     0     0     0     0     0
      0     1     1     1     1     1     1     1     0
      0     1     0     0     0     0     0     1     0
      0     1     0     1     1     1     0     1     0
      1     1     0     1     1     1     0     1     0
      0     1     0     1     1     1     0     1     0
      0     1     0     0     0     0     0     1     0
      0     1     1     1     1     1     1     1     0
      0     0     0     0     0     0     0     0     0];
  

BW1 = imclearborder(BW,8);
  
disp(BW1)
  

结果如下:

>> DRAFT2
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     1     1     1     0     0     0
     0     0     0     1     1     1     0     0     0
     0     0     0     1     1     1     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0

 

可以看到,由于[5, 1]位置的像素值为1,算法认为这个位置存在像素,且与图像的边界相连,所以执行清除操作(将其像素值改为0)。同时,与[5, 1]相连的像素区域均被清除。

 

BW = [0     0     0     0     0     0     0     0     0
      0     1     1     1     1     1     1     1     0
      0     1     0     0     0     0     0     1     0
      0     1     0     1     1     1     0     1     0
      0     1     0     1     1     1     0     1     0
      0     1     0     1     1     1     0     1     0
      0     1     0     0     0     0     0     1     0
      0     1     1     1     1     1     1     1     0
      0     0     0     0     0     0     0     0     0];
  

BW1 = imclearborder(BW,8);
  
disp(BW1)

手动将[5, 1]位置的像素改为0,执行结果如下:

>> DRAFT2
     0     0     0     0     0     0     0     0     0
     0     1     1     1     1     1     1     1     0
     0     1     0     0     0     0     0     1     0
     0     1     0     1     1     1     0     1     0
     0     1     0     1     1     1     0     1     0
     0     1     0     1     1     1     0     1     0
     0     1     0     0     0     0     0     1     0
     0     1     1     1     1     1     1     1     0
     0     0     0     0     0     0     0     0     0

可以看到,由于算法没有找到与图像边界相连的像素,所以没有执行清除操作。

 

函数用法:

BW1 = imclearborder(BW,8);

第一个参数为传入的图像。一般来说,这个参数基本都是二值化后的黑白图像。我没有试过直接用灰度图或者RGB图像作为参数传入。

第二个参数为连接的方向,参数 4 代表按4方向(上下左右)计算连接区域;参数 8 代表按8方向计算连接区域。

相关标签: Matlab 经验分享