3

簡介:我正在進行一項圖像處理任務,試圖找出一個對象的兩個邊界,可以用兩條直線段來描述。我正在使用hough line變換的一些變體來查找目標圖像中的線段。在對象的每個邊界有hough變換髮現多條線(共享一個非常小的角度),並且可能會找到一些與圖像某處的對象邊界不相對應的線(誤報)。 由於對象的兩個邊界之間的空間關係(角度)是近似已知的,我想我會採用某種聚類方法來避免誤報,並計算找到的多個線段中的平均線段每邊界。2d/3d中兩條線段的平均距離

方法:爲了聚集線段,需要定義每個段的位置的相似性度量。我想我會用兩個線段之間的角度元組和兩個線段之間的某種平均距離去做。這也是我想知道什麼是最好的方法來計算這種平均距離測量。 一個比較簡單的方法是在離散位置對每個分段進行採樣,並測量每個採樣點到另一個線段的最近距離(L2),將距離加起來並將總和除以採樣數量。我確定有一個更聰明的方法來做到這一點,有什麼建議嗎?提示:我正在使用一些LGPL/BSD許可工具包(OpenCV,Boost)在C++中工作,因此像mathematica中的集成等有些特殊的數學操作可能很難實現。

回答

1

假設我正確地理解了這個問題,那麼下面的解決方案如何: 當你有線時,也許你可以嘗試確定這些線的起點和終點。當您計算這些值時,您只需測量兩個起點和兩個端點的距離,然後只計算距離的平均值。

我假設你有行作爲像素值。起點和終點可以通過找出線的像素的x和y的最大值和最小值來計算。

1

取代平均距離,最小距離如何?有關如何計算here的擴展討論。

+0

好點。但在我的特殊情況下,邊界構成了一個角落。所以兩邊的線段可能會在角落相交。另外,誤報可能會跨越邊界處發現的線路。在這種情況下,線段的距離可能不是聚類的好指標。 – 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軸到平均線的距離。我猜如果這個數值比某個數值還要大,你可以拒絕那條線段並在沒有它的情況下重複這個線段。如果它小於幾個像素,則可以用適合的座標替換y座標,以將線段的該末端移動到擬合線。

如果設置了交換標誌,則將x和y交換回來。