最适合多条线的交点

| 我正在尝试解决以下问题: 我正在分析图像,并从该分析中获得了一组细分 我想知道这些线的交点(最适合) 我正在为此opencv的函数cvSolve使用。对于合理的输入,一切正常。 我遇到的问题来自以下事实:当我只有一个不良段作为输入时,结果与预期的结果不同。 细节: 左上方的图像显示影响结果的“孤独”紫色线(所有线均用作输入)。 右上方的图像显示了一条紫色线(已去除一条紫色线)如何影响结果。 左下方的图像显示了我们想要的-线的交点符合预期(消除了两条紫色线)。 右下方的图像显示了另一条紫色线(另一条紫色线已删除)如何影响结果。 如您所见,只有两行,结果与预期的完全不同。任何有关如何避免这种情况的想法都值得赞赏。 谢谢, 尤利安     
已邀请:
        如链接中所述,您正在使用的算法可以找到问题的最小平方误差解决方案。这意味着,如果有更多的交点,则结果将是实际解的平均值(对于平均值的合理定义)。 我将尝试一个迭代解决方案:如果第一个解决方案的误差太大,则从分段集中删除距离解决方案最远的那一部分,然后迭代直到误差小到可以接受的程度。这应删除多个交点之一,并收敛于附近的大多数线。     
        对此类问题的一般答案是RANSAC算法(处理该问题的方法),但是它有一些缺点,例如,您需要事先估算“预期的异常值”之类的东西。我在您的样本中看到的另一个问题是,删除两条绿线也会产生很好的匹配度,因此这可能是更普遍的问题。     
        您可以在行1 =(x1,y1)-(x2,y2)的情况下使用SVD进行求解;第2行=(x2,y2)-(x3,y3) 令Ax = b其中;
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
    

要回复问题请先登录注册