应用篇06-镜头畸变矫正(上)

本节讨论基于Halcon的镜头畸变矫正,这部分是后续诸多高级应用的基础。此为上篇,主要介绍径向畸变和切向畸变的原理及矫正方法。

1. 原理

为得到更好的成像效果,通常在相机前面添加透镜,目的是改善成像质量。但透镜对成像过程中光线传播产生影响。

常见的镜头畸变根据产生原因主要分为两类:

  • 径向畸变:透镜自身形状对光线传播的影响。
  • 切向畸变:组装过程中,透镜和成像平面未完成平行。

1.1 径向畸变(Radial Distortion)

由透镜形状引起的畸变称为径向畸变。在相机制造过程中,很难保证镜头的厚度完全均匀,由于制造工艺的原因,通常这种情况为中间厚、边缘薄,因而光线在远离透镜中心的地方,会发生更大程序的扭曲,这种现象在鱼眼相机中尤为明显。

在针孔模型中,直线投影至像素平面仍为直线;实际照片中,直线在图片中将变为曲线,且越靠近边缘,该现象越明显。

径向畸变分为两类:

  • 桶形畸变:四边向外凸,对应于凸透镜情况
  • 枕形畸变:四边向内凹,对应于凹透镜情况

特点:

  • 桶形畸变:距离光轴距离越远,图像放大率越小
  • 枕形畸变:距离光轴距离越远,图像放大率越大

对于两种径向畸变,穿过图像中心和光轴有交点的直线,保持形状不变

以下分别是枕形和桶形畸变示意图:

成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。

对于径向畸变,可以用光心(optical center )周围距离为的泰勒级数展开式的前几项进行描述,通常使用前两项就足够了,即k1和k2;对于畸变更大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述:

式中,(x,y)表示存在畸变时像素点的实际坐标值,也就是我们看到的坐标位置。(xcorrected,ycorrected)是经过畸变校正之后的坐标值。

1.2  切向畸变

在相机制造过程中,成像平面与透镜平面不平行,产生透视变换,如下图所示:

切向畸变与距离图像中心的距离半径有关,公式如下:

式中,p1、p2表示切向畸变矫正系数,xy是发生畸变后的角点坐标,x’ y’是畸变矫正后角点的坐标,r是曲率半径。

1.3 畸变校正模型

径向畸变和切向畸变通常同时发生在成像过程中,且两者相互独立。因此,可以将径向畸变和切向畸变合并,只需将两个畸变矫正直接加起来即可,公式如下:

3. 径向畸变矫正

3.1 相关算子说明

Halcon使用change_radial_distortion_cam_par算子用于改变相机参数的径向畸变系数,同时相应地调整其他相机内部参数(主要是主点坐标Cx和Cy),以保持相同的图像内容。换句话说,它允许你修改畸变模型而不改变图像中物体的实际投影。

算子声明

change_radial_distortion_cam_par (Mode, CamParamIn,DistortionCoeffs, CamParamOut )

参数说明

  • CamParamIn (输入): 原始相机内部参数,格式为[Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight](需修改)
  • DistortionIn (输入): 原始径向畸变系数(通常为[K1, K2, K3, P1, P2])
  • DistortionOut (输入): 期望的径向畸变系数(通常为[K1, K2, K3, P1, P2])
  • CamParamOut (输出): 调整后的相机内部参数

注意事项

  • 该算子主要用于改变畸变模型表示,而不是实际去除或添加畸变
  • 主点坐标(Cx,Cy)会被自动调整以补偿畸变模型的变化
  • 焦距(Focus)和像素尺寸(Sx,Sy)保持不变
  • 对于大幅度的畸变系数变化,结果可能不准确
  • 该算子通常与change_radial_distortion_image配合使用,后者实际执行图像变换

Halcon使用change_radial_distortion_image算子根据给定的相机参数变化,对图像进行径向畸变校正或引入径向畸变。它可以将图像从一种畸变模型转换为另一种畸变模型,或者完全去除/添加径向畸变。

算子声明

change_radial_distortion_image ( Image, Region : ImageRectified : CamParamIn, CamParamOut : )

参数说明

  • Image (输入): 原始畸变图像
  • CamParamIn (输入): 原始相机内部参数,包含畸变系数
  • CamParamOut (输入): 目标相机内部参数,包含期望的畸变系数
  • ImageRectified (输出): 校正后的图像

注意事项

  • 该算子主要用于改变畸变模型表示,而不是实际去除或添加畸变
  • 主点坐标(Cx,Cy)会被自动调整以补偿畸变模型的变化
  • 焦距(Focus)和像素尺寸(Sx,Sy)保持不变
  • 对于大幅度的畸变系数变化,结果可能不准确
  • 该算子通常与change_radial_distortion_image配合使用,后者实际执行图像变换

实例代码

* 读取图像并灰度化
read_image (Image, 'pioneer')
rgb1_to_gray (Image, GrayImage)

* 构建相机相平面空间
gen_cam_par_area_scan_division (0.00219846, -78129.2, 5.46495e-06, 5.5e-06, 318.206, 236.732, 640, 480, CamParIn)

* 修改相机参数,完成径向畸变矫正
change_radial_distortion_cam_par ('adaptive', CamParIn, 0, CamParOut)
change_radial_distortion_image (GrayImage, GrayImage, ImageRectified, CamParIn, CamParOut)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值