如何判断两条线段的相似程度

项目中需要判断两条线段的相似程度并给出得分

容易想到利用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)
原文地址:https://www.cnblogs.com/azureology/p/13034487.html