一、前言

在很多图像处理中,需要使用相机参数来校正图像畸变。相机参数的获取往往需要复杂的标定过程,耗时耗力。
对于一些消费级相机,其本身畸变较小,可以人工计算理想模型下的参数来近似相机参数。我们就可以使用这个近似参数快速进行代码测试(好吧,其实是我懒得做标定😁)

二、相机参数简介

相机参数主要包含两个部分:相机内参矩阵、相机畸变参数。

1. 相机内参矩阵

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试


opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_02是x方向上焦距的像素长度,opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_03是y方向上焦距的像素长度。

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_04是相机成像中心的像素坐标。

2. 相机畸变参数

相机畸变分为径向畸变和切向畸变。

径向畸变:

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_05
opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_06

切向畸变:

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_07
opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_08

(r为距离图像成像中心点的距离,opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_09为畸变后的图像坐标,opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_10为去畸变的图像坐标)
按照上述,相机畸变参数为:
opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_11

三、相机参数简单计算

1. 相机内参矩阵

理想情况下,相机的成像中心在图像的正中心,示意图如下所示。

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_12

根据三角函数关系,可得:

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_13

这里的opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_14是相机焦距,opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_15是视场角,opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_16是图像宽度。

算出来opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_17是x方向上每个像素的实际长度,单位是mm/像素。

算出来opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_02是x方向上焦距的像素长度,是我们想要的参数。

因为opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_15是相对图像宽度而言的,理论上只能计算opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_02,但理想情况下,两个方向上CCD单位尺寸一致,即可得opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_21

由于相机的成像中心在图像的正中心,可得opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_22

即相机内参矩阵为:

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_23


2. 相机畸变参数

理想情况下,相机没有畸变,那么opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_243. 计算案例

我使用的是大疆Phantom4 Pro V2的云台相机,在官网上查到参数:opencv 畸变参数8个数代表什么意思 相机畸变参数计算_三角函数_25

对于opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_26的分辨率,可计算出

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_图像处理_27


那么相机内参矩阵为

opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_28


相机畸变参数为:opencv 畸变参数8个数代表什么意思 相机畸变参数计算_代码测试_24