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

模板匹配中得到的Row和Column的相对位置受匹配物旋转角度

[复制链接]
XuDong1 发表于 2020-12-28 15:21:59 | 显示全部楼层 |阅读模式
悬赏90视觉币
我用create­_scaled_shape_model_xld创建模板,再用Find_scaled_shape_model进行识别。发现抓取出的Row与Column坐标会随匹配物角度的不同而产生相对位置的偏移。初步怀疑是Find_scaled_shape_model算子的问题,请问做模板匹配时除了能得到Row、Column、Angle等位置信息还能提取出什么其他有用的信息么,可以获取匹配物的轮廓么?模板匹配图片如问题中的图所示,谢谢大家。

匹配使用的图片

匹配使用的图片

匹配使用的图片

匹配使用的图片

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| XuDong1 发表于 2020-12-28 15:34:56 | 显示全部楼层
有没有大佬有办法解决,有偿请教大佬。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Criss 发表于 2020-12-28 21:57:57 | 显示全部楼层
XuDong1 发表于 2020-12-28 15:34
有没有大佬有办法解决,有偿请教大佬。

可以获取模板的轮廓,但是获取了以后模板的坐标会更新到(0,0)的位置,角度为0,用算子:get_shape_model_contours
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

lrf2019 发表于 2020-12-29 08:20:13 | 显示全部楼层
要区分模板对模板,模板对图片之类的转换关系。
分清哪个坐标系对哪个坐标系的转换就好了。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| XuDong1 发表于 2020-12-29 11:21:53 | 显示全部楼层
Criss 发表于 2020-12-28 21:57
可以获取模板的轮廓,但是获取了以后模板的坐标会更新到(0,0)的位置,角度为0,用算子:get_shape_model_ ...

您好,我一直使用的是默认的参数就直接是(0,0),想请问您set_shape_model是将模板轮廓的重心放置在图片中的位置进行设置么,因为我调整了一下,发现偏得更离谱了,谢谢您了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| XuDong1 发表于 2020-12-29 11:27:25 | 显示全部楼层
lrf2019 发表于 2020-12-29 08:20
要区分模板对模板,模板对图片之类的转换关系。
分清哪个坐标系对哪个坐标系的转换就好了。 ...

这个分清楚了,但是就感觉算子获取的Row和Column不够准,会随角度产生一定偏移,但是如果角度一样,识别的相对位置就一样。偏移也很少,就大概0.5mm以内,像素的相机当量是0.139mm左右。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Criss 发表于 2020-12-29 11:58:36 | 显示全部楼层
XuDong1 发表于 2020-12-29 11:21
您好,我一直使用的是默认的参数就直接是(0,0),想请问您set_shape_model是将模板轮廓的重心放置在图 ...

微信截图_20201229115759.png
是模板中心不是图形中心,使用dev_display_shape_matching_results就可以把现在查找的位置和交给给它就可以重合了,楼主也可以自己创建仿射矩阵转换显示。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| XuDong1 发表于 2020-12-29 14:47:04 | 显示全部楼层
Criss 发表于 2020-12-29 11:58
是模板中心不是图形中心,使用dev_display_shape_matching_results就可以把现在查找的位置和交给给它就可 ...

好的,能详细写一下您是怎么做的么?我是参考例程先读入模板轮廓再构建模板到识别点的仿射变换矩阵,最后将轮廓仿射变换过去。请问直接用dev_display_shape_matching_results就可以显示出匹配模板的轮廓了么?会和我之前得到的结果有不同么?谢谢您了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Criss 发表于 2020-12-29 15:39:12 | 显示全部楼层
XuDong1 发表于 2020-12-29 14:47
好的,能详细写一下您是怎么做的么?我是参考例程先读入模板轮廓再构建模板到识别点的仿射变换矩阵,最后 ...
  1. set_system ('border_shape_models', 'false')
  2. dev_get_window (WindowHandle)
  3. read_image (Image, 'C:/Users/Criss/Desktop/1.jpg')
  4. * draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
  5. gen_rectangle2 (Rectangle, 1453, 1255, -0.0717, 265, 122)
  6. reduce_domain (Image, Rectangle, TemplateImage)
  7. create_shape_model (TemplateImage, 7, rad(0), rad(360), rad(0.4835), ['none','no_pregeneration'], 'use_polarity', [10,18,11], 4, ModelID)
  8. get_shape_model_contours (ModelContours, ModelID, 1)
  9. area_center (Rectangle, ModelRegionArea, RefRow, RefColumn)
  10. vector_angle_to_rigid (0, 0, 0, RefRow, RefColumn, 0, HomMat2D)
  11. affine_trans_contour_xld (ModelContours, TransContours, HomMat2D)
  12. dev_display (Image)
  13. dev_set_line_width (3)
  14. dev_set_color ('green')
  15. dev_set_draw ('margin')
  16. dev_display (Rectangle)
  17. dev_display (TransContours)
  18. stop ()
  19. TestImages := ['C:/Users/Criss/Desktop/1.jpg','C:/Users/Criss/Desktop/2.jpg']
  20. for T := 0 to 1 by 1
  21.     read_image (Image, TestImages[T])
  22.     find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 4, 0.5, 'least_squares', [7,1], 0.75, Row, Column, Angle, Score)
  23.     dev_display (Image)
  24.     for I := 0 to |Score| - 1 by 1
  25.         vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2D1)
  26.         affine_trans_contour_xld (ModelContours, TransContours, HomMat2D1)
  27.         dev_set_color ('green')
  28.         dev_display (TransContours)
  29.         stop ()
  30.     endfor
  31. endfor
复制代码
FindShapeDemo.rar (618.65 KB, 下载次数: 15)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

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

本版积分规则

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