设置首页收藏本站
授权版本:2024_10
开启左侧

求助,如何区分四边形的上下左右四条边

[复制链接]
freekun139com 发表于 2023-6-8 11:32:30 | 显示全部楼层 |阅读模式
  1. read_image (Image, '如何区分四条边.png')
  2. get_image_size (Image, Width, Height)

  3. *定位目标区域
  4. binary_threshold (Image, RegionBinThresh, 'max_separability', 'light', UsedThreshold)
  5. closing_circle (RegionBinThresh, RegionClosing, 1.5)
  6. opening_circle (RegionClosing, RegionOpening, 3.5)
  7. shape_trans (RegionOpening, RegionTrans, 'convex')

  8. *创建边缘轮廓
  9. gen_contour_region_xld (RegionTrans, Contours, 'border')
  10. segment_contours_xld (Contours, ContoursSplit, 'lines', 5, 4, 2)
  11. select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 200, 999999, -0.5, 0.5)
  12. *近似共线轮廓合并, 减少短小线条干扰
  13. union_collinear_contours_xld (SelectedContours, UnionContours, 10, 1, 5, 0.1, 'attr_forget')
  14. elliptic_axis_xld (UnionContours, Ra, Rb, Phi)

  15. area_center_xld (Contours, Area, Row, Column, PointOrder)
  16. gen_cross_contour_xld (Cross, Row, Column, 64, rad(45))
  17. select_shape_xld (UnionContours, SelectedXLD_H, ['phi'], 'or', [rad(-45)], [rad(45)])  //*水平
  18. select_shape_xld (UnionContours, SelectedXLD_V, ['phi','phi'], 'or', [rad(-90), rad(45)], [rad(-45), rad(90)])  //*竖直
  19. select_shape_xld (SelectedXLD_H, SelectedXLD_T, 'row1', 'and', 0, Row)             //*上: Top
  20. select_shape_xld (SelectedXLD_H, SelectedXLD_B, 'row1', 'and', Row, Height)        //*下: Bottom
  21. select_shape_xld (SelectedXLD_V, SelectedXLD_L, 'column1', 'and', 0, Column)       //*左: Left
  22. select_shape_xld (SelectedXLD_V, SelectedXLD_R, 'column1', 'and', Column, Width)   //*右: Right
  23. count_obj (SelectedXLD_T, NumberT)
  24. count_obj (SelectedXLD_B, NumberB)
  25. count_obj (SelectedXLD_L, NumberL)
  26. count_obj (SelectedXLD_R, NumberR)
  27. if (NumberT<=0 or NumberB<=0 or NumberL<=0 or NumberR<=0)
  28.     stop ()
  29.     return ()
  30. endif
复制代码


elliptic_axis_xld计算出的Phi分别为[-1.50736, -0.0011843, 0.0213292, 0.0]
左侧边Phi为0.0213292被当作水平轮廓筛选出,这个问题出在哪里,如何能正确区分出上下左右,求大佬指导

如何区分四条边.png

如何区分四条边.png

左侧边计算不正确.jpg

左侧边计算不正确.jpg
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
吐个泡泡 发表于 2023-6-8 14:41:16 | 显示全部楼层
  1. read_image (Image1, 'C:/Users/98284/Desktop/1.png')
  2. binary_threshold (Image1, Region, 'max_separability', 'light', UsedThreshold)
  3. fill_up (Region, RegionFillUp)
  4. shape_trans (RegionFillUp, RegionTrans, 'convex')
  5. boundary (RegionTrans, RegionBorder, 'inner')
  6. gen_contour_region_xld (RegionBorder, Contours, 'border')
  7. segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 1, 2, 2)
  8. *左、 上、 右、 下排序
  9. sort_contours_xld (ContoursSplit, SortedContours, 'upper_left', 'true', 'row')
  10. count_obj (SortedContours, Number)
  11. for i := 1 to Number by 1
  12.     select_obj (SortedContours, ObjectSelected, i)
  13.     fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
  14.     gen_region_line (RegionLines, RowBegin, ColBegin, RowEnd, ColEnd)
  15. endfor
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
树lqy 发表于 2023-6-8 16:53:08 | 显示全部楼层
  1. select_shape_xld (UnionContours, SelectedXLD_T, 'row2', 'and', 0, Row)             //*上: Top
  2. select_shape_xld (UnionContours, SelectedXLD_B, 'row1', 'and', Row, Height)        //*下: Bottom
  3. select_shape_xld (UnionContours, SelectedXLD_L, 'column2', 'and', 0, Column)       //*左: Left
  4. select_shape_xld (UnionContours, SelectedXLD_R, 'column1', 'and', Column, Width)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-6-9 10:30:58 | 显示全部楼层
树lqy 发表于 2023-6-8 16:53
select_shape_xld (UnionContours, SelectedXLD_T, 'row2', 'and', 0, Row)             //*上: Top
select ...

可以呀,对属性理解到位,运用灵活,学习了
  1. row1/column1: upper left corner
  2. row2/column2: lower right corner
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-6-9 10:33:50 | 显示全部楼层
吐个泡泡 发表于 2023-6-8 14:41
read_image (Image1, 'C:/Users/98284/Desktop/1.png')
binary_threshold (Image1, Region, 'max_separabil ...

感谢指导,应该是比较通用的方法,谢谢
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-6-13 21:39:53 | 显示全部楼层

*我怎么得到了这个顺序: 上、右、左、下,貌似对正矩形是靠谱的,旋转矩形不适用
  1. gen_rectangle2 (Rectangle, Row, Column, rad(10), 50, 10)
  2. gen_contour_region_xld (Rectangle, Contours, 'border')
  3. segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 5, 4, 2)
  4. sort_contours_xld (ContoursSplit, SortedContours, 'upper_left', 'true', 'row')
  5. count_obj (SortedContours, Number)
  6. for I := 1 to Number by 1
  7.     select_obj (SortedContours, ObjectSelected, I)
  8. endfor
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
吐个泡泡 发表于 2023-6-14 10:37:20 | 显示全部楼层
更改算子属性
2.PNG
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| freekun139com 发表于 2023-6-14 20:46:58 | 显示全部楼层

那感觉就不通用了
实际工作中目标矩形的角度是有一定变化的
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表