如果我们使用cv2.findContours()
查找图像的等值线,则每个等值线中存在的坐标的数据类型为int32。例如:打印contours[0]
得到,
array([[[0,1]],
[[1,1]],
.
.
.
[[400,232]]])
是否有任何方法可以找到具有更高精度(亚像素)的轮廓中的坐标?
array([[[0.11,1.78]],
[[1.56,1.92]],
.
.
.
[[400.79,232.35]]])
1条答案
按热度按时间vnjpjtjt1#
原则上,在一幅采样正确的灰度图像中,你确实有信息可以用亚像素精度来猜测位置,但这仍然是一种猜测,我不知道有任何现有的算法试图做到这一点,我只知道在二进制图像中跟踪轮廓的算法。
已经发表了一些论文(我知道),试图简化轮廓多边形的方式,你得到一个更好的表示基本轮廓。这些论文都作出了光滑的假设,使他们能够完成他们的任务,在没有这种假设的情况下,除了通过简单像素轮廓算法提取的信息之外,在二进制图像中没有其它信息。此类别中最简单的方法是平滑多边形:将每个顶点移动到更靠近由其两个相邻顶点形成的线的位置。
然而,如果目标是获得更精确的物体测量,那么有几种不同的方法可以使用灰度值数据来显著提高这些测量的精度。
第一种是基于适当采样的带限图像的假设,在2D中测量面积、周长和局部曲率(更高的维度导致额外的测量);第二种是尺子,但它是“像素覆盖”模型的起点:相同的作者也有关于面积和费雷特直径的论文。2这个模型假设一个尖锐边界的面积抽样。