透镜畸变和畸变校准(OpenCV)

本文详细介绍了透镜畸变的三种类型:径向畸变、切向畸变和薄棱镜畸变,重点讨论了OpenCV中针对径向和切向畸变的数学模型及畸变校准方法。通过OpenCV的undistortPoints函数实现反畸变,并提到了优化迭代次数对精度的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

透镜畸变和畸变校准(OpenCV)

透镜畸变

理想的相机模型应该是小孔成像模型,但由于透镜制造和相机镜头安装等因素,必然会导致畸变的存在。畸变主要分为径向畸变、切向畸变和薄棱镜畸变。

1.径向畸变

径向畸变主要由透镜本身导致的,远离透镜中心的光线比靠近中心的光线弯曲的更严重。图1显示矩形网格因镜像畸变而产生的位移。从前面看,光心越向外,矩形网格上的点的位移越大。

image

图1 透镜的径向畸变图,箭头显示径向畸变图像上外部矩形网格的偏移

具体参考Learning OpenCV,Page412

数学模型表示如下,其中(xd,yd)为畸变点的位置,(xu,yu)为无畸变点的位置,(k1,k2,k3,k4,k5,k6)为径向畸变参数,此处为OpenCV的径向畸变模型:

image

图2显示了两种典型的径向畸变,分别为桶形畸变和枕形畸变

image

2.切向畸变

切向畸变主要由镜头安装导致,当透镜不完全平行于图像平面的时候产生切向畸变。下图显示了某透镜的切向畸变图像。

image

数学模型表示如下,其中(xd,yd)为畸变点的位置,(xu,yu)为无畸变点的位置,(p1,p2)为切向畸变参数。
image

3.薄棱镜畸变

薄棱镜畸变一般由镜头设计和加工安装误差导致,一般情况下,可忽略此畸变。
数学模型可表示为,(s1,s2)为薄棱镜畸变参数。

image

畸变模型

一般情况下,薄棱镜畸变可以忽略不计,故OpenCV 2.0版本的畸变模型只考虑了径向畸变和切向畸变,畸变参数为(k1,k2,p1,p2,k3,k4,k5,k6)共8个参数。完整的数学模型如下所示(p3 为考虑切向畸变的扩展,此外设为0即可)
image

畸变校准

OpenCV提供对图像点的反畸变函数<

### Halcon 中畸变系数的使用方法及参数说明 在 Halcon 中,畸变系数用于描述镜头成像过程中的几何失真情况。这些系数对于图像处理计算机视觉应用至关重要,因为它们能够帮助修正由透镜引起的图像变形。 #### 参数定义与分类 根据不同的相机模型,在 Halcon 中可以配置不同数量的畸变系数: - 对于 `area_scan_division` 类型的相机模型,通常只需要七个参数来表示基本的内部参数以及简单的径向畸变项[^3]。 ```cpp CameraParameters := ['area_scan_division', f, k, cell_width, cell_height, cx, cy, image_width, image_height] ``` - 如果选择了更复杂的 `area_scan_polynomial` 模型,则会引入额外的高阶径向畸变(k1, k2, k3) 两个切向畸变(p1, p2)。 ```cpp CameraParameters := ['area_scan_polynomial', f, k1, k2, k3, p1, p2, cell_width, cell_height, cx, cy, image_width, image_height] ``` 其中, - **f**: 表示焦距; - **cx**, **cy**: 图像中心坐标; - **cell_width**, **cell_height**: 像素尺寸; - **image_width**, **image_height**: 成像区域大小; - **k/k1-k3**: 径向畸变系数; - **p1-p2**: 切向畸变系数; 需要注意的是,Halcon 的畸变系数计算方式不同于 OpenCV 等其他库。具体来说,两者之间存在方向上的差异——即一个是从前向后的映射关系,另一个是从后向前的逆变换关系[^1]。 #### 实际操作指南 为了获取并利用这些畸变系数来进行后续处理工作,可以通过调用特定函数完成相应任务。例如,通过执行 `calibrate_cameras` 函数可以获得完整的内外部参数集,其中包括了上述提到的各种畸变因子[^4]。 ```hdevelop * 执行相机标定流程... gen_calib_data ('default', [], 'circle_grid', [rows], [cols], CalibDataID) add_calib_data_camera (CalibDataID, ...) grab_image_and_pose (... , Pose) calibrate_cameras ([...], [...], ..., CamParam) * 输出结果中包含了详细的畸变信息 disp_message(WindowHandle,'Distortion parameters: '+CamParam,'window','true') ``` 此代码片段展示了如何创建校准数据对象、添加摄像机信息、采集样本图片及其姿态,并最终获得经过优化调整后的全部内参矩阵(含畸变系数)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值