halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?

Halcon模板匹配算子find_shape_model里的参数Row, Column, Angle(单位:弧度)含义是什么?

find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)

先看官方文档怎么说

The position and rotation of the found instances of the model is returned in Row,
 Column, and Angle. Additionally, the score of each found instance is returned in Score.
找到的模型实例的位置和旋转以行,列和角度返回。 此外,每个找到的实例的分数都在Score中返回。
 
find_shape_model(Image : :  //搜索图像
                ModelID, //模板句柄
                AngleStart,  // 搜索时的起始角度
                AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集
                MinScore, //最小匹配值,输出的匹配的得分Score 大于该值
                NumMatches, //定义要输出的匹配的最大个数
                MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出
//如果MaxOverlap=0, 找到的目标区域不能存在重叠, 如果MaxOverla p=1,所有找到的目标区域都要返回。
                SubPixel, //计算精度的设置,五种模式,多选2,3
                NumLevels, //搜索时金字塔的层数
                Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况
                           //0安全慢;1块不稳定;其他就是介于中间值 
                Row,Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。

再来做个小实验

画图举例说明,Row, Column, Angle到底指的是什么距离?

1、已知图1和图2。小实验需要从图1取出模板,然后在图2找到相同的物体。

2、从图1框选ROI,ROI的像素中心点是B,ROI就是模板。

3、使用find_shape_model算子,在图2找到了物品,算子返回了Row, Column, Angle三个参数。

image.png

4、如下图所示,A,B,C点三者的对应关系是求出来了。

A是图1左上角的起点;

B是ROI的像素中心点,也是图2的起点;

C是匹配到的物体像素中心点。

A与B之间的宽和高分别是(row1,col1)

B与C之间的宽和高分别是(row2,col2)

结论:

find_shape_model算子,其返回值Row, Column参数指的就是row2和col2。

image.png

最后来看看halcon源码的实现

*读图1
read_image (Image1, '1.jpg')
 
*获取图像宽高
get_image_size (Image1, Width, Height)
dev_open_window_fit_image (Image1, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image1)
 
*彩色转灰度图
count_channels (Image1, Channels)
if (Channels == 3)
    rgb1_to_gray (Image1, Image1)
*真彩色转灰度图
elseif (Channels == 4)
    decompose4 (Image1, ImageR, ImageG, ImageB, ImageA)
    compose3 (ImageR, ImageG, ImageB, MultiChannelImage)
    rgb1_to_gray (MultiChannelImage, Image1)
endif
 
*从图1选取ROI,建立模板
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
area_center (Rectangle, Area, RowRef, ColumnRef)
reduce_domain (Image1, Rectangle, ImageReduced)
create_shape_model (ImageReduced, 'auto', 0, rad(180), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
get_shape_model_contours (ShapeModel, ModelID, 1)
 
*读图2
read_image (Image2, '2.jpg')
 
*模板匹配
find_shape_model (Image2, ModelID, 0, rad(180), 0.1, 1, 0.5, 'least_squares', 0, 0.7, Row, Column, Angle, Score)
if (|Score| > 0)
     dev_set_color ('yellow')
     dev_clear_window()
     vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, MovementOfObject)
     affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)
     dev_display (ImageNew1)
     dev_display (ModelAtNewPosition)
endif

image.png

代码里使用了仿射变换:

1、Halcon二维仿射变换,严格按照平移-->旋转-->缩放的先后顺序实施;
2、一切以ROI模板的中心点(即鼠标选取的模板图像的像素中心,上文中描述的点B)为零点,。图2找到的任何物品,都是以ROI的中心点为基准的;

3、图2,ROI模板从B点出发,平移(Row,Column),达到C点,再旋转Angle,最后缩放(如果是find_scaled_shape_model算子)。如此就可以找到物品的准确位置。

转载自:https://blog.csdn.net/libaineu2004/article/details/105415471


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864