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三个参数。

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 (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

代码里使用了仿射变换:

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

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

 

find_shape_modelHALCON中用于基于形状匹配的模板匹配算子,它可以根据输入的模型ID和其他相关参数,在图像中找到与模板最相似的区域,并返回匹配结果的位置、旋转角度和相似度等信息。 具体来说,find_shape_model算子可以通过以下参数进行调用: - Image:输入的待匹配图像。 - ModelID:用于匹配的模型的ID。 - AngleStart:旋转起始角度,用于指定旋转的起始角度。 - AngleExtent:旋转角度范围,用于指定旋转角度的范围。 - MinScore:最小相似度阈值,用于过滤相似度较低的匹配结果。 - NumMatches:最大匹配数量,用于限制匹配结果的数量。 - MaxOverlap:最大重叠度,用于过滤重叠度较高的匹配结果。 - SubPixel:亚像素精度,用于指定匹配结果的精度级别。 - NumLevels:金字塔层数,用于指定图像金字塔的层数。 - Greediness:贪婪程度,用于指定匹配结果的贪婪程度。 - Row:输出参数,匹配结果的行坐标。 - Column:输出参数,匹配结果的列坐标。 - Angle:输出参数,匹配结果的旋转角度。 - Score:输出参数,匹配结果的相似度。 在运行该算子时,它会根据输入的模型ID和其他相关参数,在图像中找到与模板最相似的区域,并返回匹配结果的位置、旋转角度和相似度等信息。AngleStart、AngleExtent和NumLevels用于指定模型在不同旋转角度下的特征信息,MinScore和MaxOverlap用于过滤匹配结果,SubPixel用于指定匹配结果的精度级别,Greediness用于指定匹配结果的贪婪程度,NumMatches用于限制匹配结果的数量,RowColumnAngle和Score用于保存匹配结果的位置、旋转角度和相似度等信息。 需要注意的是,find_shape_model算子仅能处理基于形状匹配的模板匹配模型,且需要在create_shape_model算子中指定NumLevels参数。在使用该算子前,应该先创建模型并训练模型。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值