3

我在 Canny 边缘检测后获得了以下图像: Canny 边缘检测结果

应用霍夫变换后,我得到了这个结果:

在此处输入图像描述

这是一个非常好的结果,但我只需要每个捆绑包中的一条线,这样我就可以显示第一张图片中的对象类似于三角形。我的第一个决定是为每个捆绑包计算某种“平均”线。每条线由一个角度和一个半径定义。我为每个捆绑找到“平均”线的方法是使用以下公式计算角度的平均值:

avgTheta = arctan(sum of sines of all thetas/sum of cosines of all theta)

我以最简单的方式计算平均半径:

avgRadius = sum of all raduises / number of raduises

但是,我得到的线条不在它们的包的中心。

有人可以建议更好的解决方案吗?

我正在使用霍夫变换的这个实现:霍夫变换

总是可以选择随机抽取每个捆绑包中的一行,但我不喜欢它。

如果我的问题不清楚,请告诉我,以便更好地解释问题。

提前致谢。

4

1 回答 1

1

你可以试试这个:

在没有任何余弦、正弦或反正切函数的情况下取平均角度。只要确保你处理包装。根据您链接到的实现,在我看来您包裹在 pi(180 度)。在您的图像中,“岛(?)”右侧的几乎垂直的线束将是环绕两侧的线的一个很好的例子。

此外,如果您根据 Canny 边缘检测图片中包含的点数对线进行加权,然后在平均计算中使用此权重,您可能会获得最佳结果。也许这已经通过具有相同属性的多行来完成,我无法从您的图像或链接代码中分辨出来。

于 2012-02-01T08:00:25.427 回答