4_相机透镜畸变

理论上讲,是可能定义一种透镜而不引入任何畸变的。然而现实世界没有完美的透镜。这主要是制造上的原因,因为制作一个"球形"透镜比制作一个数学上理想的透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。下面主要描述两种主要的透镜畸变并为他们建模。径向畸变来自于透镜形状,而切向畸变则来自于整个摄像机的组装过程。

径向畸变,实际上摄像机的透镜总是在成像仪的边缘产生显著畸变。

对径向畸变,成像仪中心(光学中心)的畸变位0,随着向边缘移动,畸变越来越严重。实际情况中,这种畸变比较小,而且可以用r=0的位置周围的泰勒级数展开的前几项来定量描述。对于一般的相机,通常使用前两项,k1和k2;对于畸变很大的相机,比如鱼眼透镜,使用第三项k3。

切向畸变,这种畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。可以用p1和p2表示。

因此共有5个我们需要的参数。由于在OpenCV程序中五个参数都是必需的,所以它们被放置到一个畸变向量中,这是一个5×1的矩阵,按顺序依次是k1,k2,p1,p2,k3。下图给出了切向畸变在前面外部矩阵形网格点的影响。这些点明显在位置和半径上有位移。

在图像系统中还有很多其他类型的畸变,不过都没有径向和切向畸变显著,故可忽略。

2、标定

知道如何用数学来描述相机的内在参数和畸变后,接下来很自然的问题是如何使用OpenCV来计算内参矩阵和畸变向量。接口:cv::calibrateCamera().对于该接口,

标定方法是把相机对准一个具有很多独立可标识点的已知结构。通过从多个角度观察这个结构,我们可以计算拍摄图像时相机的(相对)位置和方向以及相机的内部参数。为了提供多个视角,需要旋转和平移物体(可参考之前机械臂系列相关内容)。

8_姿态的其他描述及一般坐标系映射

7机器人位姿的数学描述与坐标变

6_机械臂运动学_刚体转动的描述

5_机械臂运动学基础_矩阵

相关推荐
故渊at8 小时前
第一板块:Android 系统基石与运行原理 | 第五篇:Context 上下文与资源配置体系
android·人工智能·opencv·context·上下文·资源配置体系
ice8130331818 小时前
【Python】调用opencv识别图片人脸位置
人工智能·python·opencv
C++ 老炮儿的技术栈1 天前
如何利用 OpenCV 将图像显示在对话框窗口上
c语言·c++·人工智能·qt·opencv·计算机视觉·github
大江东去浪淘尽千古风流人物1 天前
【OpenCV parallel_for_】并行框架源码深度解析:7种后端调度、线程池自旋等待、工作窃取与跨平台CPU Yield指令全拆解
人工智能·opencv·计算机视觉·多线程·parallel_for_·tbb
还是叫明1 天前
指针式仪表读数(机器视觉、OpenCV)
人工智能·opencv·计算机视觉
勤自省1 天前
OpenCV 30 讲学习总结:从零基础到机器人视觉
人工智能·opencv·计算机视觉·机器人
Studying 开龙wu1 天前
OpenCV 报错 Assertion failed (s >= 0) in cv::setSize 的完整解决方案
人工智能·opencv·计算机视觉
稷下元歌1 天前
aifei学习前置基础:全套完整教程:Anaconda 安装→环境配置→YOLOv8+OpenCV 安装 + OpenCV 实操 + 标注→训练→导出→部署
opencv·学习·yolo
_不会dp不改名_2 天前
python-opencv环境搭建
开发语言·python·opencv
北暮城南2 天前
使用 Claude Code 高效实现图像边缘检测:多算法对比与工程实践
python·opencv·numpy·matplotlib·边缘检测·claude code