halcon模板匹配结果row,column是否是质心坐标/将形状模板在模板创建位置显示/获取创建模板时工件位置坐标/将匹配的模板二维变换到实际位置/

本文介绍了使用Halcon库进行图像处理,通过偏心ROI模板、形状模板的质心与区域模板中心的区别,展示了模板匹配过程中的中心转移。重点在于理解模板匹配时圆心位置变化,以及如何通过矩阵变换追踪形状模板的实际质心。
摘要由CSDN通过智能技术生成

一、读入一张图片
在这里插入图片描述
二、故意设置偏心的ROI(模板)区域,由左上角轮廓图可知,创建时是将ROI区域的中心移动至原点,此时圆心处为

*此时圆心为形状模板的质心位置,而非区域模板的中心位置
area_center_xld (ModelContours, Area, Row1, Column1, PointOrder)
gen_circle (Circle1, Row1, Column1, 3)
dev_display (Circle1)

area_center_xld

三、将创建的模板移动至模板创建位置处显示(原点处轮廓可以消除,此处没消去),同时也可以获取创建模板时工件位置坐标
在这里插入图片描述
四、令读一张图,做模板匹配
在这里插入图片描述
用find_scaled_shape_model得出的Row, Column处画圆并显示,很明显,此处不是质心,而是模板ROI匹配处的中心位置
在这里插入图片描述
5、二维矩阵变换,将模板轮廓在匹配处显示,并将转换后轮廓圆心显示(也可以说得此时形状模板质心坐标)
在这里插入图片描述
由此,各处各心得位置也就明了。

完整代码

dev_close_window ()

*read_image (Image, 'C:/Users/连山人/Desktop/物料纠偏/halcon实验/Image_.bmp')
*read_image (Image, 'C:/Users/连山人/Desktop/物料纠偏/halcon实验/Image_01.bmp')
read_image (Image, 'C:/Users/连山人/Desktop/物料纠偏/halcon实验/Image_3.bmp')

get_image_size (Image, Width, Height)
dev_open_window (0, 0,  Width, Height, 'black', WindowHandle)

dev_set_line_width (3)
dev_set_part (0, 0, Height-1, Width-1 )
dev_set_color ('blue')
dev_display(Image)


draw_rectangle2 (WindowHandle, Row, Column, Phi1, Length1, Length2)
gen_rectangle2 (ModelRegion, Row, Column, Phi1, Length1, Length2)
*draw_circle (WindowHandle, Row, Column, Radius)
*gen_circle (ModelRegion, Row, Column, Radius)
reduce_domain (Image, ModelRegion, TemplateImage)
*创建模板时,是将roi区域的中心点移动至像素坐标系(0,0),而不是形状模板的质心移动至原点
create_shape_model (TemplateImage, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelId)
*ModelId为包含形状模板的区域模板,但当提取轮廓时,只会获得形状模板的轮廓(因为区域模板只有形状模板的轮廓)
get_shape_model_contours (ModelContours, ModelId,1)
dev_set_color ('red')
dev_display (ModelContours)

*此时圆心为形状模板的质心位置,而非区域模板的中心位置
area_center_xld (ModelContours, Area, Row1, Column1, PointOrder)
gen_circle (Circle1, Row1, Column1, 3)
dev_display (Circle1)
stop ()

*创建二维平移矩阵,将形状模板移动到创建模板处显示
hom_mat2d_identity (HomMat2DI)
hom_mat2d_translate (HomMat2DI, Row, Column, HomMat2DT)
affine_trans_contour_xld (ModelContours, ModelContAffTrans, HomMat2DT)
dev_display (ModelContAffTrans)
area_center_xld (ModelContAffTrans, Area, RowT, ColumnT, PointOrder)
gen_circle (CircleT, RowT, ColumnT, 3)
dev_display (CircleT)

stop ()
*——————————————————————————模板匹配————————————————————
*read_image (Image, 'C:/Users/连山人/Desktop/物料纠偏/halcon实验/Image_3.bmp')
read_image (Image, 'C:/Users/连山人/Desktop/图/模板创建实验/Image_20.bmp')
*在scale中查找匹配图形
find_scaled_shape_model (Image, ModelId, 0, 360, 0.9, 1.1, 0.6, 0, 0.5, 'least_squares', 0, 0.9, Row, Column, Anglerad, Scale, Score)
*此时圆心为ROI区域(区域模板)匹配位置的中心(转换过角度),非匹配后形状模板轮廓质心
gen_circle (Circle, Row, Column, 3)
dev_display (Circle)

*——-——转换形状模板轮廓至匹配位置显示————————

*ModelId为包含形状模板的区域模板,但当提取轮廓时,只会获得形状模板的轮廓(因为区域模板只有形状模板的轮廓)
get_shape_model_contours (ModelContours, ModelId,1)

    hom_mat2d_identity (HomMat2)
    *将缩放添加到齐次二维转换矩阵中,以0,0为基点,进行扩大
    hom_mat2d_scale (HomMat2, Scale, Scale, 0, 0, HomMat2)
    *将旋转添加到齐次二维转换矩阵中,绕点0,0旋转
    hom_mat2d_rotate (HomMat2, Anglerad, 0, 0, HomMat2)
    hom_mat2d_translate (HomMat2, Row, Column, HomMat2)
    *区域根据齐次二维转换矩阵中的参数要求进行仿射变换,坐标根据括号中参数来设置
    affine_trans_contour_xld (ModelContours, TransContours, HomMat2)
    dev_display (TransContours)

*转换后为形状模板轮廓实际匹配质心处
area_center_xld (TransContours, Area, Row2, Column2, PointOrder)
gen_circle (Circle2,  Row2, Column2, 3)
dev_display (Circle2)

stop ()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值