我们该从哪几个方面去衡量图像形态学操作中的结构形状的操作效果

Posted 昊虹图像算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们该从哪几个方面去衡量图像形态学操作中的结构形状的操作效果相关的知识,希望对你有一定的参考价值。

要理解这个问题,建议大家首先了解一定的形态学操作基础知识,详情见博文 https://blog.csdn.net/wenhao_ir/article/details/51888042

那么我们该从哪些方面去衡量图像形态学操作中的结构形状的操作效果呢?

主要是两个方向,一是“操作方向”,二是“操作深度”。

接下来,博主详细说明这两点。

理论上来说,对于一个点,可以沿任意方向引出无数条以它为起点的线段。
但是,因为咱们的结构矩阵都是比较小的,比如3×3、5×5、7×7、9×9,通常一般9×9就比较大了。再加上我们通常都取结构体中心为锚点,尺寸再缩短一半,就更短了。
这么短的距离,点就很少,我们能引出的线段就非常有限。

以3×3的矩阵为例,以它的中心点只能引出以下八个方向的线段,如下图所示:

上图中①~⑧号线段的度数分别为0度(水平正方向)、45度、90度(垂直正方向)、135度、180度(水平负方向)、225度、270度(垂直负方向)、315度。
其中0度(水平正方向)和180度(水平负方向)通常合称为水平方向,90度(垂直正方向)和270度(垂直负方向)通常合称为垂直方向。

我们再来看下面5×5的结构体。

从上面的图来看,在第一象限内,引出了六条线段。
这六条线段中第①条和第②条的方向相同,第④条和第⑤条的方向是相同的,其它的方向都不同。
这些线段不仅存在着方向上的不同,长度上也不一样。这些线段的长度博主称它为形态学操作的深度。比如第①条和第②条的不同就在于操作深度不一样,我们定义第①条的操作深度为1,第②条的操作深度为2。第③条的操作深度为 5 \\sqrt5 5 。第④条的操作深度为 2 \\sqrt2 2 ,第⑤条的操作深度为 2 2 2\\sqrt2 22 。第⑥条的操作深度为 5 \\sqrt5 5

我们看一个结构它有什么样的腐蚀和膨胀效果,就从博主上面提到的两点来看,第一点为操作方向,第二点为操作深度。有类似于矢量的两个属性:模和方向的概念。
操作方向刚才已经说得比较清楚了,操作深度体现出的效果为在某个方向深度越大,在那个方向上考虑的范围越大,相应地,可能包含的像素点个数也越多。注意,不同距离有可能考虑到的像素点个数相同。比如上面5×5的结构体,线段①、③、④、⑥显然操作深度不同,但考虑到的像素点个数都为1。

下面举几个例子说明:
以十字形结转元素来看,它实际上是对我们图像中的每一点作水平和垂直方向的形态学操作。如果结构的大小为3×3,比如下面这个结构:

import cv2 as cv
cross_3x3 = cv.getStructuringElement(cv.MORPH_CROSS, (3, 3))


那么它在水平方向和垂直方向上的操作深度为1。
再看下面这个大小为5×5的十字形结构:

import cv2 as cv
cross_5x5 = cv.getStructuringElement(cv.MORPH_CROSS, (5, 5))


上图中的这个结构水平方向和垂直方向对图像上的每一点进行操作,两个方向的操作深度为2。

再看矩形结构元素。
3×3的矩形结构元素如下:

import cv2 as cv
rect_3x3 = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))


上图中的3x3矩形结构,在八个方向上进行形态学操作,角度分别为0度(水平正方向)、45度、90度(垂直正方向)、135度、180度(水平负方向)、225度、270度(垂直负方向)、315度。操作深度的话在水平方向和垂直方向上为1,在另外的方向操作深度为 2 \\sqrt2 2
再看下面这个菱形结构元素。

import cv2 as cv
rect_5x5 = cv.getStructuringElement(cv.MORPH_CROSS, (5, 5))
diamond_5x5 = rect_5x5
diamond_5x5[1, 1] = 1
diamond_5x5[1, 3] = 1
diamond_5x5[3, 1] = 1
diamond_5x5[3, 3] = 1


上面这个菱形结构元素在水平方向、垂直方向、45度、135度、225度、315度方向上对图像上的每一点进行形态学操作,其中水平方向和垂直方向上的操作深度为2,其它方向上的操作深度为 2 \\sqrt2 2 ,所以我们可以说水平方向和垂直方向上的操作深度比其它方向上的操作深度深。直观来看,除去自身点,在说水平方向和垂直方向上考虑到了两个点,在别的方向上只考虑到了一个点。

以上是关于我们该从哪几个方面去衡量图像形态学操作中的结构形状的操作效果的主要内容,如果未能解决你的问题,请参考以下文章

编写JavaBean时注意哪几个方面

形态学操作

形态学操作实现

图像处理基于matlab GUI图像形态学处理含Matlab源码 1274期

MySql数据库优化可以从哪几个方面进行?

手掌识别基于matlab形态学手掌长宽检测含Matlab源码 1382期