# 【测量篇】（3）标定+定位+1D测量综合实例

“高端市场人抬人，低端市场人踩人！”

- 算法思路 -

1. 相机标定，减少镜头畸变以及得到公有制单位 2. 模板匹配 + 仿射变换 定位 3. 1D测量边缘对

1

*------指定标定初始值-----------*
*指定标定描述文件
CaltabName := 'caltab_10mm.descr'
*由于使用远心镜头，放大倍率为0.17，径向畸变的初始值为0，世界坐标系的物理尺寸为66um，主点位于图像中心
gen_cam_par_area_scan_telecentric_division (0.17, 0, 6.6e-06, 6.6e-06, 320, 240, 640, 480, StartCamParam)
*创建标定数据模型
create_calib_data ('calibration_object', 1, 1, CalibDataID)
*设置标定板描述文件
set_calib_data_calib_object (CalibDataID, 0, CaltabName)
*设置相机参数
set_calib_data_cam_param (CalibDataID, 0, [], StartCamParam)

*----------标定所有图片-------*
for Index := 1 to 14 by 1
dev_display (Image)
dev_disp_text ('Collect calibration data', 'window', 12, 12, 'black', [], [])
*获取标定对象，并添加到数据模型中
find_calib_object (Image, CalibDataID, 0, 0, Index, [], [])
*得到标定数据轮廓
get_calib_data_observ_contours (Contours, CalibDataID, 'marks', 0, 0, Index)
dev_set_color ('green')
dev_display (Contours)
endfor
dev_disp_text ('Calibration of the telecentric camera', 'window', 12, 12, 'black', [], [])
*计算标定数据的内部参数
calibrate_cameras (CalibDataID, Error)
*查询标定数据模型中存储的数据
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()

2

gen_rectangle1 (ModelRegion, 120, 230, 220, 445)
reduce_domain (ModelImage, ModelRegion, TemplateImage)
*创建形状模型
area_center (ModelRegion, Area, RefRow, RefCol)
*得到形状模型轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
get_shape_model_contour_ref (ModelRegion, ModelContoursTrans, ModelID)
gen_cross_contour_xld (CrossRef, RefRow, RefCol, 20, 0)
dev_display (ModelImage)
dev_set_color ('magenta')
dev_display (ModelContoursTrans)
dev_display (CrossRef)
dev_disp_text ('Contour and reference point of the shape model', 'window', 12, 12, 'black', [], [])
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()

3

4

* Find the spark plug in the image
find_shape_model (Image, ModelID, rad(-30), rad(60), 0.7, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)

vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
* Display the match
affine_trans_contour_xld (ModelContours, ModelContoursTrans, HomMat2D)
dev_set_color ('magenta')
dev_display (ModelContoursTrans)
* Transform the model reference point
affine_trans_pixel (HomMat2D, RectRelRow, RectRelCol, TransRow, TransCol)
* Display measurement rectangle
gen_rectangle2_contour_xld (MeasureRectangle, TransRow, TransCol, Angle + RectRelPhi, RectLen1, RectLen2

measure_pairs (Image, MeasureHandle, 1, 30, 'positive_strongest', 'all', Row1, Col1, Amplitude1, Row2, Col2, Amplitude2, IntraDistance, InterDistance)

get_line_of_sight ([Row1,Row2], [Col1,Col2], CamParam, X, Y, Z, XH, YH, ZH)
DX := X[1] - X[0]
DY := Y[1] - Y[0]
GapSize := sqrt(DX * DX + DY * DY)

* Specify the tolerance of the gap in meters
GapSizeMin := 0.78e-3
GapSizeMax := 0.88e-3
* Evaluate the result
if (GapSize < GapSizeMin)
* Gap size is too small
StatusText := 'Gap size too small'
dev_set_color ('red')
elseif (GapSize > GapSizeMax)
* Gap size is too large
StatusText := 'Gap size too large'
dev_set_color ('red')
else
* Gap size is within tolerances
StatusText := 'Gap size ok'
dev_set_color ('green')
endif

0 条评论

• ### 【相机标定篇】Halcon标定助手逐步使用（2）

最近一直在现场做一个比较重要的项目，也近两个月了，深入自动化行业愈久，愈发觉得此行业的艰辛，也更加希望国家在资源上能更倾向此行业。可能西方国家早已在二战...

• ### 【相机标定篇】halcon自标定（3）

在项目中，偶尔会遇到由于产品形状、拍摄位置等原因导致标定板很难放置的情况，此时可以考虑使用halcon自标定算法来标定相机。由于自标定可以在不使用用标定板情况下...

• ### 【测量篇】（1）1D测量

清朝三百年，将国人的奴性打磨的根深蒂固，伟人毛主席将反抗的火种播撒至每个人的心中，随着经济的高速发展，一些资产违背国家意愿，逐渐形成联盟，劳动力阶级一定要摆脱轮...

• ### 2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

第一步：首先建立一个MFC工程，成功后会跳出一个对话框，直接在对话框上点击右键-》点击插入ACTIVAE控件-》选择MicrosoftCommunication...

• ### 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析（附标定程序和棋盘图）

使用Opencv实现张正友法相机标定之前，有几个问题事先要确认一下，那就是相机为什么需要标定，标定需要的输入和输出分别是哪些？

• ### HDR关键技术：逆色调映射(二)

HDR技术近年来发展迅猛，在未来将会成为图像与视频领域的主流。当前HDR内容非常短缺，限制了HDR视听节目的广泛应用。逆色调映射(Inverse Tone Ma...

• ### 多相机视觉系统的坐标系统标定与统一及其应用

随着机器视觉应用的日益广泛，大幅面 多相机 视觉系统的需求越来越多，主要应用方向为大幅面高精度的定位与测量和场景拼接等。 多相机视...

• ### 机器视觉表面缺陷检测综述

中国是一个制造大国，每天都要生产大量的工业产品。用户和生产企业对产品质量的要求越来越高，除要求满足使用性能外，还要有良好的外观，即良好的表面质量。但是，在制造产...

• ### 最近做的几件事

MVC模型，把前、后以及中间控制器分离了，3样东西，分开写，Coding的时候，专注于某一个细节即可，最后再联动调试。

• ### Python基础（一）：Python简单

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言，可以应用于以下领域：