1. 畸变矫正基础概念回顾
在计算机视觉领域,镜头畸变校正是图像预处理的关键环节。当我们使用普通镜头拍摄时,由于光学镜片的物理特性,图像边缘会出现明显的桶形畸变或枕形畸变。这种几何变形会导致后续的计算机视觉算法(如特征匹配、三维重建等)产生误差。
OpenCV提供了完整的畸变校正工具链,其中undistortPoints()函数负责将带有畸变的像素坐标转换为理想无畸变的归一化平面坐标。这个转换过程看似简单,但背后涉及复杂的数学模型和迭代计算。理解其实现原理对于调试视觉系统和处理边缘案例至关重要。
注意:虽然OpenCV文档提供了函数接口说明,但实际工程中常遇到坐标转换不准确或特殊畸变参数下的异常情况,此时深入理解源码就变得非常必要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 函数接口与参数解析
2.1 函数原型分析
undistortPoints()在OpenCV中的标准调用形式如下:
cpp复制void undistortPoints(InputArray src, OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray R = noArray(),
InputArray P = noArray())
各参数的实际工程含义:
- src:输入的二维像素点集,通常来自特征检测结果
- dst:输出的校正后点坐标,位于归一化平面(Z=1)
- cameraMatrix:内参矩阵 [fx, 0, cx; 0, fy, cy; 0, 0, 1]
- distCoeffs:畸变系数 [k1,k2,p1,p2,k3,...]
- R:可选的旋转矩阵(用于立体校正场景)
- P:可选的投影矩阵(当需要输出到不同图像平面时)
2.2 畸变模型详解
OpenCV采用Brown-Conrady畸变模型,包含径向畸变和切向畸变:
- 径向畸变:由镜头曲率引起,系数k1,k2,k3控制
- 切向畸变:由镜头组装误差导致,系数p1,p2控制
数学模型表达为:
