【问题标题】:Average distance of two line segments in 2d/3d2d/3d中两条线段的平均距离
【发布时间】:2011-09-13 13:17:36
【问题描述】:

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

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

提示:我正在使用 C++ 和几个 LGPL/BSD 许可的工具包(OpenCV、Boost),所以一些特殊的数学运算,比如在数学中的集成可能很难实现。

【问题讨论】:

    标签: algorithm opencv cluster-analysis linear-algebra object-detection


    【解决方案1】:

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

    我假设您将线条作为像素值。起点和终点可以通过寻找直线像素的x和y的最大值和最小值来计算。

    【讨论】:

      【解决方案2】:

      不是平均距离,而是最小距离?有一个关于如何计算这个here的扩展讨论。

      【讨论】:

      • 好点。但在我的特殊情况下,边界形成一个角落。所以两边的线段可能在拐角处相交。误报也可能越过边界处发现的线。在这种情况下,线段的距离可能不是一个好的聚类指标。
      【解决方案3】:

      给定一组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 轴到平均线的距离。我猜如果这大于某个数量,您可以拒绝该线段并在没有它的情况下重复拟合。如果它小于几个像素,您可以将 y 坐标替换为拟合的,以将线段的末端移动到拟合线。

      如果设置了交换标志,则将 x 和 y 交换回来。

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2011-02-18
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        相关资源
        最近更新 更多