结构光学习笔记02:单目标定理论

1.标定意义

        标定:确定相机内参、外参以及校正误差

2.成像模型

        世界坐标系Ow-XwYwZw:以外界某个参考点建立的坐标系

        相机坐标系Oc-XcYcZc:以光心建立相机坐标系,Z轴指向相机正前方

        图像坐标系xoy:光心在成像平面的投影

        像素坐标系uOv:用于表示图像中的像素位置,原点通常位于图像左上角

2.1 世界坐标系->相机坐标系

        世界坐标经过刚体变换(旋转与平移)与相机坐标对应起来,则世界坐标系下某点P(Xw,Yw,Zw)转换到相机坐标系下坐标P(Xc,Yc,Zc)的变换公式如下:

        式中R为3X3的旋转矩阵,T为3X1的平移矩阵(相机外参)

2.2 相机坐标系->图像坐标系

        由相似三角形关系:

        则:

        写为齐次形式:

2.3 图像坐标系->像素坐标系

        根据上图,可得

        dx,dy为每个像素在x轴、y轴所代表的物理尺寸,将公式转换为齐次形式:

2.4 四大坐标系间关系

        根据式(8)与式(5),可得:

        式(1)代入式(9)可得:

        整理可得世界坐标到像素坐标的映射关系式:

3.畸变校正

        要注意的是,式(11)是在相机完全理想的情况下推导出来的,在实际中,由于镜头的设计和制造等原因,图像中的物体形状和位置会发生失真,即图像中的物体形状和尺寸与实际场景不符,影响图像的处理和分析,因此需要进行畸变校正。

        通常而言,在进行畸变校正之前,为了简化模型、减少计算复杂度和保持精度,通常需要将图像中的像素点从二维坐标转换为三维世界坐标,并对其进行归一化处理:将三维空间点的坐标都除以Z

        由式(9),可得

        

        式(12)便为像素平面坐标到归一化平面坐标的映射关系式。

3.1 径向畸变

        径向畸变通常与球面透镜、光学折射有关,对于径向畸变中的坐标变换,可由下列公式描述:

式中(x,y)为无畸变归一化平面下像素点的坐标,(x’,y’)为发生畸变后归一化平面下像素点的位置,r为曲率半径,有r^2=x^2+y^2k_1 ,k_2 ,k_3 为径向畸变系数。

3.2 切向畸变

        切向畸变产生的原因主要与成像平面与透镜平面不平行有关,坐标变换关系式可由以下数学公式来描述:

p_1 与p_2 为切向畸变系数。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是基于HALCON的单目结构代码示例: ``` * 初始化相机和源 dev_open_framegrabber('GigEVision', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', 'default', 'default', 'default', 'default', AcqHandle) dev_set_framegrabber_param(AcqHandle, 'PixelFormat', 'Mono8') dev_set_framegrabber_param(AcqHandle, 'GevSCPD', 1000.0) dev_set_framegrabber_param(AcqHandle, 'GevSCFT', 'Continuous') dev_set_framegrabber_param(AcqHandle, 'GevSCPSPacketSize', 1500) dev_set_framegrabber_param(AcqHandle, 'GevSCPS', 'Unicast') open_framegrabber(1, 0, 0, 0, 0, 0, 0, 'default', -1, GenParamName, GenParamValue) dev_set_framegrabber_param(AcqHandle, 'ExposureTime', 1000.0) dev_set_framegrabber_param(AcqHandle, 'Gain', 1.0) dev_set_framegrabber_param(AcqHandle, 'TriggerMode', 'Off') dev_set_framegrabber_param(AcqHandle, 'AcquisitionMode', 'SingleFrame') gen_i11const(0, StructuredLightPattern) gen_i11const(1, LightFlag) gen_i11const(1, InvertFlag) * 读取图像和标定数据 read_image(Image, 'image.tif') read_cam_par('calib.camparam', CameraParam) read_object_model('calib.p3d', ObjectModel3D) * 进行点云重建 shape_from_structured_light(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, Cloud) * 可视化点云 dev_open_window(0, 0, 512, 512, 'Visible', WindowHandle) dev_display_object_model_3d(ObjectModel3D, CameraParam, Pose, [], [], [], WindowHandle, [], 'true', []) dev_display_shape_matching_results(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, WindowHandle) dev_display_shape_matching_results(Image, StructuredLightPattern, LightFlag, InvertFlag, ObjectModel3D, CameraParam, Pose, WindowHandle) ``` 请注意,需要根据实际硬件和场景进行参数设置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值