为什么OpenCV中的结构元素不对称?

时间:2017-12-04 14:31:58

标签: opencv image-processing mathematical-morphology image-morphology

为什么OpenCV中的结构元素不对称?

cv2.getStructuringElement(cv2.MORPH_ELLIPSE, ksize=(4,4))

返回

array([[0, 0, 1, 0],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]], dtype=uint8)

为什么不是

array([[0, 1, 1, 0],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [0, 1, 1, 0]], dtype=uint8)

代替?

奇数大小的结构元素在90度旋转方面也是不对称的:

array([[0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 1, 0, 0]], dtype=uint8)

这是为了什么目的?

1 个答案:

答案 0 :(得分:2)

除了它是这种形状的许多可能插值之一之外,它没有目的。在尺寸为5的椭圆的情况下,如果它是满的,它将与MORPH_RECT相同,如果从顶部移除相同的两个,则它将是钻石。无论哪种方式,它实际实现的方式in the source code都是您所期望的 - 它通过距离函数创建一个圆,并采用接近整数来获取二进制像素。搜索cv::getStructuringElement的文件,你会发现它的实现,它没什么特别的。

如果您认为应该对此功能进行更新,请在GitHub上使用已实现的版本打开PR,或首先讨论它的问题。我认为一个成功的贡献在这里很容易,我敢说,对称的情况很强。可以预期,使用椭圆内核处理对称图像的结果不会取决于图像的方向。