Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么OpenCV中的结构元素是不对称的?_Opencv_Image Processing_Mathematical Morphology_Image Morphology - Fatal编程技术网

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

为什么OpenCV中的结构元素是不对称的?,opencv,image-processing,mathematical-morphology,image-morphology,Opencv,Image Processing,Mathematical Morphology,Image Morphology,为什么OpenCV中的结构元素是不对称的 cv2.getStructuringElement(cv2.MORPH_ELLIPSE,ksize=(4,4)) 返回 数组([[0,0,1,0], [1, 1, 1, 1], [1, 1, 1, 1], [1,1,1,1]],dtype=uint8) 为什么不是呢 数组([[0,1,1,0], [1, 1, 1, 1], [1, 1, 1, 1], [0,1,1,0]],dtype=uint8) 相反 奇数尺寸的结构元素在90度旋转时也是不对称的

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

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

数组([[0,0,1,0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1,1,1,1]],dtype=uint8)
为什么不是呢

数组([[0,1,1,0],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0,1,1,0]],dtype=uint8)
相反

奇数尺寸的结构元素在90度旋转时也是不对称的:

数组([[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)
它的目的是什么?

除了它是这种形状的许多可能插值之一之外,它没有任何用途。在大小为5的椭圆的情况下,如果它是满的,那么它将与变形相同,如果从侧面和顶部移除相同的两个,那么它将是一个菱形。无论哪种方式,它的实际实现方式都是您所期望的——它通过距离函数创建一个圆,并采用近似整数来获得二进制像素。在该文件中搜索
cv::getStructuringElement
,您将找到实现,它没有什么特别之处


如果您认为应该对此函数进行更新,那么请在GitHub上打开一个包含已实现版本的PR,或者先讨论一个问题。我认为一个成功的贡献在这里是很容易的,我敢说对称性的理由很充分。有人会认为,使用椭圆核处理对称图像的结果不取决于图像的方向。

如果您希望它围绕其中心对称,则应使用奇数大小的结构元素:例如:
ksize(5,5)
center@Miki谢谢,汉克斯;目前尚不清楚上述两种情况下的实际不对称性来自何处。PIL假设(0,0)像素的坐标为(0.5,0.5)。也许CV2的作用有所不同,导致了令人惊讶的结果?(AFAICT,这可能解释了第一种不对称,但第二种不对称)OpenCV没有插值亚像素测量AFAIK的标准。我相信亚像素测量是如何量化的取决于每个函数(以及它的作者)。但是一定要看一下源代码,试着运行它,并在运行过程中打印输出。