当前位置:文档之家› 摄像机标定与实物测量

摄像机标定与实物测量

南京工程学院自动化学院《机器人视觉》大作业题目:摄像机标定及单幅图像实物测量专业:机器人工程班级:机器人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.75mm3. 标定板制作:Halcon中用gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile:) 算子来制作一个标定板,参数说明如表1.1。

表1.1 标定板参数说明XNum 圆点的行数YNum 圆点的列数MarkDist 圆点中心距。

单位是mDiameterRatio 圆点直径与圆点中心距的比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()T2)针孔摄像机测量被测物在世界坐标的尺寸原理上,我们需要使用图像上某点所对应的光线与测量平面相交,因此需要定义该光线的两个点。

第一个点就是摄像机的投影中心,在摄像机坐标系中的坐标为(0,0,0)T ,第二个点的坐标我们需要将点(r,c)T 从图像坐标系转换到成像平面中。

可从下面两个式子得到。

(1-3) (1-4)为了得到该点在成像平面上对应的空间点坐标,我们选取的第二个点坐标为(u,v,f)T 。

因此,摄像机坐标系中的这条光线为:(1-5) 将摄像机坐标系转换到世界坐标系可通过下式实现: (1-6) 那么,这条光线在世界坐标系中表示为:(1-7) 其中, (1-8) (1-9) D w 表示光线的方向向量。

这时光线与测量平面z =0的交点坐标为:(1-10)三、方案及各功能模块设计 1、流程图设计P w =R -1P c -T ()=R T P c -T ()L w =O w +l I w -O w ()=O w +l D wO w =R T ((0,0,0)T -T )I w =R T ((u ,v ,f )T -T )P w =o x -o z d x /d z o y -o z d y /d z 0æèçççöø÷÷÷L c =0,0,0()T +l u ,v ,f ()T2、标定板制作输入算子命令获得:gen_caltab (7, 7, 0.00375, 0.5, 'caltab.descr', 'caltab.ps');此命令可以生成一个7*7 的点阵,30mm*30mm 的标准点阵标定板图像。

得到caltab.descr文件。

查询到摄像机单个像素元长宽为6μm,焦距为3.6mm,其中用于标定的图像直接由Image Acquisition 采集并提供,用摄像头拍摄标定板的不同姿态情况。

打开Calibration,设置参数如下图3.1图3.13、摄像机标定用摄像头拍摄不同的标定板图像,进行标定图像采集。

然后打开Calibration,导入标定图片。

如下图,并设置第一张为参考位姿。

如图3,2图3.2然后点击标定得出结果如下图3.3摄像机参数是内参,摄像机位姿是外参。

分别保存文件。

图3.3接着进行代码生成,插入代码如图3.4图3.44、物体测量打开Measure 助手,输入照片地址,这里选用雪碧图片。

并且确定内参外参。

如图4.1图4.1画出标定线如图4.2图4.2进行快速测量如图4.3可以看到最后测量结果为26.4447mm,注意取多个值计算方差。

最后生成代码。

图4.3求得雪碧最终宽度并计算方差如图4.4图4.4从图中可以看出测量值为26.41mm,方差为0.0264939。

相关主题