设置首页收藏本站在线聊天
授权版本:2024_09
开启左侧

求助各位大佬帮我用线条对图像进行局域分割,线条随图像获取的矩形而旋转

[复制链接]
夜问夜问 发表于 2024-1-8 11:29:36 | 显示全部楼层 |阅读模式
悬赏2视觉币
求助各位大佬帮我用线条对图像进行局域分割,如图粗红线那样进行绘制直线,这些线条能随获取的图像矩形旋转的方向而旋转,垂直矩形线分割的线条已经OK,斜线分割的线条有些问题,请大佬们协助一下帮我改改,我是新手水平有限,谢谢。
测试原图和代码存放在下面网盘中

链接:https://pan.baidu.com/s/1jlKysHJ_VG2z2mPSHSog1w?pwd=ABCD
提取码:ABCD

竖线分割OK,斜线分割不理想.png 图分割.png


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
halcon2016 发表于 2024-1-8 11:29:37 | 显示全部楼层
  1. * Image Acquisition 01: Code generated by Image Acquisition 01
  2. list_files ('C:/Users/Administrator/Desktop/线条分割', ['files','follow_links','recursive'], ImageFiles)
  3. tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
  4. for Index := 0 to |ImageFiles| - 1 by 1
  5.     read_image (Image, ImageFiles[Index])
  6.     * Image Acquisition 01: Do something
  7.     edges_sub_pix (Image, Edges, 'canny', 3, 30, 60)
  8.     gen_region_contour_xld (Edges, Region, 'filled')
  9.     union1 (Region, RegionUnion)
  10.     smallest_rectangle2 (RegionUnion, Row, Column, Phi, Length1, Length2)
  11.     gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
  12.     boundary (Rectangle, RegionBorder, 'inner')
  13. *     distance_pp (970, 725, 857, 920, Distance)
  14.     *不是严格等间距,所以有两个D
  15.     D1:=226
  16.     D2:=D1-24
  17.    
  18.     tuple_cos (Phi, Cos)
  19.     tuple_sin (Phi, Sin)
  20.    
  21.     *左上
  22.     LT_X := Column+(-Length1*Cos - Length2*Sin)
  23.     LT_Y := Row-(-Length1*Sin + Length2*Cos)
  24.    
  25.     *左下
  26.     LB_X := Column+(-Length1*Cos + Length2*Sin)
  27.     LB_Y := Row-(-Length1*Sin - Length2*Cos)
  28.    
  29.     RB_X := Column+(Length1*Cos + Length2*Sin)
  30.     RB_Y := Row-(Length1*Sin - Length2*Cos)
  31.    
  32.     RT_X := Column+(Length1*Cos - Length2*Sin)
  33.     RT_Y := Row-(Length1*Sin + Length2*Cos)
  34.    
  35.     gen_cross_contour_xld (Cross, LT_Y, LT_X, 36, 0)
  36.     gen_cross_contour_xld (Cross2, LB_Y, LB_X, 36, 0)
  37.    
  38.     gen_empty_obj (RegionLines1)
  39.     gen_empty_obj (RegionLines2)
  40.    
  41.     for index := 1 to 7 by 1
  42.         if(1==index)
  43.             D:=D1
  44.         else
  45.             D:=D1+(index-1)*D2
  46.         endif            
  47.         ColBegin:=LT_X+cos(-Phi)*D
  48.         RowBegin:=LT_Y+sin(-Phi)*D
  49.         ColEnd:=LT_X+cos(-Phi+rad(90))*D
  50.         RowEnd:=LT_Y+sin(-Phi+rad(90))*D
  51.         gen_region_line (RegionLines111, RowBegin, ColBegin, RowEnd, ColEnd)
  52.         angle_lx (RowBegin, ColBegin, RowEnd, ColEnd, Angle)
  53.         *延长直线起点和终点
  54. *         k2:=tan(-Angle)
  55.         ColBeginNew:=ColBegin-cos(-Angle)*300
  56.         RowBeginNew:=RowBegin-sin(-Angle)*300
  57.         ColEndNew:=ColEnd+cos(-Angle)*300
  58.         RowEndNew:=RowEnd+sin(-Angle)*300
  59.         gen_region_line (line, RowBeginNew, ColBeginNew, RowEndNew, ColEndNew)
  60.         intersection (line, RegionBorder, RegionIntersection)
  61.         connection (RegionIntersection, ConnectedRegions)
  62.         area_center (ConnectedRegions, Area, Row1, Column1)
  63.         gen_region_line (line2, Row1[0], Column1[0], Row1[1], Column1[1])
  64.         concat_obj (RegionLines1, line2, RegionLines1)
  65.     endfor
  66.    
  67.     for index := 1 to 7 by 1
  68.         if(1==index)
  69.             D:=D1
  70.         else
  71.             D:=D1+(index-1)*D2
  72.         endif            
  73.         ColBegin:=RT_X+cos(-Phi+rad(180))*D
  74.         RowBegin:=RT_Y+sin(-Phi+rad(180))*D
  75.         ColEnd:=RT_X+cos(-Phi+rad(90))*D
  76.         RowEnd:=RT_Y+sin(-Phi+rad(90))*D
  77.         gen_region_line (RegionLines111, RowBegin, ColBegin, RowEnd, ColEnd)
  78.         angle_lx (RowBegin, ColBegin, RowEnd, ColEnd, Angle)
  79.         *延长直线起点和终点
  80. *         k2:=tan(-Angle)
  81.         ColBeginNew:=ColBegin-cos(-Angle)*300
  82.         RowBeginNew:=RowBegin-sin(-Angle)*300
  83.         ColEndNew:=ColEnd+cos(-Angle)*300
  84.         RowEndNew:=RowEnd+sin(-Angle)*300
  85.         gen_region_line (line, RowBeginNew, ColBeginNew, RowEndNew, ColEndNew)
  86.         intersection (line, RegionBorder, RegionIntersection)
  87.         connection (RegionIntersection, ConnectedRegions)
  88.         area_center (ConnectedRegions, Area, Row1, Column1)
  89.         gen_region_line (line2, Row1[0], Column1[0], Row1[1], Column1[1])
  90.         concat_obj (RegionLines2, line2, RegionLines2)
  91.     endfor
  92.     dev_display (Image)
  93.     dev_display (RegionLines1)
  94.     dev_display (RegionLines2)
  95.     stop ()
  96. endfor
