📢前言
该方法是基于halcon平台,利用拟合矩形边缘求其中心的方法来计算出基板中心和Lid中心的像素偏差,在读取相机的标定文件,即像素当量,来最终计算出两矩形中心的实际贴装偏差。
🐵仿真代码
dev_close_window () dev_open_window (0, 0, 512, 512, 'black', WindowHandle) offsetXs:=[] offsetYs:=[] offsetAngles:=[] list_files ('../测试图片', ['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) for Index := 0 to |ImageFiles| - 1 by 1 read_image (Image, ImageFiles[Index]) rgb1_to_gray (Image, Image) get_image_size (Image, Width, Height) dev_display (Image) dev_set_draw ('margin') dev_set_color ('red') draw_region (Region, WindowHandle) fitRectangle (Image, Region, outRegion, outContour, 25, 20, 30, 9, CenterRowlid, CenterCollid, RectWidth, RectHeight, CenterAnglelid) gen_cross_contour_xld (Cross, CenterRowlid, CenterCollid, 26, 0.785398) dev_display (Cross) dev_set_color ('green') draw_region (Region1, WindowHandle) fitRectangle (Image, Region1, outRegion1, outContour1, 25, 25, 10, 9, CenterRowsub, CenterColsub, RectWidth1, RectHeight1, CenterAnglesub) gen_cross_contour_xld (Cross1, CenterRowsub, CenterColsub, 26, 0.785398) dev_display (Cross1) offsetcol:=CenterColsub-CenterCollid offsetrow:=CenterRowsub-CenterRowlid *读取相机标定文件,计算实际物理偏差 read_tuple ('../数据保存/paramMatrix.tup', Tuple) affine_trans_point_2d (Tuple, 1,1, offsetX1, offsetY1) affine_trans_point_2d (Tuple, offsetcol,offsetrow, offsetX, offsetY) offsetAngle:=(CenterAnglesub-CenterAnglelid)/3.1415926*180 offsetXs:=[offsetX,offsetXs] offsetYs:=[offsetY,offsetYs] offsetAngles:=[offsetAngles,offsetAngle] endfor
注:代码中的拟合矩形求中心算子fitRectangle为封装的函数,由于代码较多,需要的自行下载(包含测试图片,测试数据、标定文件和仿真代码):基于halcon算法的贴装精度测试
其算法原理和我的另一篇文章中介绍的类似:[Halcon&拟合] 直线、矩形和圆边缘轮廓拟合提取,后者介绍的更详细一些。
🐦效果验证
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |