MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

膨胀算法——分解更多形状

在我的之前关于膨胀算法的帖子我讨论了构造元素分解。我们研究了矩形域结构元素的分解。今天我想继续这个想法,看看其他结构元素形状的分解。

这个斯特雷function提供多种平面结构元素形状:

  • 钻石
  • 磁盘
  • 八边形
  • 一对
  • 周期线
  • 矩形
  • 广场

(斯特雷函数还提供非平面形状和具有任意域的形状。)

让我们看看“钻石”形状。医生说SE=strel('菱形',R)创建一个扁平的菱形结构元素,其中R指定从结构元素原点到菱形顶点的距离。”例如:

se1 = strel (“钻石”, 5)
se1 =包含61个邻居的平面STREL对象。分解:4 STREL对象包含一共有17个邻居邻居:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

显示显示结构元素在其域内有61个邻居,但4个分解的结构元素总共只有17个邻居。

什么形状构成分解?我们可以使用getsequence格特伍德找出答案。

se1_seq=getsequence(se1);对于k = 1:元素个数(se1_seq)
getnhood(se1_seq(k))
Ans = 0 1 0 1 1 1 0 1 0
Ans = 0 1 0 1 0 1 0 1 0
ans=0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
Ans = 0 1 0 1 0 1 0 1 0
终止

这个分解来自Rein van den Boomgard和Richard van Balen,“使用位图二值图像的快速形态图像变换方法”,计算机视觉、图形和图像处理:模型和图像处理,第54卷,第3期,1992年5月,第252-254页。(那本杂志的名字真是太好了!)

现在我们来看看“磁盘”结构元素。默认情况下,strel('磁盘',R)实际上给了你一个近似对于圆盘形状,其中近似值基于一种称为使用周期线的径向分解。参考资料来源如下:

  • 罗尔夫·亚当斯,《圆盘和球体的径向分解》计算机视觉,图形和图像处理:图形模型和图像处理,第55卷,第5期,1993年9月,第325-332页。
  • 罗纳德·琼斯和皮埃尔·索伊,《周期线:定义、级联和在粒度测定中的应用》模式识别字母,第17卷,1996年,1057-1063年。
se2 = strel (“磁盘”, 5)
se2=包含69个邻居的平面STREL对象。分解:6个STREL对象,共包含18个邻居邻居邻居:0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

类似于“钻石”形状,“磁盘”Shape被分解成一系列较小的结构元素:

se2_seq=getsequence(se2);对于k=1:numel(se2)
getnhood (se2_seq (k))
ans=1
ans=1 0 0 1 0 0 1
ans=1
ans=0 0 1 0 1 0 0
ans=1
ans=1
终止

我上面提到过strel('磁盘',R)提供磁盘的近似值。让我们看看半径较大时近似值是什么样子:

se3=strel(“磁盘”,21岁);imshow(getnhood(se3),“初始放大”,“适合”)

这绝对是一个近似值。它看起来更像八边形而不是圆形。的语法strel('圆盘',R,N)让你对近似有更多的控制。N可以是0、4、6或8。值4、6和8表示不同的近似级别。默认值为4。带N等于8时,结果看起来更接近一个圆,但由于分解效率较低,因此膨胀速度稍慢。

se4=strel(“磁盘”21岁,8);imshow (getnhood (se4),“初始放大”,“适合”)

设置N=0斯特雷构造无分解近似的圆盘形状。

se5=strel(“磁盘”, 21, 0); imshow(格特伍德(se5),“初始放大”,“适合”)

使用getsequence我们可以看到,没有分解se5:

numel(getsequence(se5))
ans=1

下一次我们将用分解的结构元素做一些计时实验。




与MATLAB®7.6一起发布

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。