图像等距水平线检测优化:伪线与透视畸变干扰的解决方案需求
测量板水平标记线检测的鲁棒方案需求
需要检测测量板上带左侧数字标注的真实水平距离标记线,但图像中存在一条伪线(箭头标记)干扰检测。
当前采用核密度估计确定连续线的最常见间距(示例为150像素),并通过以下算法筛选候选线:
margin = 30 # 单位:像素 ruler_distance = 150 # 由核密度估计得到,也可使用中位数 candidates = defaultdict(list) for i, line1 in enumerate(merged): candidates[i].append(line1) for j, line2 in enumerate(merged): if j > i: avg_y1 = (line1[1] + line1[3]) / 2 # line[1]和line[3]为y坐标 avg_y2 = (line2[1] + line2[3]) / 2 diff = avg_y2 - avg_y1 if ruler_distance - margin <= diff <= ruler_distance + margin: candidates[i].append(line2) ruler_distance = diff + avg_ruler_distance
但该算法鲁棒性极差,仅当margin=30时有效,调整±10就失效。核心问题是透视畸变导致真实等距的线在图像中实际间距不等。
当前图像已通过OpenCV霍夫变换检测并合并水平线,尝试腐蚀操作会导致其他图像中的标记丢失。相关线坐标数据可通过numpy.loadtxt读取:
23 18 882 17 1449 445 2841 454 508 625 1887 645 746 655 2092 670 548 1140 1998 1140 692 1180 1739 1180 480 1362 892 1362 807 1988 1234 1988 795 2116 1575 2116 783 2254 1717 2254 770 2395 1882 2395 756 2542 1878 2542 1008 2607 1332 2607 742 2695 1892 2695 729 2854 1900 2854 715 3016 1907 3016 387 3531 1949 3533 1515 4026 3023 4008
现寻求更可靠的检测方案。
内容的提问来源于stack exchange,提问作者Lukasz Tracewski
相关产品推荐
相关产品推荐

