Halcon模板匹配算子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中返回。

再来做个小实验

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

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

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

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

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。

 

最后来看看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 (Image)

*从图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

代码里使用了仿射变换:

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

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

发布了509 篇原创文章 · 获赞 620 · 访问量 347万+

猜你喜欢

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