halcon标定板单相机标定,并取得内参

您所在的位置:网站首页 相机模型内部参数设置在哪里 halcon标定板单相机标定,并取得内参

halcon标定板单相机标定,并取得内参

2024-07-12 16:28| 来源: 网络整理| 查看: 265

摄像机内参是什么:

在本站另一篇文章《勇哥的视觉实验:halcon的标定助手》中用助手进行了标定,其“摄像机参数”就是摄像机的内参。

“摄像机位姿”则是摄像机的外参。

image.png

引用更专业的解释如下:

摄像机内参:确定摄像机从三维空间到二维图像的投影关系。 针孔摄像机模型为6个参数(f,κ,Sx,Sy,Cx,Cy) 其中,f为焦距;(在摄像机附带的说明书中可以找到) κ表示径向畸变量级,如果κ为负值,畸变为桶型畸变,如果为正值,那畸变为枕型畸变(在标定时设置为0.0) Sx,Sy是缩放比例因子。对针孔摄像机来讲,表示图像传感器上水平和垂直方向上相邻像素之间的距离; (通过查找说明书,找到传感器尺寸比如说1/2.5、分辨率为720*480,由Diag=linch/2.5求出对角线长, 然后通过分辨率的最小整数比3:2用勾股定理计算出Width和Height, 则可得到Sx=Sy=Pitch=Width/720=Height/480) 对于远心摄像机模型,表示像素在世界坐标系中的尺寸。 Cx,Cy是图像的主点。对针孔摄像机来讲,这个点是投影中心在成像平面上的垂直投影,同时也是径向畸变的中心。 (等于图片像素宽*高的一半)

说个题外话,为什么这里说是摄像机内参,而不说是相机内参。

相机+镜头=摄像机

因为内参含有镜头的参数,当然这里我们只能说摄像机的内参。

下面的程序,跟标定助手完成的结果是一样的。

不过这个程序由图片方式调用标定板,没有实际用相机拍照。

我们可以从图片中看到标定板没有倾斜角度,标出来的结果应该不对。

9ea3EigrFc.gif

ImgPath:='3d_machine_vision/calib/' dev_close_window() dev_open_window(0,0,652,494,'black',WindowHandle) dev_update_off() dev_set_draw('margin') dev_set_line_width(3) *获得当前的系统:windows OpSystem:=environment('OS') set_display_font(WindowHandle,14,'Arial','true','false') *  * Calibrate the camera. *  *初始化相机参数:焦距,Kappa,单个像元宽,单个像元高,中心点x坐标,中心点y坐标,图像宽,图像高 StartCamPar:=[0.016,0,0.0000074,0.0000074,326,247,652,494] *建立一个CalibDataID,相当于声明一个标定的对象集合 create_calib_data('calibration_object',1,1,CalibDataID) *设置该标定对象为area_scan_division(面阵除法模型相机): *还有area_scan_polynomial(面阵多项式相机),line_scan(线阵相机),area_scan_telecentric_division(远心面阵除法模型相 *机)area_scan_telecentric_polynomial(远心面阵多项式模型相机) set_calib_data_cam_param(CalibDataID,0,'area_scan_division',StartCamPar) *设置标定板数据的路径,可以指定目录(自己做的标定板的数据) set_calib_data_calib_object(CalibDataID,0,'caltab_30mm.descr') NumImages:=10 * Note, we do not use the image from which the pose of the measurement plane can be derived for I:=1 to NumImages by 1     read_image(Image,ImgPath+'calib_'+I$'02d')     dev_display(Image)     *找到标定的框体     find_calib_object(Image,CalibDataID,0,0,I,[],[])          *得到框体的contour     get_calib_data_observ_contours(Caltab,CalibDataID,'caltab',0,0,I)     dev_set_color('green')     dev_display(Caltab) endfor *上述循环内得到的数据存储在CalibDataID这个标定模型中 calibrate_cameras(CalibDataID,Error) *获得标定数据,即标定后的相机模型内参:完成工作 get_calib_data(CalibDataID,'camera',0,'params',CamParam) * Write the internal camera parameters to a file write_cam_par(CamParam,'camera_parameters.dat') disp_message(WindowHandle,'Interior camera parameters have','window',24,12,'red','false') disp_message(WindowHandle,'been written to file','window',48,12,'red','false') clear_calib_data(CalibDataID)

--------------------- 

作者:hackpig来源:www.skcircle.com版权声明:本文为博主原创文章,转载请附上博文链接!

本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3