2011-04-09 55 views
2

enter image description here 你好朋友...。通過給定點的線

我試圖發現在圖像的綠色區域內的物體的外輪廓線的角度,如上面的圖片...

對於我已經掃描的綠色區域,並獲得積分(深藍色點如圖所示)...

正如你可以看到點不直線,所以我無法輕鬆找到角度...。

所以我覺得我必須找到是找到行,使每個點與線之間的距離保持儘可能最小的中間道路和 ...

那麼,如何可以找到行,以便每個點暴露最小距離 ......?

是否有任何這樣的算法,或者有沒有什麼比這更好的方法?

回答

5

明顯的路線是通過點做least-squares linear regression

+1

不會爲垂直線工作,並會產生用於Y(x)和X(Y) – maxim1000 2011-04-09 08:40:22

+0

由於不同的結果....這也與數值例子...... HTTP良好鏈路:// easycalculation .COM /統計/學習-regression.php – Pritesh 2011-04-09 08:44:01

+0

這也是一個很好的.......... HTTP://www.xycoon.com/simple_linear_regression.htm和一個多個HTTP://en.wikipedia .ORG /維基/ Linear_regression – Pritesh 2011-04-09 11:02:02

1

顯然這條線會穿過平均點(x_average,y_average)。

對於方向則可以使用下面的算法(直接衍生自最小化線和點之間的平均平方距離):

dx[i]=x[i]-x_average; 
dy[i]=y[i]-y_average; 

a=sum(dx[i]^2-dy[i]^2); 
b=sum(2*dx[i]*dy[i]); 

direction=atan2(b,a); 

通常的線性迴歸這裏不能工作,因爲它假設變量不是對稱 - 一個取決於其他,所以如果你將交換x和y,你將有另一個解決方案。

0

您可能會嘗試搜索「總最小二乘」或「最小正交距離」,但是當我嘗試過時,我沒有看到任何立即適用的東西。不管怎樣,假設你有點x [],y [],並且線由a * x + b * y + c = 0表示,其中hypot(a,b)= 1。最小正交距離線是使Sum {(a * x [i] + b * y [i] + c)^ 2}最小的那個。一些代數表明:

c是 - (a * X + b * Y)其中X是x的均值,Y是y的均值。

(A,B)是C對應於它的較小的本徵值,其中C是x的協方差矩陣和y的

1

x上的y或y上的x的標準最小二乘迴歸公式假定一個座標中沒有誤差並且最小化座標與線的偏差。

然而,設置最小二乘法計算是完全可能的,使得最小化的值是點與線的垂直距離的平方和。我不確定是否可以找到我做數學的筆記本電腦 - 這是二十多年前的 - 但我確實找到了我當時編寫的代碼來實現該算法。

隨着:

  • N =Σ1
  • SX =ΣX
  • SX2 =ΣX
  • SY =Σý
  • SY2 =Σý
  • SXY =ΣX·Y

可以計算x和y和協方差的方差:

  • v X = SX2 - ((SX * SX)/ N)
  • v Ŷ = SY2 - ( (SY * SY)/ N)
  • v XY = SXY - ((SX * SY)/ N)現在

,如果協方差爲0,則沒有本質一行的平等。否則,斜率和截距可從找到:

  • 斜率 = ((VX - VY)/ vxy,vxy)
  • intcpt =(SY - 斜率 * SX )/ N

凡四()是計算二次方程X 2 + b·x的根的函數 - 1與c相同的符號。在C語言中,這將是:

double quad(double b, double c) 
{ 
    double b1; 
    double q; 

    b1 = sqrt(b * b + 4.0); 
    if (c < 0.0) 
     q = -(b1 + b)/2; 
    else 
     q = (b1 - b)/2; 
    return (q); 
} 

從那裏,你可以找到你的線的角度很輕鬆了。