首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最适合多条线的交点

最适合多条线的交点
EN

Stack Overflow用户
提问于 2011-06-15 12:23:00
回答 3查看 5.8K关注 0票数 7

我试图解决以下问题:

  • 我正在分析一个图像,从这个分析中我得到了一组片段
  • 我想知道这些线的交点(最合适)。

我正在使用这个opencv的函数cvSolve。对于相当好的输入,一切都很好。

我所遇到的问题来自这样一个事实:当我只有一个糟糕的部分作为输入时,结果与预期的结果不同。

详细信息:

  • 左上角图像显示影响结果的“孤独”紫色线(所有行都用作输入)。
  • 右上角的图像显示了一条紫色的线条(除去一条)如何影响结果。
  • 左下角的图像显示了我们想要的-与预期的线的交集(这两条紫色线都消除了)。
  • 右下角的图像显示另一条紫色线(另一条被移除)如何影响结果。

如您所见,只有两行,结果与预期的完全不同。任何关于如何避免这种情况的想法都是值得赞赏的。

谢谢,

尤莲

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 12:29:16

正如链接中所描述的,您使用的算法找到了该问题的最小二乘错误解决方案。这意味着,如果有更多的交点,结果将是一个平均值(对平均值的合理定义)的实际解。

我会尝试一个迭代解决方案:如果第一个解的错误太大,从段的集合中移除最远到解的一个,然后迭代,直到错误可接受地小。这将移除多个交点中的一个,并将其收敛到附近大多数直线的交点上。

票数 8
EN

Stack Overflow用户

发布于 2011-06-15 14:35:12

对这类问题的一个一般答案是RANSAC算法 (处理这个问题),但是它有一些缺点,例如,您需要预先估计诸如“预期异常值的数量”之类的东西。我在你的例子中看到的另一个问题是,去掉这两条绿线也会产生一个非常合适的结果,所以这可能是一个更普遍的问题。

票数 3
EN

Stack Overflow用户

发布于 2016-04-06 08:57:36

可以在line1 =(x1,y1)-(x2,y2);line2 =(x2,y2)-(x3,y3)的情况下使用SVD求解。

设Ax =b;

代码语言:javascript
复制
A = [-(y2-y1) (x2-x1);
     -(y3-y2) (x3-x2);
    .................
    .................] -->(nx2)
x = transpose[s t]     -->(2x1)
b = [-(y2-y1)x1 + (x2-x1)y1 ;
     -(y3-y2)x2 + (x3-x2)y2 ;
    ........................
    ........................] --> (nx1)

Example; Matlab Code

line1=[0,10;5,10]
line2=[10,0;10,5]
line3=[0,0;5,5]

A=[-(line1(2,2)-line1(1,2)),(line1(2,1)-line1(1,1));
-(line2(2,2)-line2(1,2)),(line2(2,1)-line2(1,1));
-(line3(2,2)-line3(1,2)),(line3(2,1)-line3(1,1))];


b=[(line1(1,1)*A(1,1))+ (line1(1,2)*A(1,2));
   (line2(1,1)*A(2,1))+ (line2(1,2)*A(2,2));
   (line3(1,1)*A(3,1))+ (line3(1,2)*A(3,2))];

[U D V] = svd(A)
bprime = U'*b

y=[bprime(1)/D(1,1);bprime(2)/D(2,2)]

x=V*y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6357625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档