halcon相机标定和测量示例
Halcon算子笔记3_相机标定+矫正图像
Halcon算子笔记3_相机标定+矫正图像Map_image.hdev: 矫正图像*关闭窗口dev_close_window ()dev_close_window ()*打开指定大小、颜色背景的窗口dev_open_window (0, 0, 768/2, 576/2, 'black', WindowHandle1)dev_update_pc ('off')dev_update_window ('off')dev_update_var ('off')dev_update_time ('off')dev_set_draw ('margin')dev_set_line_width (3)** Calibrate the camera.(标定相机)步骤一** 标定板描述文件CaltabName := 'caltab_big.descr'* make sure that the file 'CaltabDescrName' is in the current directory,* the HALCONROOT/calib directory, or use an absolut path *初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576]*物体在空间坐标系中的位姿数组NStartPose := []*行角点数组NRow := []*列角点数组NCol := []*X、Y、Z从标定表文件获取计算值caltab_points (CaltabName, X, Y, Z)*创建空的图像元组gen_empty_obj (Images)*图像的数目NumImages := 10*接下来for循环,依次读取、处理NumImages张图像for I := 1 to NumImages by 1*读取图像:Image得到图像数据read_image (Image, 'calib/calib-3d-coord-'+I$'02d')*将单个Image加入元组Images中concat_obj (Images, Image, Images)*显示Imagedev_display (Image)*在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值find_caltab (Image, Caltab, CaltabName, 3, 112, 5)*设置区域颜色:绿色dev_set_color ('green')*显示图像中标定板的区域dev_display (Caltab)*(核心函数:搜寻图像的原始点)在图像中找到标定板的各个角点坐标和初始位姿find_marks_and_pose (Image, Caltab, CaltabName, StartCamPar, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose) *设置颜色:红色dev_set_color ('red')*在窗口上圆形标记角点的位置disp_circle (WindowHandle1, RCoord, CCoord, gen_tuple_const(|RCoord|,1.5))*一个图像位姿加入位姿元组NStartPose := [NStartPose,StartPose]*所有图像角点行坐标数组相连NRow := [NRow,RCoord]*所有图像角点列坐标数组相连NCol := [NCol,CCoord]endfordev_update_time ('on')disp_continue_message (WindowHandle1, 'black', 'true')stop ()** Calculate the mapping.(计算带矫正信息的图像)步骤二**(核心函数)标定相机参数,对步骤一的数据进行计算处理camera_calibration (X, Y, Z, NRow, NCol, StartCamPar, NStartPose, 'all', CamParam, NFinalPose, Errors)*生成空的对象:包含矫正映射信息的图像gen_empty_obj (Maps)*for循环一次处理一组对应的图像for NumImage := 1 to NumImages by 1* Obtain the pose of the calibration table.*获取标定出来的位姿3DPose := NFinalPose[(NumImage-1)*7:(NumImage-1)*7+6]*设置新的原始3D位姿set_origin_pose (Pose, -1.125, -1.0, 0, PoseNewOrigin)*(核心函数)生成带矫正映射信息的图像MapSinglegen_image_to_world_plane_map (MapSingle, CamParam, PoseNewOrigin, 768, 576, 900, 800, 0.0025, 'bilinear')*将单张图像加入图像元组Mapsconcat_obj (Maps, MapSingle, Maps)endfordisp_continue_message (WindowHandle1, 'black', 'true')stop ()*代码到此处:有了NumImages张标定的原图+ NumImages张带矫正映射信息的图像,*接下来While循环,一张一张的矫正图像** Map the images.(矫正图像)步骤三**窗口设置dev_open_window (0, 391, 900/2, 800/2, 'black', WindowHandle2)Button := 0NumImage := 1while (Button # 1)dev_set_window (WindowHandle1)dev_set_part (0, 0, 575, 767)dev_clear_window ()*从图像元组中选择一张图像select_obj (Images, Image, NumImage)*显示选择的图像dev_display (Image)disp_message (WindowHandle1, 'Press any mouse button to stop', 'image', -1, -1, 'black', 'true')*选择对应位置的带矫正信息的图像select_obj (Maps, MapSingle, NumImage)*(核心函数)矫正图像:原图,带矫正信息图,矫正结果图map_image (Image, MapSingle, ImageMapped)*以下为窗口、循环之类的处理,与图像处理没什么关系dev_set_window (WindowHandle2)dev_set_part (0, 0, 799, 899)dev_clear_window ()dev_display (ImageMapped)NumImage := NumImage + 1if (NumImage > NumImages)NumImage := 1endifdev_error_var (Error, 1)dev_set_check ('~give_error')get_mposition (WindowHandle1, R, C, Button)dev_error_var (Error, 0)dev_set_check ('give_error')if (Error#H_MSG_TRUE)Button := 0endifif (Button)breakendifendwhiledev_set_window (WindowHandle2) dev_close_window ()。
halcon标定后畸变校正与测量
halcon标定后畸变校正与测量这是⼀个很久以前的微博⽹友写的,现在的halcon运⾏有问题,因为已经没有parameters_image_to_world_plane_centered这个函数了,知道现在版本替换它的函数的朋友⿇烦告知⼀下,万分感谢本⽂出处:/s/blog_442bfe0e0100yjce.html#commonComment1.get_image_size( : : : , )返回图像的尺⼨。
2.parameters_image_to_world_plane_centered (CamParam, Pose, CenterRow, CenterCol, WidthMappedImage, HeightMappedImage, ScaleForCenteredImage, PoseForCenteredImage)Halcon内部程序,输出为图像的⽐率和姿态。
3.gen_image_to_world_plane_map( : : , , , , , , , : )产⽣⼀个投影映射,该映射描述图像平⾯与Z=O的世界平⾯之间的关系,输出为图像MAP,是⼀个多通道的图像包含了映射数据。
4.map_image(, : : : )利⽤映射变换校正图像,输出为矫正后的图像。
5.image_to_world_plane( : : , , , , , : )把校正后的图像转换到Z=0的世界平⾯。
6.image_points_to_world_plane( : : , , , , : , )把图像上的点转换到Z=0的世界平⾯,输出为点坐标。
* This program provides procedures for the determination of the* parameters Pose and Scale of the operators image_to_world_plane* and gen_image_to_world_plane_map.** Read the imageImgPath := '3d_machine_vision/calib/'read_image (Image, ImgPath+'caliper_01')* Set the camera parameters for the imageCamParam := [0.0160728,-631.843,7.40077e-006,7.4e-006,326.369,246.785,652,494]Pose := [-41.2272,26.763,398.682,359.655,359.202,322.648,0]* Reopen the window appropriatelyget_image_size (Image, WidthOriginalImage, HeightOriginalImage)dev_open_window_fit_image (Image, 0, 0, WidthOriginalImage, HeightOriginalImage, WindowHandle)set_display_font (WindowHandle, 14, 'mono', 'true', 'false')dev_set_color ('red')WidthMappedImage := 652HeightMappedImage := 494* Transform the image such that a given point appears in the* center of the rectified image and the the scale of the rectified image* is similar to the scale of the original image (in the surroundings* of the given point)* Define the point that will appear in the center of the rectified imagedev_display (Image)disp_message (WindowHandle, 'Define the center of the mapped image', 'window', 12, 12, 'white', 'false')get_mbutton (WindowHandle, CenterRow, CenterCol, Button)* Determine scale and pose such that the given point appears* in the center of the rectified image and that the* scale of the two images is similar (in the surroundings* of the given point).parameters_image_to_world_plane_centered (CamParam, Pose, CenterRow, CenterCol, WidthMappedImage, HeightMappedImage, ScaleForCenteredImage, PoseForCenteredImage)* Rectify the imagegen_image_to_world_plane_map (Map, CamParam, PoseForCenteredImage, WidthOriginalImage, HeightOriginalImage, WidthMappedImage, HeightMappedImage, ScaleForCenteredImage, 'bilinear')map_image (Image, Map, ImageMapped)dev_open_window_fit_image (ImageMapped, 0, 0, WidthMappedImage, HeightMappedImage, WindowHandleMapped)set_display_font (WindowHandleMapped, 14, 'mono', 'true', 'false')dev_set_color ('red')dev_display (ImageMapped)* In case, only one image has to be mapped, the operator* image_to_world_plane can be used instead of the operators* gen_image_to_world_plane_map together with map_image.image_to_world_plane (Image, ImageMapped, CamParam, PoseForCenteredImage, WidthMappedImage, HeightMappedImage, ScaleForCenteredImage, 'bilinear')* Display the center pointimage_points_to_world_plane (CamParam, PoseForCenteredImage, CenterRow, CenterCol, ScaleForCenteredImage, CenterX, CenterY) disp_cross (WindowHandleMapped, CenterY, CenterX, 6, rad(45))disp_message (WindowHandleMapped, 'The selected point appears in the center', 'window', 12, 12, 'white', 'false')disp_message (WindowHandleMapped, 'of the rectified image', 'window', 36, 12, 'white', 'false')disp_continue_message (WindowHandleMapped, 'black', 'true')stop ()** Now determine scale and pose such that the entire image* fits into the rectified image.parameters_image_to_world_plane_entire (Image, CamParam, Pose, WidthMappedImage, HeightMappedImage, ScaleForEntireImage, PoseForEntireImage)* Rectify the imageimage_to_world_plane (Image, ImageMapped, CamParam, PoseForEntireImage, WidthMappedImage, HeightMappedImage, ScaleForEntireImage, 'bilinear')dev_clear_window ()dev_display (ImageMapped)disp_message (WindowHandleMapped, 'The entire image is visible in the rectified image', 'window', -1, -1, 'white', 'false')。
基于HALCON的双目摄像机标定
基于HALCON的双目摄像机标定于春和;祁乐阳【摘要】Based on the binocular stereo vision system for the purpose of calibration. The internal and external parameters of stereo vision system of binocular camera are obtained by using HALCON calibration board and comparative experiment by software rich operator platform. The results are accurate and simple. The program is robust and efficient, and can be applied to binocular stereoscopic vision system effectively, which provides a solid foundation for 3D reconstruction of human face based on binocular stereoscopic vision.%基于对双目摄像机立体视觉系统进行标定的目的.采用HALCON标定板,通过软件丰富算子平台进行对比实验得到双目摄像机立体视觉系统的内部参数以及外部参数.算法结果准确,简单易行.其程序鲁棒性强,运算效率高,能够高效的运用到双目立体视觉系统中,为基于双目立体视觉的人脸三维重建提供了坚实的基础.【期刊名称】《电子设计工程》【年(卷),期】2017(025)019【总页数】4页(P190-193)【关键词】刚性转换;双目标定;机器视觉;HALCON标定板【作者】于春和;祁乐阳【作者单位】沈阳航空航天大学电子信息工程学院,辽宁沈阳 110136;沈阳航空航天大学电子信息工程学院,辽宁沈阳 110136【正文语种】中文【中图分类】TN391Abstract:Based on the binocular stereo vision system for the purpose of calibration.The internal and external parameters of stereo vision system of binocular camera are obtained by using HALCON calibration board and comparative experiment by software rich operator platform.The results are accurate and simple.The program is robust and efficient,and can be applied to binocular stereoscopic vision system effectively,which provides a solid foundation for 3D reconstruction of human face based on binocular stereoscopic vision.Key words:rigidity conversion;binocular calibration;machine vision;HALCON calibration plate摄像机标定是机器视觉和摄像测量领域相对基础的工作,同时也是最复杂、困难的工作。
Halcon相机标定简介
Halcon相机标定简介相机标定简介⾸先镜头有畸变,也就是说照出的图像与实际不符产⽣了形变。
即使⼯业镜头也是有千分之⼏的畸变率的。
上个图告诉⼤家畸变这个图⾥,第⼀个图就是我们相机下的真实的形状,后边两个就是照出来有畸变的图⽚。
其次镜头与相机⽆论你的机械结构精度多⾼,也不容易或者说没办法将相机安装的特别正,那相机安装不正也是会导致误差的。
⼤家想知道具体数学模型的话可以搜⼀下相机标定的理论⽅⾯的知识,我侧重怎么做。
标定就是把上述两个东西转化成正常的。
⽆论是在图像测量或者机器视觉应⽤中,相机参数的标定都是⾮常关键的环节,其标定结果的精度及算法的稳定性直接影响相机⼯作产⽣结果的准确性。
深度说明1、相机标定参数介绍内参:确定摄像机从三维空间到⼆维空间的投影关系。
针孔相机(FA镜头相机)模型为6个参数(f,kSx,Sy,Cx,Cy);远⼼镜头相机模型为5个参数(f,Sx,Sy,Cx,Cy);线阵相机为11个参数(f,k,Sx,Sy,Cx,Cy,Width,Highth,Vx,Vy,Vz)。
其中:f为焦距;k表⽰径向畸变量级。
如果k为负值,畸变为桶形畸变,如果为正值,那么畸变为枕形畸变。
Sx,Sy是缩放⽐例因⼦。
对于相机(FA镜头)表⽰图像传感器⽔平和垂直⽅向上相邻像素之间的距离,初始值与真实值越接近计算速度越快。
对于远⼼摄像机模型,表⽰像素在世界坐标系中的尺⼨。
Cx,Cy是图像的主点,对于相机,这个点是投影中⼼在成像平⾯上的垂直投影,同时也是径向畸变的中⼼。
对于远⼼摄像机模型,只表⽰畸变的中⼼。
Vx,Vy,Vz:线阵相机必须与被拍摄物体之间有相对移动才能拍摄到⼀幅有⽤的图像。
这是运动向量。
Sx,Sy对于线阵相机是相邻像元的⽔平和垂直距离。
2、标定板详细介绍问题1:halcon是否只能使⽤halcon专⽤的标定板?halcon提供了简便、精准的标定算⼦与标定助⼿,这在实际使⽤中极⼤地⽅便了使⽤者在halcon中有两种标定⽅式:halcon⾃带例程中出现的,⽤halcon定义的标定板,如下图:⽤户⾃定义标定板,⽤户可以制作任何形状、形式的标定板,如下图:所以,halcon并⾮只能使⽤专⽤标定板,也可以使⽤⾃定义标定板就可以进⾏标定。
halcon相机标定方法
halcon相机标定方法【实用版3篇】《halcon相机标定方法》篇1Halcon相机标定方法可以采用以下步骤:1. 确定畸变系数。
畸变系数表示相机成像过程中的畸变程度,其值介于0和0.00001之间。
在标定过程中,需要确定畸变系数。
2. 确定标定板。
标定板是用于相机标定的已知几何信息的板状物体。
标定板通常由一系列等边直角三角形组成,每条边上都有四个角,共12个点。
这些角可以用于计算相机的内部参数和畸变系数。
3. 获取标定板图像。
获取标定板图像并将其输入到Halcon中。
4. 提取角点信息。
使用Halcon中的“find_features”函数来提取标定板图像中的角点信息。
该函数将自动检测图像中的角点,并返回其坐标和类型。
5. 计算相机内部参数。
使用提取的角点信息,结合Halcon中的“find_feature_points”函数和“find_feature_matches”函数,可以计算相机的内部参数和畸变系数。
6. 验证标定结果。
为了验证标定结果,可以使用Halcon中的“check_calib”函数来检查相机内部参数和畸变系数是否正确。
以上是Halcon相机标定的基本步骤。
《halcon相机标定方法》篇2Halcon相机标定方法有:1. 传统六点标定法。
这种方法是通过一个平面上的六个点的位置来确定整个平面的几何参数,进而求得相机的内参数。
2. 棋盘格标定法。
棋盘格标定法是通过棋盘格上两组对应点的几何约束,解算出相机的畸变系数。
3. 标定板标定法。
《halcon相机标定方法》篇3Halcon相机标定方法有以下几个步骤:1. 建立棋盘格点在Halcon中,建立棋盘格点需要指定格点在图像中的实际坐标,这样可以正确计算出畸变系数。
如果只指定棋盘格在图像中的尺寸和数量,那么在畸变计算时会返回默认的(通常是不可靠的)畸变系数。
建立棋盘格点的方法如下:`2x2 to picture :诤友棋盘格(squareSize:[20,20], gridNum:25)`2. 确定相机位置和方向这里有两种方法:方法一:建立一个动态的目标,不断改变目标与相机的距离和角度,然后计算目标的成像位置,从而得到相机的位置和方向。
Halcon单相机标定板标定
Halcon单相机标定板标定⾸先得到相机的内参gen_cam_par_area_scan_division (0.012, 0, 0.00000375, 0.00000375, 640, 480, 1280, 960, StartCamPar)普通的畸变:’area_scan_division’ [’area_scan_division’, Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight⾼精度畸变(多项式⼦):’area_scan_polynomial’ [’area_scan_polynomial’, Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight然后建⽴标定对象:create_calib_data ('calibration_object', 1, 1, CalibDataID)//建⽴标定对象set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar)//设置相机的参数set_calib_data_calib_object (CalibDataID, 0, 'calplate_80mm.cpd')//设置标定板的⽂件//查找标定板NumImages := 7for I := 1 to NumImages by 1read_image (Image, ImgPath + 'calib_image_' + I$'02d')dev_display (Image)find_calib_object (Image, CalibDataID, 0, 0, I, [], [])get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPose)//获取标定板的位姿dev_set_color ('green')dev_display (Caltab)dev_set_color ('red')disp_circle (WindowHandle, Row, Column, gen_tuple_const(|Row|,1.5))endfor//纠正实际世界坐标位姿set_origin_pose (Pose, 0, 0, 0.002, Pose)//由于标定板的厚度是0.02,所以Z平移到相机坐标需要加上0.02//标定相机calibrate_cameras (CalibDataID, Errors)//标定相机get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)//得到相机标定后的相机内参,这个内参包含了畸变参数get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', Pose)//以第⼀张图作为参考平⾯,得到参考平⾯的坐标位姿//坐标转换image_points_to_world_plane (CamParam, Pose, Row, Col, 'mm', X1, Y1)//将相机平⾯映射到实际坐标位置位姿:描述是世界坐标转换到相机坐标的旋转平移参数,也就是该点在相机坐标系下的位姿。
基于Halcon的单目相机标定方法与测量实验
基于Halcon的单目相机标定方法与测量实验
李晓晓;吴昊荣;孙付春;杨涛
【期刊名称】《山东工业技术》
【年(卷),期】2022()5
【摘要】机器视觉已经在现代工业自动化生产中得到了广泛应用,尤其是在三维测量领域。
物体三维空间与二维图像间的关系求解离不开相机标定,尤其是相机标定结果的优劣直接决定了机器视觉的测量精度。
通过搭建单目相机视觉系统实验平台,先分析了相机标定的工作原理,再利用Halcon软件的标定助手功能对型号为
GB050-2-7×7的圆点标定板进行相机标定,获得了相机的内参和外参。
在进一步测量实验中验证了单个特征圆点测量偏差为0.03862 mm、多个特征圆点测量平均偏差为0.05655 mm,二者测量精度都高于0.1 mm,说明了利用机器视觉进行测量能够满足常用精度需求。
【总页数】5页(P8-12)
【作者】李晓晓;吴昊荣;孙付春;杨涛
【作者单位】成都大学机械工程学院;成都大学电子信息与电气工程学院;成都农业科技职业学院机电信息学院
【正文语种】中文
【中图分类】TP249
【相关文献】
1.基于天牛须搜索算法的单目相机标定方法
2.基于稀疏字典学习的单目相机标定方法
3.基于改进粒子群算法的单目相机标定算法
4.基于Halcon的单目相机标定案例实现
5.基于Halcon深度学习和线扫相机标定的闸片剩余厚度测量
因版权原因,仅展示原文概要,查看原文内容请购买。
halcon标定例子
halcon标定例子Halcon标定是一种用于机器视觉系统中相机和图像采集设备的校准方法。
通过标定,可以获得相机的内部参数和外部参数,从而提高图像处理和计算机视觉系统的精度和稳定性。
下面是十个关于Halcon标定的例子:1. Halcon标定的基本原理Halcon标定是通过采集一系列已知位置和姿态的标定板图像,从而计算出相机的内部参数和外部参数。
这些参数可以用于图像校正、三维重建等应用。
2. Halcon标定的步骤Halcon标定的主要步骤包括:选择标定板、采集标定图像、提取标定板角点、计算相机参数、优化标定结果等。
3. Halcon标定的精度评估Halcon标定的精度可以通过重投影误差来评估,即将标定板上的角点投影到图像上,然后计算投影点与实际角点之间的距离。
4. Halcon标定的误差来源Halcon标定的误差来源主要包括相机畸变、标定板姿态误差、标定板角点检测误差等。
这些误差会影响标定结果的精度。
5. Halcon标定的应用场景Halcon标定广泛应用于机器视觉系统中的目标检测、定位、测量等任务。
通过标定,可以提高系统的测量精度和稳定性。
6. Halcon标定的优化方法Halcon标定可以通过优化算法来提高标定结果的精度。
常用的优化方法包括非线性最小二乘法、Bundle Adjustment等。
7. Halcon标定的注意事项在进行Halcon标定时,需要注意选择合适的标定板、保证标定板的平整度、正确设置相机参数等。
8. Halcon标定的挑战和解决方案Halcon标定在实际应用中可能面临光照变化、相机运动等挑战。
针对这些问题,可以采用多视角标定、动态标定等方法来解决。
9. Halcon标定的未来发展趋势随着机器视觉技术的不断发展,Halcon标定也在不断演进。
未来的发展趋势包括更精确的标定方法、更高效的标定算法等。
10. Halcon标定的局限性虽然Halcon标定可以提高机器视觉系统的精度和稳定性,但仍然存在一些局限性,如对标定板的要求较高、对标定图像的要求较严格等。
halcon摄像机标定
基于HALCON的双目立体视觉系统实现摘要双目立体视觉的研究一直是机器视觉中的热点和难点。
使用双目立体视觉系统可以确定任意物体的三维轮廓,并且可以得到轮廓上任意点的三维坐标。
因此双目立体视觉系统可以应用在多个领域。
本文将主要介绍如何基于HALCON实现双目立体视觉系统,以及立体视觉的基本理论、方法和相关技术,为搭建双目立体视觉系统和提高算法效率提供了参考。
关键词双目视觉三维重建立体匹配摄像机标定视差双目立体视觉是机器视觉的一种重要形式,它是基于视差原理并由多幅图像获取物体三维几何信息的方法。
双目立体视觉系统一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得被测物的两幅数字图像,并基于视差原理恢复出物体三维几何信息,重建物体三维轮廓及位置。
双目立体视觉系统在机器视觉领域有着广泛的应用前景。
HALCON是在世界范围内广泛使用的机器视觉软件。
它拥有满足您各类机器视觉应用需求的完善的开发库。
HALCON也包含Blob分析、形态学、模式识别、测量、三维摄像机定标、双目立体视觉等杰出的高级算法。
HALCON支持Linux和Windows,并且可以通过C、C++、C#、Visual Basic和Delphi语言访问。
另外HALCON与硬件无关,支持大多数图像采集卡及带有DirectShow和IEEE 1394驱动的采集设备,用户可以利用其开放式结构快速开发图像处理和机器视觉应用软件。
一.双目立体视觉相关基本理论介绍1.1 双目立体视觉原理双目立体视觉三维测量是基于视差原理,图1所示为简单的平视双目立体成像原理图,两摄像机的投影中心的连线的距离,即基线距为b。
摄像机坐标系的原点在摄像机镜头的光心处,坐标系如图1所示。
事实上摄像机的成像平面在镜头的光心后,图1中将左右成像平面绘制在镜头的光心前f处,这个虚拟的图像平面坐标系O1uv的u轴和v轴与和摄像机坐标系的x轴和y轴方向一致,这样可以简化计算过程。
halcon单相机标定详细说明
相机标定1 相机标定基本原理1.1 相机成像模型目前大多数相机模型都是基于针孔成像原理建立的,因为针孔成像原理简单,并且能满足建模的要求。
除此之外还有基于应用歪斜光线追踪法和近轴光线追踪法的成像模型[1]。
针孔成像虽然已经展示出了相机的成像原理,但是由于针孔成像是理想的物理模型,没有考虑相机本身的尺寸、镜头与相机轴心的偏斜等因素的影响,因此精度很低,不能满足工业机器视觉的要求。
为了使相机模型能高精度的反应相机的实际成像过程,需要再针孔成像模型的基础上考虑镜头畸变等的因素。
图1 针孔成像基于针孔成像原理建立的相机的成像模型,如下图所示。
在相机的成像模型中,包含有几个坐标系分别是世界坐标系、相机坐标系、图像坐标系,相机的成像过程的数学模型就是目标点在这几个坐标系中的转化过程。
图2 针孔成像模型(1)世界坐标系(X w,Y w,Z w),就是现实坐标系,是实际物体在现实世界中的数学描述,是一个三维的坐标空间。
(2)摄像机坐标系(X c, Y c),以针孔相机模型的聚焦中心为原点,以摄像机光学轴线为Z c轴(3)图像坐标系:分为图像像素坐标系和图像物理坐标系为了便于数学描述将图像平面移动到针孔与世界坐标系之间。
如下图所示。
图3 将相机平面移至针孔与目标物体之间后的模型1.2 坐标系间转换从世界坐标系到相机坐标系:P(X c ,Y c ,Z c )=R(α,β,γ)∗P(X w ,Y w ,Z w )+T每一个世界坐标的对象都可以通过旋转和平移转移到相机坐标系上。
将目标点旋转θ角度,等价于将坐标系方向旋转θ。
如下图所示,是二维坐标的旋转变换,对于三维坐标而言,旋转中绕某一个轴旋转,原理实际与二维坐标旋转相同。
如果,世界坐标分别绕X ,Y 和Z 轴旋转α,β,γ,那么旋转矩阵分别为R (α),R (β),R (γ)图4 坐标旋转原理R (α)=[1000cosα−sinα0sinαcosα] (1-1) R (β)=[cosβ0sinβ010−sinβ0cosβ] (1-2)R (γ)=[cosγsinγ0−sinγcosγ0001] (1-3)总的旋转矩阵就是三者的乘积:R(α,β,γ)=R (α)∗R (β)∗R(γ)平移矩阵T =(t x ,t y ,t z ),t x ,t y ,t z 是世界坐标系原点与摄相机坐标系原点之间的差值。
HALCON编程及工程应用第11章 HALCON标定方法图文模板
成像平面上的投影点(点q)的变化过程
上图是将相机平面移至针孔与目标物体之间后的模型示意 图,描述的是在这个移动过程中,成像平面上的投影点(点q) 的变化情况。
根据空间一点成像到图像平面上的路线,先由世界坐标系变 换到相机坐标系,然后又由相机坐标系变换到成像坐标系,但 是这个过程有畸变,需要进行变换处理,再由成像平面坐标系 HA变LC换ON到编图程像基像础素与坐工标程系应,用中间大致分为以下几个步骤:
的相机成像模型。在相机的 成像模型中,包含有几个坐 标系:世界坐标系、相机坐 标系、图像坐标系。相机成 像过程的数学模型就是目标 点在这几个坐标系中的转化 过程。
HALCON编程基础与工程应用
三种坐标系定义
在计算机视觉中常采用右手定则来定义上图中的坐标系。图中
存在三个不同层次坐标系,以下是对这三种坐标系的定义。 1.世界坐标系(Xw,Yw,Zw) 就是现实坐标系,或全局坐标系,它是客观世界的绝对坐标, 由用户任意定义的三维空间坐标系,一般的3D场景用的就是这 种坐标(HALCON标定中以标定板为参考坐标系基准)。 2.相机坐标系(Xc,Yc) 以小孔相机模型针孔平面上的聚焦中心为原点,以相机光轴为 Zc构成三维坐标系,其中Xc、Yc与成像平面坐标系平行。 3.图像坐标系:分为成像平面坐标系和图像像素坐标系。 成像平面坐标系(x,y):其原点为透镜光轴与成像平面交点, X、Y轴分别平行于相机坐标系Xc轴和Yc轴,是平面直角坐标系, 单位mm。 图像像素坐标系(u,v):固定在图像上的以像素为单位的平 面直角坐标系,其原点位于图像左上角,其横纵两轴(对于数 HA字LCO图N编像程,基是础行与和工列程)应分用别平行于成像平面坐标系的横、纵坐标
图像像素坐标系的转化关系
HALCON编程基础与工程应用
基于HALCON软件的摄像机标定的研究报告
基于HALCON软件的摄像机标定的研究报告摄像机标定是计算机视觉中最基础而又最重要的问题之一,通过标定可以实现摄像机畸变矫正、三维重建、轨迹跟踪等诸多操作。
HALCON是一款流行的计算机视觉和机器视觉开发工具,其自带的摄像机标定模块可以实现对相机内外部参数的计算和优化,并可生成标定文件以供后续操作使用。
本文将介绍HALCON软件的摄像机标定原理和流程,并使用实验数据进行验证。
一、HALCON摄像机标定原理HALCON摄像机标定基于Perspective Projection Model(透视投影模型),即传统的针孔相机模型。
根据这个模型,每个点在图像平面上的位置可以用其在三维空间中的坐标(x,y,z)和摄像机参数(focal length、principal point、radial distortion、tangential distortion等)计算得出。
因此,摄像机标定的主要目的是测量这些摄像机参数,以实现对图像的畸变矫正。
二、HALCON摄像机标定流程HALCON摄像机标定流程包含以下几个步骤:1. 准备标定板:使用一张精确已知的标定板(如棋盘格)作为标定物体。
标定板上应该有一定数量的格子,并且格线应该较为清晰,以便识别。
2. 拍摄标定板照片:摄像机需要从至少两个不同角度拍摄标定板的照片,以获得足够的信息来计算摄像机参数。
拍摄时应注意保持标定板与摄像机位置、光照等条件的一致性。
3. 提取标定板角点:使用HALCON提供的Corner Detection(角点检测)算法,对标定板照片中的角点进行提取。
提取的角点应该较为准确,并尽可能地覆盖整个标定板。
4. 生成初始参数:对提取的角点进行3D-to-2D转换,生成摄像机的初始内外部参数。
这些参数可以作为优化算法的初始值。
5. 优化参数:使用HALCON自带的Optimize Calibration Object Parameters(标定参数优化)算法,对摄像机内外部参数进行优化。
halcon 单目相机 标定例程
HALCON是一个强大的机器视觉软件,它支持各种相机的标定。
单目相机标定的主要目的是完成像素坐标到世界坐标之间的转换。
此外,标定还能帮助我们进行畸变矫正和一维二维图像测量,因为相机成像后往往会产生畸变和缩放。
在HALCON中,你可以使用标定助手来完成单相机的标定。
具体的步骤如下:
1. 打开HALCON并新建一个程序。
2. 在程序编辑中输入算子gen_caltab,然后右击打开算子窗口,输入相关参数,点击确定。
这一步会生成两个文件,一个是后缀为.descr的标定板描述文件,另一个是标定板的图像文件。
3. 打开助手里的标定助手。
4. 进入到标定助手界面,更改描述文件、摄像机模型以及相机相关参数。
5. 点击标定选项卡,然后点击图像采集助手,会立刻弹出图像采集助手对话框(如果之前打开过图像采集助手,在这里就不会弹出),接下里进行相机的连接。
点击自动检测接口,可以选择halcon自带的接口或者是相机的接口。
通过以上步骤,你便可以使用HALCON对单目相机进行标定了。
请注意,这只是一个基本流程,实际操作可能需要根据你的具体需求和设备进行调整。
利用Halcon进行单目标定
利用Halcon进行单目标定楼主#更多•只看楼主倒序阅读发布于:2020-01-23 10:12摄像机标定之前,首先要确定相机和镜头的参数,参考对应说明书,查找IMAGING SOUR CE 31BU03相机的参数如下:分辨率1024*768;格式1/3’’;像素尺寸,水平4.65um,垂直4.65um;两个镜头是computar工业自动化镜头,其参数分别是:①焦距5mm,F1.4,尺寸1/2’’,②焦距12mm,F1.4,尺寸2/3’’。
相机和镜头参数作为标定过程中算子StartCa mPar的初值。
标定过程首先,创建标定数据模型,使用算子create_calib_data,实例中为create_calib_data ('cali bration_object', 1, 1, CalibDataID),该算子是为了创建标定数据模型,即标定的数据将存放于CalibDataID中。
其次,设定摄像机的初始化参数,即第一段所提及。
算子为set_calib_data_cam_param (C alibDataID, 0, 'area_scan_division', StartCamPar)。
第三步,描述标定板,,这里标定板名称CaltabName有两种途径获取,使用算子set_calib_data_calib_object (CalibDataID, 0,CaltabName)。
一种途径是直接调用Halcon自带的描述文件(.descr),另一种是通过算子gen_caltab自制标定板,产生描述文件。
标定板描述文件中的标定板信息必须与标定过程中使用的标定板规格、尺寸一致。
第四步,开始标定。
其中又分为两部分,一是找到标定板,二是找到标定点及其位置。
使用算子为find_caltab (Image, Caltab, CaltabName, SizeGauss,MarkThresh, MinDiamMarks)和find_marks_and_pose (Image, Caltab,CaltabName, StartCamPar, StartThresh, Delta Thresh, MinThresh, Alpha,MinContLength, MaxDiamMarks, RCoord, CCoord, StartPose)。
halcon九点标定例程 -回复
halcon九点标定例程-回复Halcon九点标定例程是一种常用的机器视觉算法,用于自动化系统中对相机进行标定。
相机标定是指确定相机内部参数和外部参数的过程,而九点标定法是一种简单且有效的相机标定算法。
本文将以九点标定例程为主题,一步一步回答相关问题,并解释其原理和应用。
第一步:引言和背景知识介绍(200-250字)相机标定在机器视觉系统中扮演着重要角色,可以提供准确的图像测量和三维重建结果。
Halcon是一款流行的机器视觉软件,提供了丰富的相机标定工具和算法。
九点标定法是Halcon中一种常用的相机标定算法,其原理基于相机的投影模型和校准板上已知的特征点。
通过测量这些已知特征点在图像中的位置,我们可以计算相机的内部参数(例如焦距、主点等)和外部参数(例如相机的旋转和平移)。
本文将详细介绍Halcon九点标定例程,并给出相应的代码示例。
第二步:九点标定原理简述(300-350字)九点标定法基于一个简单的投影模型,该模型假设相机内部参数和外部参数对于所有图像均保持不变。
在校准板上标记九个已知的特征点,例如角点或圆心。
当我们用相机拍摄校准板时,这些特征点在图像上会形成相应的图案。
利用这些已知的特征点和其在图像中的位置,我们可以推导出相机的内部参数和外部参数。
具体而言,根据相机拍摄的图像,我们可以提取出各个特征点的像素坐标。
通过将像素坐标转换为相机坐标系或世界坐标系中的坐标,我们可以建立像素坐标与相机坐标之间的对应关系。
然后,利用这些对应关系,我们可以计算出相机的内部参数和外部参数。
第三步:九点标定例程的步骤介绍(400-450字)Halcon九点标定例程的主要步骤如下:1. 准备一块校准板,并在其上标记九个已知特征点。
这些特征点可以是标定板的角点或圆心。
2. 使用Halcon的图像采集工具捕获多张校准板的图像。
3. 对每一张图像,使用Halcon的图像处理工具提取出标定板上已知特征点的像素坐标。
4. 构建像素坐标和相机坐标之间的对应关系。
Halcon 摄像机标定流程
使用halcon相机标定初始值确定富士伺服富士伺服初始参数是0.0195,注意halcon里单位是m k是畸变系数,可以初始为0 sx和sy是相邻像元的水平和垂直距离,1/4"可以查得分别宽和高尺寸是3.2和2.4mm,用320×240去除,得到sx和sy分别是0.01mm,那么应该初始为sx=1.0e-005和sy=1.0e-005,Cx和Cy分别是图像中心点行和列坐标,可以初始化为160和120,最后两个参数是ImageWidth和ImageHeight直接就用320和240。
Halcon 摄像机标定流程摄像机分两种,一种是面扫描摄像机(Area Scan Camera),一种是线扫描摄像机(Line Scan Camera)。
准确来说,叫摄像机系统比较正确。
所谓的面扫描摄像系统是指可以通过单纯曝光取得面积影像,而线扫描摄像机,必须利用运动速度才能取得影像。
两种不同的摄像系统由于成像的过程有区别,所以标定的过程也有区别,这里仅讨论面扫描摄像系统。
流程如下:1、初始摄像机参数:startCamPar:=[f,k,Sx,Sy,Cx,Cy,NumCol,NumRow]f 焦距k 初始为0.0Sx 两个相邻像素点的水平距离Sy 两个相邻像素点的垂直距离Cx、Cy 图像中心点的位置NumCol NumRow图像长和宽2、caltab_points读取标定板描述文件里面描述的点到X[],Y[],z[],描述文件由gen_caltab生成。
3、fin_caltab找到标定板的位置4、find_marks_and_pose 输出标定点的位置和外参startpose5、camera_calibration输出内参和所有外部参数到第五步时,工作已经完成了一半,计算出各个参数后可以用map_image来还原形变的图像或者用坐标转换参数将坐标转换到世界坐标中。
Halcon学习(22)摄像机标定(函数详解)
Halcon学习(二十二)摄像机标定(函数详解)基于halcon摄像机标定(函数详解)作者:骑蚂蚁上高速本文为作者骑蚂蚁上高速所写。
如有问题,可以留言。
希望大家多多指点。
摄像机标定程序:注意:E:/calibration_image :为标定图像文件路径'E:/calibration_description/caltab_123mm.descr:为标定描述文件路径*作者:骑蚂蚁上高速*程序开始list_files ('E:/calibration_image', 'files', ImageFiles)TmpCtrl_AllMarkRows := []TmpCtrl_AllMarkColumns := []TmpCtrl_StartPoses := []TmpCtrl_ReferenceIndex := 0StartParameters := [0.008,0,5.2e-006,5.2e-006,640,512,1280,1024]for Index := 0 to |ImageFiles|-1 by 1read_image (Image, ImageFiles[Index])find_caltab (Image, TmpObj_PlateRegion, 'E:/calibration_description/caltab_123mm.descr', 3, 112, 5)find_marks_and_pose (Image, TmpObj_PlateRegion, 'E:/calibration_description/caltab_123mm.descr', StartParameters, 128, 10, 18, 0.9, 15, 100, TmpCtrl_MarkRows, TmpCtrl_MarkColumns, TmpCtrl_EstimatedPose)TmpCtrl_AllMarkRows := [TmpCtrl_AllMarkRows, TmpCtrl_MarkRows]TmpCtrl_AllMarkColumns := [TmpCtrl_AllMarkColumns, TmpCtrl_MarkColumns]TmpCtrl_StartPoses := [TmpCtrl_StartPoses, TmpCtrl_EstimatedPose]endforcaltab_points ('E:/calibration_description/caltab_123mm.descr', TmpCtrl_X, TmpCtrl_Y, TmpCtrl_Z)camera_calibration (TmpCtrl_X, TmpCtrl_Y, TmpCtrl_Z, TmpCtrl_AllMarkRows, TmpCtrl_AllMarkColumns, StartParameters, TmpCtrl_StartPoses, 'all', CameraParameters, TmpCtrl_FinalPoses, TmpCtrl_Errors)tuple_select_range (TmpCtrl_FinalPoses, 7*TmpCtrl_ReferenceIndex, 7*TmpCtrl_ReferenceIndex + 6, CameraPose)set_origin_pose (CameraPose, 0.0, 0.0, 0.001, CameraPose)stop ()一、读入图像,函数如下list_files ('E:/calibration_image', 'files', ImageFiles)for Index := 0 to |ImageFiles|-1 by 1read_image(Image, ImageFiles[Index])endfor注释:'E:/calibration_image':为图像路径,图像文件索引是从0开始的,所以|ImageFiles|(文件数量)减去1。
HALCON数字图像处理-第11章 标定
一个轴旋转,R原(理)、与R(二)、维R坐( 标) 旋转相同。如果世界坐标分 别绕 X、Y 和 Z轴旋转α、β、γ,那么旋转矩阵分别
为
。
HALCON数字图像处理
x' cos sin x
y'
s in
c os
y
1 R( ) 0
0
0 c os sin
0
sin
cos
cos 0 sin
(2)方法二:用HALCON软件自动生成的.descr文件来制作 标定板。 打开HALCON,输入算子gen_caltab,打开如图11-10所示的 算子窗口,生成一个.descr的文件,点击打开文件夹,会看 到.descr文件,然后用写字板打开(注意要用写字板,记事 本打开会有一些数据不可见)。
框线
宽为一个圆点半径(0.9375)
黑色圆点半径:0.9375mm
圆点中心间距:3.75mm
裁剪宽度:30.75mm*30.75mm ,即由黑色边框
向外延伸0.375mm
HALCON数字图像处边理角:由黑色外边框向内缩进一个
3、生成标定板
(1)方法一:用HALCON软件自动生成的.ps文件来制作标定板 这个也是最简单有效的方法。打开HALCON 软件,调用算子: gen_caltab( : :XNum,YNum,MarkDist,DiameterRatio,CalTabDe scrFile,CalTabPSFile : ),具体参数如下: XNum:每行黑色标志圆点的数量; YNum:每列黑色标志圆点的数量; MarkDist :两个就近黑色圆点中心之间的距离; DiameterRatio:黑色圆点半径与圆点中心距离的比值; CalTabDescrFile: 标定板描述文件的文件路径(.descr标定板 描述文件); CalTabPSFile:标定板图像文件的文件路径(.ps标定板图形文 件)。 例H:AL生CO成N数一字个图30像*3处0的理标准标定板的HALCON源代码:
HALCON相机内外参标定
HALCON相机内外参标定**********************************相机内外参标定步骤****************************************1.caltab_points:从标定板中读取marks中⼼坐标,该坐标值是标定板坐标系统⾥的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。
该算⼦控制输出为标定板中⼼3D坐标。
2.create_calib_data:创建Halcon标定数据模型。
输出⼀个输出数据模型句柄。
3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。
设置索引,类型,以及相机的原始内参数等。
4.set_calib_data_calib_object:在标定模型中设定标定对象。
设定标定对象句柄索引,标定板坐标点储存地址。
5.find_caltab:分割出图像中的标准标定板区域。
输出为标准的标定区域,控制6.find_marks_and_pose:抽取标定点并计算相机的内参数。
输出MARKS坐标数组,以及估算的相机外参数。
即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。
7.set_calib_data_observ_points(:: CalibDataID, CameraIdx, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose: )收集算⼦6的标定数据,将标定数据储存在标定数据模型中。
输⼊控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,⾏列坐标,位姿。
8.calibrate_cameras( : : CalibDataID: Error) 标定⼀台或多台相机,依据CalibDataID中的数据。
控制输出平均误差。
9.get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName: DataValue) 获得标定数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Halcon单相机标定和测量示例相机标定有很多方式:九点标定法、棋盘格标定法、圆形阵列标定法;本次采用圆形阵列标定法。
1Halcon相机标定
1.1标定板描述文件编制
此次相机标定采用的是网购的标定板(直接在万能的某宝搜halcon标定板),如图1。
采购的时候卖家会提供标定板的相应参数,如图2。
图1标定板
图 2 标定板参数
用halcon标定助手标定的时候需要用到标定板的描述文件,此文件可以用gen_caltab算子自己编制。
如下为函数说明:gen_caltab( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 函数说明:创建一个标定文件和相应的脚本文件。
函数参数:
Xnum:输入X方向标记(圆点)的数量,Xnum>1;
Ynum:输入Y方向标记(圆点)的数量,Ynum>1;
MarkDist:标记圆圆心间距离,单位“m”;(我看过一个资料翻译为标记点大小,差点被坑死)
DiameterRatio:两标记点距离和标记直径的比值,默认:0.5。
0<DiameterRatio<1.0;
CalPlateDescr:输入要保存的标定文件(此文件保存路径在算子窗口可更改),默认值: 'caltab.descr',
参考: 'caltab.descr', 'caltab_100mm.descr', 'caltab_10mm.descr', 'caltab_200mm.descr', 'caltab_30mm.descr';
CalPlatePSFile :标定板图像文件的文件路径(此文件保存路径在算子窗口可更改),默认: 'caltab.ps',后缀:ps。
此算子“XNum, YNum, MarkDist, DiameterRatio”这四个参数根据图2所示的标定板参数设置。
图3中可设置CalPlateDescr, CalPlatePSFile 文件保存目录。
图 3 gen_caltab算子
完成后最好将'caltab.descr'拷贝到C:\Program Files\MVTec\HALCON-18.05-Progress\calib文件下,以方便后面调用。
1.2相机参数标定
此处通过HALCON标定助手标定。
标定助手打开如下:
图 4 标定助手
标定参数设置如下。
描述文件是第一步编制的标定板描述文件,像元宽高可查相机参数,焦距为镜头参数。
图 5 标定参数设置
此处通过加载的方式采用采集好的图像标定,没有实时采集。
可能会出现提取标志点失败的问题,可调整参数采集尝试。
(尝试多次若发现始终错误,可回到上一步查一下标定板描述文件有没有调用错误!!!若调用错误,没法识别或者我们标定的结果会出错!!!!)
图 6 标定图像加载1
图7 标定图像加载2
当图像加载完毕,“标定”按钮显示可选时即可点击标定。
此次我们用了11张图标定,但是按照理论最好12张以上。
有时会提示各种图像品质问题,此时尽量调整图像,实在调整不好可忽略。
下图为点击“标定”按钮后的标定结果,摄像机参数为相机内参,摄像机位姿为相机外参,此两个参数是可以单独保存。
图8下图为保存的两个相机内外参,“.cal”的为相机内参,“.dat”的为相机外参。
图8 标定结果
如下图所示,可以导出标定函数和标定数据。
标定函数是通过代码的形式将标定过程重复,一般也没有意义。
导出标定数据主要是两部分:CameraParameters(相机内参)和CameraPose(相机外参),如图9下。
图9 参数导出
以上标定工作完成。
2图像尺寸测量
2.1测量助手测量
打开测量助手。
图10 打开测量助手
此处以测量图像文件为示例说明。
选择要测量的图像,然后选择上一步标定生成的相机内参和相机外参文件。
图11 测量助手图像参数输入
之后,通过划线选取要测量的基线,包括圆弧基线和直线基线。
如图先绘制基线然后右键单击即可确认(基线一定不要太长,够用就行,因为太长会识别出很多干扰边缘)。
选择是否勾选“将边缘组成边缘对”。
再之后通过调整最小边缘幅度、平滑、ROI宽来选取要测量的边缘。
之后,查看测量结果。