摄像机标定与实物测量

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京工程学院

自动化学院

《机器人视觉》大作业题目:摄像机标定及单幅图像实物测量专业:机器人工程

班级:机器人172学号:*********学生姓名:丛蔡庆

任课教师:**

成绩:

目录

一、设计任务 (3)

二、设计原理 (3)

三、方案及各功能模块设计 (6)

1 流程图设计 (6)

2 标定板制作 (7)

3 摄像机标定 (7)

4 物体测量 (9)

四、结论分析和总结 (10)

五、参考文献 (11)

附录:源程序

一、设计任务:

摄像机标定要求自制标定板,使用网络摄像机或手机摄像头进行标定。将标定的摄像机内参和外参进行保存。设计测量方案,使用标定过的摄像机对包含垂直边缘的物品(直尺刻度线,矩形物体边缘等)进行距离或边长的测量。标定过程和测量过程,均需要保持摄像机与测量平面之间的距离固定,物品高度不能过高,否则影响测量结果。给出设计的中间过程和截图以及最终测量结果,并对测量结果进行误差计算和分析。

1.系统整体方案设计,包括

(1)课题分析,设计测量方案,测量对象的确定;

(2)系统总体结构框图(或流程图)。

2.结合Halcon(或open CV)软件,写出各功能模块的实现及相应的代码。

(1)标定板制作;

(2)摄像机标定;

(3)对设计方案中垂直于测量矩形框的直边进行提取,并测量直边之间的距离,从而得到平面测量对象的尺寸

(4)对测量值与实际尺寸误差进行一定的分析和改进

(5)多次测量,计算出测量的平均值和标准差。

二、设计原理

1. 标定内容

机器视觉本质就是通过图像来获取三维世界的信息,然后基于该信息进行相应的图像处理手段,从中获取我们想要的信息。标定的过程实际是建立图像世界与三维世界位姿的关系,只有准确地建立了该关系,才能从图像准确得知三维世界的真实状态。工业相机拍摄出来的图像存在畸变,这个问题会影响到对工件定位的准确性。镜头成像的畸变分为径向畸变和切向畸变,相对切向畸变而言,径向畸变(如图1.1)对图像影响较大,而径向畸变分为枕形畸变(Pincushion Distortion)和桶形畸变(Barrel Distortion),相机标定就是对工业相机拍摄的图片畸变问题进行矫正,通过标定得出相机内参和外参,得到与工业机器人坐标系的关联。

(a)枕形畸变(b)正常图像(c)桶形畸变

图1.1 畸变类型

一个成功的标定,至少需要一个知道其精确尺寸的标定板。在标定前需要采集不同姿态的标定板图像,确保每张图像都完整的包含了标定板。标定图像的质量,很大程度上决定了标定是否能成功。

2. 标定板

标定的方法从原理上主要分为三大类:线性标定、非线性标定和二次标定。使用的标定板有棋盘格也有原点阵列。

以30*30mm 的标定板为例(如图1.2):

图1.2 标定板

黑色原点:7*7

边框长度:30*30mm

内边框长度:28.125mm*28.125mm

黑色原点半径:0.9375mm

原点中心间距:3.75mm

裁剪宽度:30.75*30.75mm

3. 标定板制作:

Halcon中用

gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile:) 算子来制作一个标定板,参数说明如表1.1。

表1.1 标定板参数说明

XNum 圆点的行数

YNum 圆点的列数

MarkDist 圆点中心距。单位是m

DiameterRatio 圆点直径与圆点中心距的比

CalTabDescrFile 标定板描述文件的文件路径(.descr)

CalTabPSFile 标定板图像文件的文件路径(.ps)

其中,.descr文件为标定板描述文件,.ps文件为标定板图形文件,可以用photoshop(PS) 打开。在实际应用中使用的标定板都是采用光刻工艺制作而成,精度能达到1um。标定板大小一般选取为相机视野大小的1/3左右是合适的。

4. 标定流程

1)定义相机内参初始值[Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, Image_Width, Image_Height] Start Cam Par := [0.016,0,0.0000074,0.0000074,326,247,652,494]

2)定义标定板描述文件

CaltabName := 'caltab_30mm.descr'//标定板描述文件,以30*30mm 的标定板为例3)创建数据模型

create_calib_data ('calibration_object', 1, 1, CalibDataID)

4)设置标定相机参数和标定板数据

set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCamPar) set_calib_data_calib_object (CalibDataID, 0, CaltabName)

5)加载所有标定图像,寻找标定板区域,将结果加载到组元中。 read_image (Image, ImgPath + 'calib_' + I$'02d') find_calib_object (Image, CalibDataID, 0, 0, I, [], [])

get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)

相机拍摄不同位姿下图片8-15张,拍摄图片时标定板尽量覆盖整个视场(标定板要根据工作距离、视场大小定制);拍摄图片上的圆直径不得小于10个像素。

6)标定相机

calibrate_cameras (CalibDataID, Errors)

7)获取标定结果

内参:get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) 外参:get_calib_data (CalibDataID, 'calib_obj_pose',[0,1],'pose',Pose)

5. 利用已经标定好参数的摄像机拍摄并测量实物

通常,只有使用多个摄像机在不同空间位置上同时拍摄同一物体的两幅或多幅图像时,才能获得无失真的测量,我们称之为立体重构。使用这种方法重构两幅图像中对应点的三维位置是可以实现的,因为由两个摄像机光心与两幅图像在成像平面上的对应点可以定义两条光线,这两条光线在三维空间中的交点就是图像中对应点的三维位置。然而,如果只有一个摄像机进行单目测量时,我们能通过将光学射线(也称为视线)与平面相交来获得被测物体的准确测量。第一种情况是使用远心镜头,第二种情况是使用针孔摄像机,此时将被测物放在一个已知平面上。实现这两种情况的前提条件是摄像机必须是事先标定过的。最简单的标定摄像机的方法是使用标准的标定板。只要在不同位置拍摄同一个标定板的多幅图片,其中一幅图像中的标定板直接放在测量平面上,就能进行内外参数的标定。

1)远心镜头测量被测物在世界坐标的尺寸

这种情况,平行投影不受深度信息的影响,不能得到物体在摄像机坐标中的z 坐标,因此只要得到物体在摄像机坐标系中x 和y 坐标,就能知道物体在世界坐标系中的尺寸,没必要将物体从摄像机坐标系转换到世界坐标系中。为了得到P c 在摄像机坐标系的坐标,首先将该点坐标从图像坐标系转换到成像平面坐标系:

(1-1)

消除径向畸变的影响,得到成像平面上未失真的坐标(u ,v ),进而计算得到P c 的坐标为 (1-2)

此方法相当于通过点u ,v ,0()T

并且与成像平面0,0,1()T

垂直的光线与平面z=0相交得到的交点

P c =x c ,y c ,z c ()T

=u ,v ,0()

T

相关文档
最新文档