項目中需要判斷兩條線段的相似程度並給出得分
容易想到利用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)