Halcon图片标定,使得后续图片处理过后变成与模板图片一样

Halcon图片标定,使得后续图片处理过后变成与模板图片一样

随便选择一张图片

对这张图片进行旋转矫正之后,图片就变成了一个模板图片。它的区域region位置如图所示:

 

当来了一张新的图片的时候,让它与region比较,与模板的位置有明显的偏差, 如图所示:

我们的目标就是让这张新的图片经过处理后与模板区域重合。如下图所示:

其实总体功能和旋转抠图差不多,只是使用的函数有一点差异。

代码总合:

代码所用的图片在:C:\Users\HJ\AppData\Roaming\MVTec\HALCON-21.05-Progress\examples\images\blister(根据自己安装halcon的位置来寻找)

*读取一张图进行处理,并以处理后的图为模板,让后续的图片都办成这张图的模样
read_image (Image, 'C:/Users/HJ/Desktop/test_image/blister/blister_01.png')
threshold(Image, Region, 100, 255)
connection(Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 15000, 9999999)
shape_trans(SelectedRegions, RegionTrans, 'convex')
*计算region的方向(角度),Phi是区域最远处点和x轴的夹角
orientation_region(RegionTrans, Phi)
*获取区域的中心
area_center(RegionTrans, Area, Row, Column)
if ((1.57<Phi and Phi<3.142) or (-3.142<Phi and Phi<-1.57))
    vector_angle_to_rigid(Row, Column, Phi, Row, Column, 3.14159, HomMat2D)
else
    vector_angle_to_rigid(Row, Column, Phi, Row, Column, 0, HomMat2D)
endif
*旋转图片和区域
affine_trans_image(Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region(RegionTrans, RegionTrans, HomMat2D, 'nearest_neighbor')
*计算旋转之后的区域的中心, 也就是模板区域的中心
area_center (RegionTrans, AreaRef, RowRef, ColumnRef)


list_files ('C:/Users/HJ/Desktop/test_image/blister', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
Width := 550
Height := 400
for Index := 0 to |ImageFiles| - 1 by 1
    *数据前处理
    read_image (Image2, ImageFiles[Index])
    threshold(Image2, Region_Each, 100, 255)
    connection(Region_Each, ConnectedRegions_Each)
    select_shape(ConnectedRegions_Each, SelectedRegions_Each, 'area', 'and', 15000, 9999999)
    shape_trans(SelectedRegions_Each, RegionTrans_Each, 'convex')
    
    *计算当前区域的方向(角度)
    orientation_region(RegionTrans_Each, Phi_Each)
    *获取当前区域的中心
    area_center(RegionTrans_Each, Area_Each, Row_Each, Column_Each)
    
    if ((1.57<Phi_Each and Phi_Each<3.142) or (-3.142<Phi_Each and Phi_Each<-1.57))
        *利用当前区域的中心、角度    和  模板区域的中心和角度来进行计算, 生成一个仿射变换的矩阵
        vector_angle_to_rigid(Row_Each, Column_Each, Phi_Each, RowRef, ColumnRef, 3.14159, HomMat2D1)
    else
        vector_angle_to_rigid(Row_Each, Column_Each, Phi_Each, RowRef, ColumnRef, 0, HomMat2D1)
    endif
    *根据仿射变换矩阵来对图片进行调整,变成和模板图片一样的
    affine_trans_image(Image2, ImageAffineTrans_Each, HomMat2D1, 'constant', 'false')
endfor

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值