使用 OpenCV 标定某红外相机,得到径向畸变系数 k_1、k_2、k_3 分别为 -0.48、0.32、-0.13,求以原点为中心、边长为 0.8(图像宽度的 0.8)的正方形的四个顶点及各边中点经过畸变分别到了什么位置,并以此判断此畸变是属于枕形畸变,还是属于桶形畸变(假设主轴和畸变中心都在图像坐标原点)。
使用 OpenCV 标定某红外相机,得到径向畸变系数 $k_1$、$k_2$、$k_3$ 分别为 $-0.48$、$0.32$、$-0.13$,求以原点为中心、边长为 0.8(图像宽度的 0.8)的正方形的四个顶点及各边中点经过畸变分别到了什么位置,并以此判断此畸变是属于枕形畸变,还是属于桶形畸变(假设主轴和畸变中心都在图像坐标原点)。
题目解答
答案
解析
考查要点:本题主要考查径向畸变公式的应用及不同畸变类型的判断。
解题思路:
- 径向畸变公式:根据公式 $r' = r (1 + k_1 r^2 + k_2 r^4 + k_3 r^6)$,计算各点畸变后的径向距离 $r'$。
- 坐标变换:将原始坐标 $(x, y)$ 转换为极坐标 $(r, \theta)$,代入公式计算 $r'$,再转换回笛卡尔坐标 $(x', y')$。
- 畸变类型判断:通过比较 $r'$ 与 $r$ 的大小关系,判断图像边缘是向外扩展(枕形)还是向内压缩(桶形)。
正方形顶点及中点坐标
- 顶点坐标:以原点为中心,边长为 $0.8$ 的正方形顶点为 $(\pm 0.4, \pm 0.4)$。
- 边中点坐标:各边中点为 $(0, \pm 0.4)$、$(\pm 0.4, 0)$。
畸变计算步骤
1. 计算原始径向距离 $r$
- 顶点:$r = \sqrt{0.4^2 + 0.4^2} = 0.4\sqrt{2} \approx 0.566$
- 边中点:$r = 0.4$
2. 代入径向畸变公式计算 $r'$
以顶点为例:
$\begin{aligned}r' &= 0.566 \left( 1 + (-0.48)(0.566^2) + 0.32(0.566^4) + (-0.13)(0.566^6) \right) \\&\approx 0.566 \left( 1 - 0.1536 + 0.0328 - 0.0043 \right) \\&\approx 0.566 \times 0.8749 \approx 0.495\end{aligned}$
以边中点为例:
$\begin{aligned}r' &= 0.4 \left( 1 + (-0.48)(0.4^2) + 0.32(0.4^4) + (-0.13)(0.4^6) \right) \\&\approx 0.4 \left( 1 - 0.0768 + 0.0082 - 0.0005 \right) \\&\approx 0.4 \times 0.9309 \approx 0.372\end{aligned}$
3. 计算畸变后坐标
- 顶点:原坐标 $(x, y)$ 乘以 $\frac{r'}{r}$,如 $(0.4, 0.4) \times \frac{0.495}{0.566} \approx (0.351, 0.351)$。
- 边中点:原坐标直接乘以 $\frac{r'}{r}$,如 $(0, 0.4) \times \frac{0.372}{0.4} = (0, 0.372)$。
畸变类型判断
所有点的 $r' < r$,说明图像边缘被向内压缩,属于桶形畸变。