保存的教程把畸变校正拆成坐标转换、畸变模型和插值三个环节。阅读时最有帮助的问题是:输出图像的一个像素,应该从输入图像的什么位置取值?本文整理这个思路,没有使用示例参数做相机标定,也没有实拍验证。

先固定坐标含义

像素坐标用 (u, v) 表示,数组索引用 [row, col] 表示。常见实现中 u 对应列、v 对应行;还要核对程序采用从0还是从1开始的索引。把坐标命名写清楚,可以少一次转置或主点偏移错误。

畸变系数作用在归一化相机坐标上。阅读公式时,应区分理想坐标、畸变坐标以及两者各自对应的像素位置。径向与切向畸变的常用模型可对照 OpenCV 相机标定教程。本文不涉及鱼眼模型。

从输出位置寻找输入采样位置

对每个待输出的理想像素,先用输出相机矩阵 K_out 换算到归一化坐标,再通过畸变模型得到畸变坐标,最后用输入相机矩阵 K_in 换算为输入采样位置。这里假定不额外改变相机朝向;加入校正旋转时还需相应坐标变换。输出矩阵可以不同于输入矩阵,不能总把同一组内参用于两端。这种反向采样思路让每个输出像素都有明确的计算入口;非整数采样位置需要插值,越界位置需要约定填充值或有效区域。

原创示意:输出像素经坐标与畸变映射寻找输入采样点

图中的箭头表示坐标计算顺序,最后一步读取输入图像,不是把输入像素逐个向输出散射。

示例代码值得复查的地方

归档示例先更新 x,随后计算 y 的表达式仍引用 x。若采用同时以原始归一化坐标定义的模型,顺序赋值会改变第二个表达式的输入。整理实现时应保留 x0、y0,分别计算 xd、yd,并把公式逐项核对;这里只指出检查点,尚未运行修订代码。

示例声明了 k3,展示的径向项却只写到 k2。这也提醒我:使用五参数模型时应核对系数与公式是否匹配,不能把不同模型的参数直接拼在一起。

待验证清单

  1. 用零畸变系数检查映射是否回到原位置,边界是否符合预期。
  2. 核对横纵坐标、主点和图像尺寸;缩放或裁剪图像后重新检查内参。
  3. 与同一模型的参考实现比较采样坐标,再比较插值结果;不要只看图像是否“变直”。
  4. 使用实际标定数据评估重投影误差和有效图像区域。

本文只保留阅读方法与实现疑问。原文的相机参数、代码和效果图未作为本项目测量结果。

阅读来源

  • 原始阅读材料:祥知道:《畸变校正详解》。
  • 整理日期为2026-10-03;原文发表日期待核实。配图为本笔记原创概念示意,未复制原文截图。

适用范围:本文讨论常用针孔相机畸变模型。