gpt4 book ai didi

python - OpenCV canny 边缘检测在理想正方形上无法正常工作

转载 作者:太空狗 更新时间:2023-10-30 01:05:41 25 4
gpt4 key购买 nike

我正在使用这个 15*15 像素的二进制方形图像。

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
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 1 1 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 0 0

我正在应用openCV(版本2.7)提供的canny边缘检测
用于物体尺寸测量。我的预期输出应该是这样的,

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
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 1 1 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 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 0 0
0 0 0 0 1 1 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 1 1 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 0 0

为什么会发生这种像素偏移?
有什么办法可以避免这种情况。 (我无法在输出后手动调整像素偏移,因为我必须对不规则形状使用边缘检测)无论奇数/偶数像素如何,都会发生相同的偏移。

最佳答案

乍一看,当我遇到这个问题时,我感到很惊讶。此外,我不相信 Canny 边缘检测会如此具有欺骗性。所以我拍了一张类似的图像,并对其应用了 Canny 边缘。令我惊讶的是,我遇到了您面临的同样问题。为什么会这样?

挖后到the documentation我遇到了许多在幕后发生的操作。

该文档声称进行了高斯滤波以减少噪声。嗯,这是真的。但这也会模糊图像中存在的现有边缘。所以当你模糊一个完美的正方形/矩形时,它往往有弯曲的角落。

高斯滤波之后,下一步就是寻找边缘梯度。如前所述,由于模糊(高斯滤波),现在正方形/矩形的完美边缘消失了。剩下的是圆形/弯曲的边缘。找到圆形/弯曲边缘上的渐变强度永远不会产生完美的方形/矩形状边缘。我可能是错的,但我想这是为什么我们在执行 Canny 边缘检测时无法获得完美边缘的主要原因。

如果你想要一个完美的边缘,我的建议是尝试找到轮廓(如 Micka 所建议的)并绘制一个边界矩形。

关于python - OpenCV canny 边缘检测在理想正方形上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com