复制代码


1.png
2.png
3.png
4.png
5.png
6.png
7.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2024-1-8 17:03:53 | 显示全部楼层
大佬把垂直矩形的直线加进去就满足我的要求了。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

halcon2016 发表于 2024-1-8 17:27:34 | 显示全部楼层
本帖最后由 halcon2016 于 2024-1-8 17:29 编辑
夜问夜问 发表于 2024-1-8 17:03
大佬把垂直矩形的直线加进去就满足我的要求了。

垂直的不是上次给你回复过了吗,自己加上去不就行了,你自己一点都不想动
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2024-1-8 17:30:25 | 显示全部楼层
我加进去了有点偏差,顺便问问,D1:=226这个226怎么来的呢?问题以解决在哪里点呀?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

halcon2016 发表于 2024-1-8 17:32:48 | 显示全部楼层
夜问夜问 发表于 2024-1-8 17:30
我加进去了有点偏差,顺便问问,D1:=226这个226怎么来的呢?问题以解决在哪里点呀?
...

这个是根据你图片估出来的,你这个图片本身也不是很标准清晰的图片,间距也不是完全一样的,但思路是通用的
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

halcon2016 发表于 2024-1-8 17:34:43 | 显示全部楼层
夜问夜问 发表于 2024-1-8 17:30
我加进去了有点偏差,顺便问问,D1:=226这个226怎么来的呢?问题以解决在哪里点呀?
...

有偏差的话,你就根据实际距离调整间距
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2024-1-8 18:42:34 | 显示全部楼层
好的大佬!容我消化消化!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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