如何判斷兩條線段的相似程度(計算點到直線的距離)


項目中需要判斷兩條線段的相似程度並給出得分

容易想到利用OpenCV中的Hough變換將直線變為Hough空間中的點

再求參考點與觀測點在Hough空間中的距離

上述方法理論可行,實際操作中存在偏差

例如直線y = kx + b變換為(k,b)后很容易受到斜率k的影響而離群,實則b差別較小

上圖,因為受到k值懲罰Line_0會比Line_1更離群,嘗試加權或取對數效果都不理想

采用ro和theta的Hough變換效果依舊,受ro影響較大存在誤判

痛定思痛,重新思考如何評估描述線段相似的代價函數,兩條線段越接近看作越相似

因此問題轉化為計算待測線段中點向參考線的投影距離,即向量e的模長

用Python很容易實現,將向量標示為np.array([x,y])形式可直接進行向量運算

最后結果需要用到np.linalg.norm(x)該函數默認求二范數,即模長

代碼實現

a = np.array([1,2])
b = np.array([3,4])
c = (a.dot(b) / np.linalg.norm(b)**2) * b
dist = np.linalg.norm(a - c)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM