halcon算子 calibrate_cameras

calibrate_cameras

名称

calibrate_cameras —通过同时最小化过程确定所有相机参数。

签名

calibrate_cameras(::CalibDataID错误

描述

操作员calibrate_cameras计算CalibDataID中指定的校准数据模型的内部和外部摄像机参数 有关摄像机参数的详细说明,请参见“摄像机参数”一节。

校准数据模型描述一个或多个摄像机的设置,并在创建数据模型时指定。有关详细信息,请参见“准备校准输入数据”部分。

优化的反投影的均方根误差(RMSE)以误差(以像素为单位)返回该错误一般说明优化是否成功。有关详细信息,请参见“检查校准是否成功”一节。

为了成功进行校准,需要至少一个具有精确已知度量属性的校准对象,例如HALCON校准板。在调用calibrate_cameras之前,请以不同方向拍摄一系列校准对象的图像,并确保覆盖整个视场或测量体积。校准的成功高度取决于校准对象和图像的质量。因此,您可能需要在获取校准图像期间进行特殊的检查。请参阅“如何拍摄一组合适的图像?”部分。有关详细信息。

下面,详细说明校准过程:


准备校准输入数据


在调用calibrate_cameras之前,您必须使用以下步骤创建并填充校准数据模型:


  1. 使用运算符 create_calib_data创建校准数据模型,指定设置中摄像机的数量和使用的校准对象的数量。

  2. 使用运算符set_calib_data_cam_param为所有摄像机 指定摄像机类型和初始内部摄像机参数请注意,在单个设置中只能校准相同类型的摄像机。

  3. 使用运算符set_calib_data_calib_object指定所有校准对象的描述

  4. 使用操作员 find_calib_objectset_calib_data_observ_points收集观测数据,即提取的校准对象的校准标记的图像坐标和校准对象相对于观察相机的大致估计的姿态。

  5. 配置校准过程,例如,指定参考摄像机或从优化中排除某些内部或外部摄像机参数。使用运算符 set_calib_data,您可以为完整设置指定参数,或者在设置中配置单个摄像机或校准对象姿态的参数。例如,如果精确知道了摄像机0的图像传感器像元大小,并且仅需要校准其余参数,则可以调用

        set_calib_data(CalibDataID,'camera',0,\
                        'excluded_settings',['sx','sy'])。


进行实际的相机校准


calibrate_cameras执行的校准取决于校准设置中涉及的摄像机类型。

对于具有投影区域扫描相机的设置 (``area_scan_division''``area_scan_polynomial'', ``area_scan_tilt_division'', ``area_scan_tilt_polynomial'', ``area_scan_tilt_image_side_telecentric_division''和 ``area_scan_tilt_image_side_nomial''是在步骤4处进行校准的。首先,该算法尝试构建观察姿势链,以所有摄像机和校准对象姿势连接到参考摄像机。

image.png


(1)所有摄像机都可以通过一系列观察姿势连接。(2)最左边的摄像机被隔离了,因为任何其他摄像机都看不到左校准板。


如果存在无法到达的摄像机(即,未观察到可在链中连接的任何校准对象的姿势),则校准过程将终止并出现错误。否则,该算法通过沿着该链向下移动来初始化所有校准项目的姿态。第二步, calibrate_cameras对所有未明确排除在校准之外的优化参数执行实际优化。在第三步,该算法基于经过校准的相机,对所有包含标记轮廓信息的观测值进行校正(请参见find_calib_object)。然后,重新优化校准设置,以使校正生效。如果没有轮廓信息可用,则跳过此步骤。在最后一步,calibrate_cameras计算校准的内部摄像机参数的标准偏差和协方差。

对于带有远心区域扫描相机的设置 (``area_scan_telecentric_division''`area_scan_telecentric_dinomial''`area_scan_tilt_bilateral_telecentric_division'', ``area_scan_tilt_bilateral_telecentric_polynomial'', ``area_scan_tilt_tilt_object_side_teal'', ``_aly_vision_object_side_died'', ``_a_scan_tilt_object_side_died_ive _, _ ly_object_side_side_tele_在第一步中(建立一个连接观察链) 所有相机和校准对象),必须满足附加条件。由于只能确定对象的姿态,直到沿光轴平移为止,因此必须至少由两个摄像机观察每个校准对象以确定其相对位置。否则,其姿势将从校准中排除。此外,由于从两个不同的观察角度来看,平面校准对象看起来是相同的,所以不能明确地确定相机之间的相对姿势。总是有两个有效的替代相对姿势。请注意,这两种选择都会导致可用于测量的一致的相机设置。由于无法解决歧义,因此将返回第一个替代方案。另请注意,如果返回的姿势不是真实姿势而是替代姿势,

对于带有投影和远心区域扫描相机的混合设置,该算法执行与带有投影区域扫描相机的设置相同的四个步骤。只要存在一个由所有透视相机组成的观察姿势链,就可以解决第一步中可能出现的歧义(建立连接所有照相机和校准对象的观察姿势链 ),如上文针对远心照相机的设置所述。和足够数量的校准对象。在此,足够的数量意味着每个远心摄像机都观察到该链条的至少两个校准对象。


image.png
带有角度(P)和远心(T)区域扫描相机的混合校准设置。(1)所有透视相机通过一串仅包含透视相机的观察姿势连接。(2)最右边的透视相机未观察到第二个校准板(从左开始)。因此,不能唯一地确定两个透视相机之间的相对姿势。


对于使用行扫描摄像机'line_scan')的设置,存在一些限制:首先,只能校准一台摄像机,并且每个设置只能使用一个校准对象。此外,校准不提供有关估计参数的标准偏差和协方差的信息。最后,对于带有矩形排列标记的校准板(请参见 gen_caltab),所有观察结果必须包含校准对象的所有校准标记的投影坐标。对于带有六角形标记的校准板(请参见 create_caltab),不应用此限制。


检查校准是否成功


成功校准后,将以误差(以像素为单位)返回优化的反投影的均方根误差(RMSE )。该错误一般说明优化是否成功。

如果仅对单个摄像机进行校准,则误差为0.1像素(通过提取投影的校准标记的坐标而产生的典型检测误差)表明该优化非常适合观察数据。如果“ 误差”与0.1像素相差很大,则校准效果不佳。原因可能是例如图像质量差,校准图像数量不足或校准板不正确。如果同时校准多个摄像机,则很难判断误差”的值根据经验,错误应当尽可能小并且至少小于1.0,从而表明利用校准参数可以对数据进行亚像素精确评估。在特定配置中,可能很难达到该值。有关校准质量的进一步分析,请参阅估计参数的标准偏差和协方差(当前仅适用于区域扫描相机,请参见 get_calib_data)。


获取校准结果


可以使用get_calib_data查询内部摄像机参数,摄像机姿势(外部摄像机参数),校准对象姿势等校准结果远心相机的姿态只能确定到相应相机坐标系统沿z轴的位移。因此,所有摄像机姿势都沿该轴移动,直到它们全部位于一个公共球体上。球体的中心由第一个校准对象的姿态定义。球体的半径取决于校准设置。如果校准了投射式和远心区域扫描相机,则半径是从透视相机到第一个校准对象的所有距离中的最大值。否则,如果仅考虑远心区域扫描相机,则半径等于1m。


相机参数


摄像机参数可以分为内部和外部摄像机参数。



  • 相机内部参数:

这些参数描述了所用照相机的特性,尤其是传感器本身的尺寸以及所用镜头,照相机和抓帧器组合的投影特性。以下是所有可用摄像机类型及其各自参数CameraParam的概述在该列表中,“投影区域扫描相机”是指镜头在镜头的物体侧执行永久性投影的属性,而“远心区域扫描相机”是指镜头执行远心投影的属性。在镜头的物体侧。


  • 区域扫描相机

  • 根据相机类型,有9到16个内部参数。

    带有常规镜头的面阵相机

    投影面扫描相机



    • '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]



    远心区域扫描相机



    • 'area_scan_telecentric_division'

    • ['area_scan_telecentric_division',放大倍率,Kappa,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_telecentric_polynomial'

    • ['area_scan_telecentric_polynomial',放大倍率,K1,K2,K3,P1,P2,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]



    带倾斜镜头的面阵相机

    投影面扫描相机



    • 'area_scan_tilt_division'

    • ['area_scan_tilt_division',Focus,Kappa,ImagePlaneDist,Tilt,Rot,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_polynomial'

    • ['area_scan_tilt_polynomial',Focus,K1,K2,K3,P1,P2,ImagePlaneDist,倾斜,旋转,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_image_side_telecentric_division'

    • ['area_scan_tilt_image_side_telecentric_division',Focus,Kappa,Tilt,Rot,Sx *,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_image_side_telecentric_polynomial'

    • ['area_scan_tilt_image_side_telecentric_polynomial',Focus,K1,K2,K3,P1,P2,倾斜,旋转,Sx *,Sy *,Cx,Cy,ImageWidth,ImageHeight]



    远心区域扫描相机



    • 'area_scan_tilt_bilateral_telecentric_division'

    • ['area_scan_tilt_bilateral_telecentric_division',放大倍率,Kappa,倾斜,腐烂,Sx *,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_bilateral_telecentric_polynomial'

    • ['area_scan_tilt_bilateral_telecentric_polynomial',放大倍率,K1,K2,K3,P1,P2,倾斜,旋转,Sx *,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_object_side_telecentric_division'

    • ['area_scan_tilt_object_side_telecentric_division',放大倍率,Kappa,ImagePlaneDist,倾斜,旋转,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]


    • 'area_scan_tilt_object_side_telecentric_polynomial'

    • ['area_scan_tilt_object_side_telecentric_polynomial',放大倍率,K1,K2,K3,P1,P2,ImagePlaneDist,倾斜,旋转,Sx,Sy *,Cx,Cy,ImageWidth,ImageHeight]



    出于以下说明的原因,标有*号的参数是固定的,不会由算法估算。

    摄像机内部参数说明:



    • CameraType:

    • 摄像机的类型,如上所述。


    • 焦点:

    • 镜头的焦距(仅适用于在镜头物侧进行透视投影的镜头)。

      初始值为所用镜头的标称焦距,例如0.008m。


    • 放大:

    • 镜头的放大倍率(仅适用于在镜头物侧进行远心投影的镜头)。初始值为所用远心镜头的标称放大倍率(图像尺寸除以物体尺寸),例如0.2。


    • 河童

    • 变形系数,用于建模径向镜头变形(仅适用于分割模型)。

      使用0.0作为初始值。


    • K1,K2,K3,P1,P2:

    • 变形系数,用于建模镜头的径向和偏心变形(仅适用于多项式模型)。

      对所有五个系数使用0.0作为初始值。


    • ImagePlaneDist:

    • 镜头出瞳到像平面的距离。从镜头的像侧看,出瞳是光圈(通常是光圈)的(虚像)图像。如果镜头接近像方远心镜头,则典型值约为几厘米至非常大的值。


    • 倾斜,腐烂:

    • 倾斜角描述了光轴相对于传感器平面法线倾斜的角度旋转角度描述了光轴倾斜的方向。仅当倾斜镜头是摄像机设置的一部分时,才使用这些参数。 

      yxzyxz2. tilt1. rotImagePlaneDist
      透镜的倾斜是由参数来描述ImagePlaneDist。 描述倾斜轴相对于传感器x轴的方向。 描述了镜头的实际倾斜度。ImagePlaneDist是镜头出射光瞳到像平面的距离。 


      这些角度通常基于导致使用倾斜透镜的考虑因素而大致已知,或者可以从倾斜透镜的机构中读出。


    • Sx,Sy:

    • 比例因子。这对应于传感器上两个相邻单元之间的水平和垂直距离。由于在大多数情况下,图像信号是行同步采样的, 因此由传感器的尺寸确定,不需要通过校准过程进行估算。

      初始值取决于相机所用芯片的尺寸。有关实际值,请参阅相机的技术规格。注意:如果对图像进行二次采样,则这些值会增加!

      对于针孔摄像机,它是不可能确定 焦点 同时进行。因此,算法将保持 固定。远心透镜,它是不可能确定放大倍数, 以及同时进行。因此,算法将保持固定。对于 像侧远心的透镜倾斜,就不可能确定聚焦,和倾斜参数 同时进行。因此,该算法将另外保持 固定。对于双侧远心倾斜镜头,无法确定放大倍率, ,和倾斜参数 同步。因此,该算法将另外保持固定。 


    • Cx,Cy:

    • 图像主要点的 列()和行()坐标(径向变形的中心)。

      使用图像的一半宽度和高度作为初始值。注意:如果对图像进行二次采样,这些值会降低!


    • 图像宽度,图像高度:

    • 采样图像的宽度和高度。注意:如果对图像进行二次采样,这些值会降低!





  • 线扫描相机


  • 线扫描相机具有以下12个内部参数: ['line_scan',Focus,Kappa,Sx *,Sy *,Cx,Cy,ImageWidth,ImageHeight,Vx,Vy,Vz]

    *由于以下原因,“ Sx”“ Sy”是固定的,不能由算法估算。



    • CameraType:

    • 'line_scan'


    • 焦点:

    • 镜头的焦距。

      初始值为所用镜头的标称焦距,例如0.008m


    • 河童

    • 划分模型的畸变系数,以建模径向透镜畸变。使用0.0作为初始值。


    • Sx:

    • 比例因子。对应于传感器上两个相邻单元之间的水平距离。请注意,不能同时确定Focus和 因此, 在校准中保持固定。的初始值可以从相机的技术规格中获取。注意:如果对图像进行二次采样,则此值会增加! 


    • y:

    • 比例因子。在校准过程中,它仅以形式出现因此,不能同时确定。因此,在校准中, 保持固定。 以米为单位描述图像中心点到传感器线的距离。的初始值可以从相机的技术规格中获取。注意:如果对图像进行二次采样,则此值会增加! 


    • Cx:

    • 图像中心点的列坐标(径向变形的中心)。的初始值为图像宽度的一半。注意:如果对图像进行二次采样,此值会降低! 


    • Cy:

    • 图像中心点(径向畸变的中心)距扫描线中传感器线的距离。初始值通常可以设置为0。


    • 图像宽度,图像高度:

    • 采样图像的宽度和高度。注意:如果对图像进行二次采样,这些值会降低!


    • Vx,Vy,Vz:

    • 运动矢量的X,Y和Z分量。

      运动矢量的x,y和z分量的初始值取决于图像采集设置。假设照相机垂直于传送带看并且绕其光轴旋转,使得传感器线垂直于传送带,即照相机坐标系的y轴平行于传送带,则使用初始值然后,可以例如从具有已知大小的对象(例如,校准板,直尺)的线扫描图像中确定的初始值: 



          l [m] =物体在物体坐标中的长度[米]
          l [行] =图像坐标中对象的长度[行]


      与上述设置相比,如果将摄像头绕其光轴(即围绕摄像头坐标系的z轴)旋转30度,则必须按以下方式更改上述确定的初始值:


      与第一种设置相比,如果将摄像机绕摄像机坐标系的x轴旋转-20度,则会得到以下初始值:


      初始值的质量, 以及对于整个校准的成功是至关重要的。如果不够精确,则校准可能会失败。 



    请注意,术语“焦距”不是很正确,仅适用于无限远的物体距离。为了简化问题,即使意味着像距,也始终使用术语“焦距”

    请注意,对于所有使用摄像机参数作为输入的操作员,将检查参数值是否满足以下限制:



    对于某些运营商,限制略有不同。特别是,对于不支持行扫描摄像机的操作员,以下限制适用:




  • 外部摄像机参数:





    • TransX:

    • 沿相机坐标系的x轴平移。


    • 运输:

    • 沿相机坐标系的y轴平移。


    • TransZ:

    • 沿相机坐标系的z轴平移。


    • RotX:

    • 绕相机坐标系的x轴旋转。


    • 烂:

    • 绕相机坐标系的y轴旋转。


    • RotZ:

    • 绕相机坐标系的z轴旋转。


    这6个参数描述了3D姿势,即世界坐标系相对于相机坐标系的位置和方向。对于线扫描相机,世界坐标系的姿态是指第一条图像线的相机坐标系。三个参数(TransX,TransY和TransZ)描述了平移,三个参数(RotX,RotY,RotZ)描述了旋转。有关3D姿势的更多信息,请参见create_pose

    使用标准HALCON校准板时,世界坐标系由校准板的坐标系定义。对于带有六边形排列标记的校准板(请参见create_caltab),坐标系的原点位于第一个取景器图案的中心标记的中心。对于带有矩形标记gen_caltab校准板,原点位于校准板表面的中间。在这两种情况下,坐标系的z轴都指向校准板,其x轴指向右侧,而y轴指向下方。

    如果使用HALCON校准板,则可以使用运算符 find_calib_object来确定所有6个参数的初始值。使用带有矩形排列标记的HALCON校准板(请参见gen_caltab),两个运算符find_caltabfind_marks_and_pose的组合将具有相同的效果。





有关校准过程的其他信息


使用calibrate_cameras会引起一些问题,以下部分将解决这些问题:




  • 如何生成合适的校准板?


  • 您可以从当地的经销商处获得各种尺寸和材料的高精度校准板。这些校准板带有关联的描述文件,可以使用find_calib_object轻松提取

    也可以使用任意对象进行校准。唯一的要求是对象具有可以在图像中可靠检测的特征点,并且必须高精度地知道这些点的3D世界位置。有关详细信息,请参见“解决方案指南III-C 3D Vision”。

    对于高精度应用,自打印的校准对象通常不够准确。



  • 如何拍摄一组合适的图像?


  • 如果您使用HALCON校准板,则可以按照以下方式进行:要校准镜头(固定焦点设置!),相机和图像采集卡的组合,必须拍摄一组校准板的图像(请参见 open_framegrabbercatch_image)。必须考虑以下项目:



    • 至少应使用10至20张图像进行校准。


    • 应避免在校准板上产生反射等。


    • 在获取图像期间,请勿更改相机的光圈。如果在校准后更改了光圈,则必须重新校准相机。


    • 在图像获取过程中,请勿更改相机的位置。


    • 在这组图像中,校准板应以不同的位置和方向出现:例如,在图像的所有四个角,中间,边界和不同的距离。此外,应旋转和倾斜校准板,以使校准对象的透视变形清晰可见。


    • 校准板应至少填满整个图像的四分之一,以确保对标记的鲁棒检测和对径向变形的鲁棒建模。


    • 不得颠倒获取校准标记。例如,如果在背面获得玻璃制成的校准板,则会发生这种情况。



    您当地的分销商可以为您提供两种不同类型的HALCON校准板:具有六角形排列标记的校准板(请参见create_caltab)和具有矩形排列标记的校准板(请参见gen_caltab)。由于这两个校准板基本上彼此不同,因此除了一般建议外还必须考虑其他特殊性(另请参见find_calib_object):

    带有六角形标记的HALCON校准板



    • 校准板可能会填满整个图像,甚至可能超出图像边缘。如果图像中至少可见一个校准板的取景器图案就足够了。但是,必须注意,可以从相机看到尽可能多的标记。因此,每个图像可以提取更多的标记,这不仅可以用更少的图像获得可靠的校准,而且可以提供更可靠的失真估计。


    • 由于标记数量众多,与使用带有矩形排列标记的校准板相比,进行精确校准通常只需要较少的图像。


    • 如果图像中至少可见两个取景器图案,则可以检测校准板是否已镜像。在镜像情况下,HDevelop将返回适当的错误。



    带有矩形标记的HALCON校准板



    • 校准板必须在图像中完全可见(包括其边界!)。





  • 应该使用哪种失真模型?


  • 对于区域扫描相机,可以使用两个失真模型:除法模型和多项式模型。除法模型使用一个参数来建模径向变形,而多项式模型使用五个参数来建模径向变形和偏心变形(请参阅“相机参数”一节)。

    划分模型的优点是可以更快地应用失真,尤其是逆失真,即,如果将世界坐标投影到图像平面中。此外,如果仅使用很少的校准图像,或者如果视野不够充分,则除法模型通常会比多项式模型产生更稳定的结果。多项式模型的主要优点是它可以更精确地对变形进行建模,因为它使用高阶项来对径向变形进行建模,并且还可以对偏心变形进行建模。注意,多项式模型不能解析地求逆。因此,必须以迭代方式计算逆失真,这比使用(解析可逆)除法模型进行逆失真的计算要慢。

    通常,应使用除法模型进行校准。如果校准的精度不够高,则可以使用多项式模型。但是请注意,用于多项式模型的校准序列必须对以后将要进行测量的区域提供更好的覆盖范围。可能会在校准板所覆盖的区域之外对变形进行不正确的建模。这适用于图像边界以及视野内的校准板未覆盖的区域。





二手3D相机型号


通常,相机校准是指对将3D世界点的(光学)投影建模到图像中的(子)像素(r,c)的参数的精确确定 如果必须根据图像计算对象的原始3D姿势(例如,测量工业零件),则这一点很重要。 

要将 世界坐标中的3D点转换为像素坐标中的2D点,需要一系列转换: 



首先,将其转换为相机坐标系然后, 将其投影到图像平面中,即转换为2D点,仍然以公制坐标表示。然后,将镜头畸变应用于 ,将其转换为畸变点如果使用倾斜镜头,则仅位于系统的虚像平面上而不会倾斜。通过投影倾斜图像平面上的点 进行校正最后,将变形点 (或 )的坐标转换为像素坐标,从而得到最终点。 

以下更详细地描述了这些步骤:

通过以下方式将点从世界转换为相机坐标:(点为齐次矢量,比较 affine_trans_point_3d): 


然后,将点投影到图像平面中,即投影到传感器芯片上。

对于此投影过程的建模,HALCON提供了以下三种3D摄像机模型,该建模过程是由摄像机,镜头和抓帧器的组合来确定的:




  • 区域扫描针孔摄像头:


  • 区域扫描相机与镜头的组合会在镜头的物体侧产生透视投影,并且可能会显示径向和偏心变形。镜头可以是倾斜镜头,即,镜头的光轴可能相对于相机的传感器倾斜(有时称为Scheimpflug镜头)。常规(即,非倾斜)针孔和像方远心镜头的型号相同。相反,如下所述,针孔和像侧远心倾斜镜头的模型大不相同。



  • 区域扫描远心相机:


  • 区域扫描相机与镜头的组合,镜头在镜头的物体侧是远心的,即在镜头的物体侧实现平行投影,并且可能显示径向和偏心变形。该透镜可以是倾斜透镜。常规(即,非倾斜)双侧和物侧远心镜头的型号相同。相反,如下所述,双侧和物侧远心倾斜镜头的模型有很大不同。



  • 线扫描针孔摄像头:


  • 线扫描相机与镜头的组合,可实现透视投影并显示出径向变形。线扫描相机当前不支持倾斜镜头。




如果基础相机模型是区域扫描针孔相机 则通过以下等式描述到图像平面的投影: 

在哪里。 


如果使用区域扫描远心摄像机,则对应的等式为:

在哪里。 


对于两种类型的区域扫描相机,都可以通过除法模型或多项式模型对镜头失真进行建模。

所述分割模型使用一个参数(),以径向失真模型。 

如果使用分割模型,以下方程式将变形的图像平面坐标转换为未变形的图像平面坐标:


这些方程式可以解析地反转,从而导致以下方程式将未变形的坐标转换为变形的坐标:


多项式模型使用三个参数(),以径向扭曲和两个参数(模型)来模拟偏心失真。 

如果使用多项式模型,则以下公式将失真的图像平面坐标转换为未失真的图像平面坐标:

与 


这些方程式不能通过解析来反演。因此,必须从数值上未失真的图像平面坐标中计算出失真的图像平面坐标。

如果镜头是倾斜镜头,则镜头相对于像平面的倾斜度由两个参数来描述:旋转角(描述倾斜轴的方向)和倾斜角(传感器平面倾斜的角度)相对于光轴。 

的旋转对应于光轴倾斜垂直向下相对于该摄像机壳体,对应于光学轴线水平地向左倾斜,对应于光轴被倾斜垂直向上,并且对应于光轴被水平倾斜正确的。 

对于投射式倾斜镜头物体侧远心式倾斜镜头(在镜头的像侧执行透视投影),投影位于倾斜像平面中的点的投影通过投影2D变换进行描述,即通过齐次3×3矩阵(请参见 projective_trans_point_2d): 

哪里

在哪里和 

。 


对于像侧远心倾斜透镜和 双侧远心倾斜透镜(在透镜的像侧执行平行投影),通过线性2D变换(即2×2矩阵)描述在倾斜像面上的投影:

其中如上所定义为投影透镜。 


最后,将点(或如果存在倾斜透镜的话)从像平面坐标系转换成像坐标系(像素坐标系): 


对于线扫描摄像机,还必须对摄像机和对象之间的相对运动进行建模。在HALCON中,针对此议案进行了以下假设:



  1. 相机以恒定的速度沿直线移动。


  2. 相机的方向是恒定的。


  3. 所有图像的运动均相等。



该运动由必须在摄像机坐标系中的[米/扫描线]中给出的运动矢量描述运动矢量描述了假设固定对象的摄像机的运动。实际上,这等效于假定对象沿-V行进的固定摄像机。 

线扫描摄像机的摄像机坐标系定义如下:坐标系的原点是投影的中心。z轴与光轴相同,并且方向一致,以便可见点具有正z坐标。y轴垂直于传感器线和z轴。指向使得运动矢量具有正的y分量。x轴垂直于y和z轴,因此x,y和z轴形成右手坐标系。

当摄像机在图像采集期间在对象上方移动时,摄像机坐标系也相对于对象移动,即,每条图像线均已从不同位置成像。这意味着每个图像线都有一个单独的姿势。为了使事情变得容易,在HALCON中,所有从世界坐标到摄影机坐标的转换,反之亦然,都是基于第一条图像线的姿势的。在将点投影到图像期间要考虑运动V。 因此,操作员find_calib_object仅计算第一条图像线的 姿态(并由calibrate_cameras存储 在校准结果中)。 

对于线扫描针孔相机相机坐标系中给出的点 到图像中(子)像素坐标(r,c)的投影定义如下: 

假设

必须针对m,t求解以下方程组 : 


这已经包括对径向变形的补偿。请注意,对于线扫描相机,只能使用径向变形的分割模型。

最后,将点转换为图像坐标系,即像素坐标系:



局限性


对于针孔相机,如果在所有图像中校准板彼此平行(特别是如果它们都位于同一平面内),则无法与所有六个外部相机参数一起确定“聚焦”例如,在这种情况下,无法确定对焦和校准板到相机的距离。为了能够唯一地校准所有相机参数,请确保获取以不同方向倾斜的校准板的图像。

对于远心镜头,无法确定校准板距相机的距离。因此,在校准结果中将所得校准板姿态的z分量设置为1。

对于倾斜透镜,透镜畸变越大,可以确定得越准确。对于畸变小的镜头,无法可靠地确定倾斜度。因此,优化的倾斜参数可能与设置的标称倾斜参数明显不同。在这种情况下,请检查 错误如果误差很小,则生成的相机参数将始终在校准体积内描述成像几何形状,并可用于精确测量。

对于透视倾斜透镜物侧远心倾斜透镜,仅当倾斜度不为0时,才能唯一确定像平面距离。倾斜度越小,确定的像平面距离就越不准确。因此,优化的像平面距离可能与设置的标称像平面距离明显不同。在这种情况下,请检查错误如果误差 很小,则生成的相机参数将始终在校准体积内描述成像几何形状,并可用于精确测量。

对于绕水平轴或垂直轴倾斜(即旋转角度为0、90、180或270度)的透视倾斜镜头物体侧远心倾斜镜头,倾斜角焦距(对于透视倾斜镜头)或放大倍率(对于物体侧远心倾斜镜头),倾斜像平面到透视投影中心的距离无法唯一确定。在这种情况下,应通过调用将其排除在优化之外 

   set_calib_data(CalibDataID,'camera','general',\
                   'excluded_settings','sx')。


此外,请注意,对于倾斜透镜,只能同时确定确定这是一种实现选择,可以使优化在数值上更可靠。因此,通过调用将参数和 同时从优化中排除 

   set_calib_data(CalibDataID,'camera','general',\
                   'excluded_settings','tilt')。


具有大焦距的倾斜镜头的针孔相机具有近乎远心的投影特性。因此,如前一段所述,倾斜参数与和相关联,并且只能同时不精确地确定。在这种情况下,建议通过调用将其排除在优化之外 

   set_calib_data(CalibDataID,'camera','general',\
                   'excluded_settings','sx')。


对于远心镜头,校准板总是有两个姿态相同的图像。因此,不可能确定图像中实际存在两个姿势之一。这种不确定性也影响了倾斜参数和 远心镜头倾斜的。因此,根据用于初始参数 照相机校准可能会返回替代的参数,而不是标称的。在这种情况下,请检查 错误如果误差很小,则生成的相机参数将始终在校准体积内描述成像几何形状,并可用于精确测量。 

并行化

  • 多线程类型:可重入(与非排他运算符并行运行)。

  • 多线程作用域:全局(可以从任何线程调用)。

  • 未经并行处理。

该运算符修改以下输入参数的状态:

如果没有外部同步,则可能无法在多个线程之间共享此参数的值。


参量

CalibDataID(input_control,状态已修改)  calib_data → (整数)

校准数据模型的句柄。

错误(output_control)  数字→ (实数)

背投影均方根误差(RMSE)的优化。


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

发表评论:

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

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 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