【问题标题】:How to calculate the edge line distance of below image?如何计算下图的边缘线距离?
【发布时间】:2017-06-25 16:57:28
【问题描述】:

对于下图,如何获取边缘线长度并绘制它们的拟合线。任何建议将被认真考虑。谢谢。

【问题讨论】:

  • 这将是困难的,因为重叠。即使在(大概)手绘片段上,也不清楚它们在哪里结束。你必须给出一个精确的规则。
  • 如果没有更多关于可能配置的上下文,就不可能提出一个好的解决方案。否则,标准但较差的答案是“霍夫变换”。
  • 如果你愿意,我们可以私下讨论,查看我的个人资料。
  • 你好道斯特。非常感谢您的回答。好的。我会联系你的。
  • 此解决方案的任何更新。我很想知道

标签: opencv image-processing halcon


【解决方案1】:

可能我来晚了,但无论如何。 这是我对这个问题的解决方案。 它不是很准确,但它确实有效。 为了达到更好的准确性,您需要不止一张图像。 HDevelop 的代码:

read_image (Image, 'D:/exp/test/1')
access_channel (Image, Image1, 1)



*find vertical lines
derivate_gauss (Image1, DerivGauss2, 1, 'x')
threshold (DerivGauss2, Region1, -255, -2)
connection (Region1, ConnectedRegions1)

*filter out redundant features
select_shape (ConnectedRegions1, SelectedRegions, ['rect2_len1','rectangularity'], 'and', [100,0.5], [99999,1])

*select rightmost edge
*this would be our reference line
area_center (SelectedRegions, Area, Row, Column)
tuple_sort_index (Column, Indices)
select_obj (SelectedRegions, ObjectSelected, Indices[|Indices|-1]+1)
skeleton (ObjectSelected, Skeleton)
smallest_rectangle2 (Skeleton, Row1, Column1, Phi, Length1, Length2)

*hide right side of the image based on that edge
Shift:=200
Row1Shift:=Row1-(cos(Phi)*Shift)
Column1Shift:=Column1-(sin(Phi)*Shift)
gen_rectangle2 (Rectangle, Row1Shift, Column1Shift, Phi, 999, 200)
complement (Rectangle, InspectionArea)


*find horizontal lines
derivate_gauss (Image1, DerivGauss, 1, 'y')
threshold (DerivGauss, Region, 5, 255)

*find shifted edges
intersection (Region, InspectionArea, RegionIntersection)
connection (RegionIntersection, ConnectedRegions)

*filter out redundant features
select_shape (ConnectedRegions, SelectedRegions1, ['inner_radius','rectangularity'], 'and', [2,0.5], [99999,1])


*print length
smallest_rectangle2 (SelectedRegions1, Row2, Column2, Phi1, Length11, Length21)
Row2Shift:=Row2+(sin(Phi)*Length11)
Column2Shift:=Column2+(cos(Phi)*Length11)
count_obj (SelectedRegions1, Number)

tuple_gen_sequence (0, (Number-1)*20, 20, Sequence)
dev_disp_text (Length11, 'window', Sequence, 0, 'black', [], [])
dev_set_color ('red')
skeleton (SelectedRegions1, Skeleton1)
dev_display(Skeleton1)

结果:

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多