簡體   English   中英

數學:在極坐標系中平均出線(c++ opencv)

[英]Math: Average out lines in polar coordinate system (c++ opencv)

我正在使用 OpenCV 進行一些帶有HoughLines 的線檢測。 然后我尋找那里的交叉點。

這是最終結果: http : //i.imgur.com/PaGw8RI.png

(綠點是交叉點,紅線是霍夫線操作后的原始線)

正如您所看到的,檢測到很多線並計算交點,每條線都相互編譯,從而極大地增加了處理時間。

我希望通過在初始 HoughLines 操作后平均出相似的行來優化行數。

問題是 HoughLines 在極坐標系中輸出數據,到目前為止我無法找到任何類似的代碼或數學方程來做到這一點。

任何幫助將非常感激。

編輯:添加了 R, Phi 根據它所屬的行排序。

R Phi    -11.000   ,    3.124
R Phi     15.000   ,    0.000
R Phi     13.000   ,    0.000
R Phi     22.000   ,    0.000
R Phi    -18.000   ,    3.124
R Phi     -9.000   ,    3.107
R Phi    -10.000   ,    3.089
R Phi     -7.000   ,    3.089
R Phi     19.000   ,    0.017
R Phi     -6.000   ,    3.107
R Phi     -4.000   ,    3.072
R Phi    -14.000   ,    3.107
R Phi     27.000   ,    0.017

R Phi    172.000   ,    1.553
R Phi    165.000   ,    1.553
R Phi    173.000   ,    1.536
R Phi    170.000   ,    1.571
R Phi    166.000   ,    1.536

R Phi   -163.000   ,    3.107
R Phi    169.000   ,    0.017
R Phi    172.000   ,    0.035
R Phi   -165.000   ,    3.124
R Phi   -159.000   ,    3.124
R Phi    165.000   ,    0.000
R Phi    167.000   ,    0.000
R Phi    167.000   ,    0.035
R Phi   -155.000   ,    3.107

R Phi    313.000   ,    1.571
R Phi    319.000   ,    1.536
R Phi    312.000   ,    1.588
R Phi    315.000   ,    1.553
R Phi    317.000   ,    1.553

R Phi     24.000   ,    1.536
R Phi     26.000   ,    1.518
R Phi     22.000   ,    1.553

我想平均值或增量可以正常工作,但我需要了解為什么負值具有不同的 theta。 實際上,差異似乎是 Pi,因此對於每個負值,我都可以使用 abs(r) 和 Pi-Phi。

但是我需要知道這是否是一個 100% 完全證明的解決方案。

EDIT2:經過測試,我確信我不完全在這里......線條明顯地交換了位置......

根據我從文檔中收集的信息,HoughLines 函數返回極坐標中線的參數化。 所以 ( r , phi ) 元組描述了直線到原點的最短距離以及從原點到最短距離點的直線與x軸之間的角度。 函數文檔中的草圖說明了這種情況(藍線和紅線之間有一個直角):

參數化說明

現在,如果兩條線相似,它們可能會相互傾斜一點,它們離原點最近的距離會略有不同。 因此,您可以僅合並檢測到的差異小於DeltaRDeltaPhi (同時)的行,例如通過采用參數的方式。 如果您對檢測到的線路的可信度有某種衡量標准,您也可以執行加權平均。 公差應該有多大在很大程度上取決於您的坐標系和您的應用程序。 當然,正如阿爾貝馬拉所說,首先提高算法的閾值以減少假線將有助於獲得更精確的結果。

編輯:以上假設參數中沒有歧義。 由於這里不是這種情況,您必須將r折疊為 [0,∞) 並將phi折疊為 [0,2π)。 如果r為負,反轉其符號並將 π 添加到phi ,然后將 2π 的倍數添加到phi 中,以便結果在 0 <= phi < 2π 范圍內。 你總會在某處切一個分支,在那里phi跳躍 2π。 這使角度及其平均值的比較變得復雜:您必須比較角度“模 2π”,即對於兩個角度phi1phi2abs(phi1-phi2)abs(abs(phi1-phi2)-2π)作為他們的區別。

在您確定應該合並的線之后,您必須將它們的phi值在數值上靠近在一起以獲得平均值,例如通過將 2π 添加到小於 π 的值。 然后,您可以將平均值折疊回 [0,2π) 范圍內。

編輯 2: phi 的值小於 π 加上負r只能由穿過扇區 2 (x<0, y>0)、3 (x<0, y<0) 和 4 (x>0, y<0) 的坐標系。 這些線在扇區 1 (x>0, y>0) 中永遠不可見。 因此,如果您只考慮通過扇區的線phi - π 將在 [0,2π) 范圍內,您可以節省折疊步驟。 但是,在平均和測量角度差異時,您仍然必須處理phi = 0 處的分支切割。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM