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


摄像机内参是什么:

在本站另一篇文章《勇哥的视觉实验: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,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864