2D/3D两条线段的平均距离

3
介绍:我正在处理一项图像处理任务,试图找到一个物体的两个边界,可以用两个直线段来描述。我正在使用一些变种的霍夫线变换来在目标图像中找到线段。每个对象的边界都会被霍夫变换找到多条线(共享非常小的角度),并且可能在图像的某处找到一些与对象边界不对应的线(误报)。 由于两个对象边界之间的空间关系(角度)大致已知,我想采用某种聚类方法来排除误报,并计算出每个边界找到的多条线段的平均线段。

方法:为了对线段进行聚类,需要定义每个线段位置的相似性度量。我想采用两条线段之间的角度元组和两条线段之间某种平均距离。这也是我想知道计算此平均距离度量的最佳方法的地方。 一个比较简单的方法是在离散位置对每个线段进行采样,并测量每个采样点到另一条线段的最近距离(L2),将距离总和相加并将其除以样本数。我相信有更聪明的方法来做到这一点,有什么建议吗?

提示:我使用几个LGPL/BSD许可的工具包(OpenCV,Boost)在C++中工作,因此像Mathematica中的积分这样的特殊数学操作可能难以实现。
3个回答

1

假设我正确理解了问题,以下是一个可能的解决方案: 当您有线条时,可以尝试确定这些线条的起点和终点。计算出这些点后,只需测量两个起始点和两个终点的距离,然后计算距离的平均值。

我假设您拥有线条的像素值。可以通过查找线条像素的x和y的最大值和最小值来计算起始点和终点。


1

不如计算最小距离而非平均距离?这里有一个关于如何计算最小距离的深入讨论这里


好观点。但在我的特殊情况中,边界形成一个角落,因此两侧的线段可能会在角落处相交。此外,错误结果可能会穿过边界上找到的线条。在这种情况下,线段之间的距离可能不是聚类的良好度量标准。 - tisch

0

给定一个由n条线段组成的集合,其中第i条线段从点(x0i,y0i)延伸到(x1i,y1i):

观察第一条线段,看它是更接近垂直还是水平。如果abs(y00-y10)>abs(x00-x10),那么设置标志并交换x和y坐标。这将防止无限斜率问题。(我猜如果两条线段互相垂直仍然可能有问题,但是如果你的线段差异很大,平均线就没有太多意义了。)

使用所有2n个端点,计算到一条直线的最小二乘拟合

y = a*x + b

对于每个端点,计算abs(a*xij+b-yij)。这测量了该端点与平均线平行的距离。我猜如果这比某个数值大,你可以拒绝该线段并重复不包括它的拟合。如果它小于几个像素,你可以用拟合的替代y坐标以将线段的那一端移动到拟合线上。

如果置换标志已设置,则交换回x和y。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接