匹配两款不同FOV运动相机视频的径向畸变参数计算方法
首先,我们要明确核心目标:找到一组等效的k1、k2参数,让其中一段视频的原始畸变效果(无需做去畸变处理)和另一段视频的畸变效果完全一致。以下是具体的推导和实用步骤:
1. 先理清径向畸变的基础模型
我们采用行业通用的Brown-Conrady径向畸变模型,统一坐标系:以图像中心为原点,将像素坐标归一化到[-1, 1]范围(r为点到中心的归一化距离,r² = x² + y²)。
正向畸变(无畸变点 → 畸变像素)
对于无畸变的空间点坐标(x_u, y_u),经过相机畸变后得到的像素坐标(x_d, y_d)为:
[
x_d = x_u \cdot (1 + k_1 \cdot r_u^2 + k_2 \cdot r_u^4)
]
[
y_d = y_u \cdot (1 + k_1 \cdot r_u^2 + k_2 \cdot r_u^4)
]
其中k1、k2就是相机的径向畸变参数。
逆向去畸变(畸变像素 → 无畸变点)
从畸变像素恢复无畸变点通常需要迭代求解,但消费级运动相机的畸变普遍较小,我们可以用近似逆变换(精度足够):
[
x_u \approx x_d \cdot (1 - k_1 \cdot r_d^2 - k_2 \cdot r_d^4)
]
[
y_u \approx y_d \cdot (1 - k_1 \cdot r_d^2 - k_2 \cdot r_d^4)
]
这里r_d² = x_d² + y_d²,因为小畸变下无畸变距离r_u和畸变后距离r_d几乎相等。
2. 等效参数的推导与计算
假设:
- 视频X由相机Cₓ拍摄,原始畸变参数为
k1_X、k2_X - 视频Y由相机Cᵧ拍摄,原始畸变参数为
k1_Y、k2_Y
我们需要为视频X计算等效参数k1_eq、k2_eq,让视频X的原始畸变效果和视频Y一致。
核心逻辑
我们的目标是让视频X中每个点的畸变比例(畸变后坐标与无畸变坐标的比值),和视频Y中对应空间点的畸变比例完全匹配。结合小畸变的近似条件,我们可以通过匹配图像边缘的畸变程度来推导参数:
图像边缘的点(归一化距离r=1,畸变最明显),视频X的畸变比例为1 + k1_X + k2_X,视频Y的畸变比例为1 + k1_Y + k2_Y。我们希望等效参数的畸变比例和视频Y一致,同时保留视频X原始参数的非线性比例(k2/k1的比值),这样能匹配整个图像的畸变趋势。
联立两个条件:
- 边缘畸变比例匹配:
1 + k1_eq + k2_eq = 1 + k1_Y + k2_Y - 非线性比例匹配:
k2_eq / k1_eq = k2_X / k1_X(若k1_X ≠ 0)
解这两个方程可得:
[
k1_{eq} = \frac{k1_Y + k2_Y}{1 + k2_X/k1_X}
]
[
k2_{eq} = k1_{eq} \cdot \frac{k2_X}{k1_X}
]
如果k1_X = 0,直接令k1_eq = k1_Y、k2_eq = k2_Y即可(因为此时只有k2起作用)。
3. 验证等效参数的正确性
计算完成后,你可以通过以下步骤验证效果:
- 从视频X中选取几个特征点(比如图像四角、边缘中点)
- 用视频X的原始参数去畸变这些点,得到无畸变坐标
- 用等效参数对原始畸变点做正向畸变计算,看结果是否和视频Y中对应空间点的畸变坐标一致
- 或者直接视觉对比:将视频X用等效参数标注为“未去畸变”状态,观察其变形程度是否和视频Y一致
内容的提问来源于stack exchange,提问作者Fabien Biller

