摄像机模型,畸变模型及畸变图像的矫正

有任何问题,请联系:[email protected]

摄像机模型,畸变模型及畸变图像的矫正

[email protected]

1:文中所有图的符号标注并不统一,一切以正文部分公式为准。

摄像机模型:

分若干步骤实现:

1)     小孔成像映射:

类似如上的小孔成像模型,重置一下摄像机坐标系位置,得如下小孔成像模型:

上图中,小孔成像模型把空间坐标点(齐次坐标形式,最后多一项记为1)映射为距距摄像机坐标系平面位置为(单位为距离)的新平面上的点,其坐标描述为(齐次坐标形式,单位为距离)。映射关系描述如下:

2)     考虑主点偏移,转化为像素值:

考虑主点偏移,转化为像素坐标值如下:

其中,,单位均为 距离/像素

3)     考虑像素坐标非矩阵因素:

如上图,考虑像素坐标非矩阵因素后,像素坐标描述如下:

4)     整理如下:

其中,,均为摄像机内参矩阵中常见待标定参数,其单位均为 像素值。另外内参矩阵常用待标定参数包括主点位置。

注意:经常采用如下形式的坐标,记为归一化图像坐标(normalized image coordinates

则此时有:

归一化图像坐标的单位为1。其物理意义为:取一距离摄像机坐标系平面的位置为1的新平面(归一化图像平面,mormalized image plane),则表示坐标点在该平面上的映射点坐标。

5)     引入世界坐标系:

考虑世界坐标系与相机坐标系的矩阵变换(平移变换和旋转变换),引入世界坐标系坐标后,有:

其中, 。

6)     最终小孔成像模型如下:

该模型为线性模型。

7)     对于摄像机内参数标定过程:

已知 ,则小孔成像模型变换为:

其中,。

记为单应矩阵,则有:,为常见标定模型。

畸变模型成因:

径向畸变:原因是镜头不规整造成的,不能完全把摄像机等效为小孔的等比放大模型。

切向畸变:原因是安装时镜头和感光片不完全平行,引入的非线性成像。

关于畸变模型的理解:

我的理解是,小孔成像模型描述了一个线性模型(包括对安装时镜头和感光片不平行部分的描述,内参数K的K(1,2)),去拟合摄像机成像的真实模型。

但各种原因(包括镜头不规整和镜头与感光片不平行的问题)造成了成像的真实模型包括非线性部分,为了充分描述和拟合该非线性部分,引入了畸变模型。

畸变模型描述:

1)     畸变模型:

给模型加入的畸变部分全部是加入在归一化图像坐标上的:

(参考http://blog.csdn.net/pinbodexiaozhu/article/details/43374737 )

径向畸变模型如下:

其中畸变系数为,张正有标定法(网上有现成代码)等中有自动标出,采用的是LM非线性优化算法。但无考虑切向畸变。

切向畸变模型如下:

其中畸变系数为,张正有标定法中未标定,同时在Matlab较新版本自带的cameraCalibrator工具箱中有标出。(不知道采用什么优化方法?)

Matlab较新版本自带cameraCalibrator工具箱标定过程如下图所示:

可参考:http://blog.csdn.net/Loser__Wang/article/details/51811347

图像畸变校正:

现在的问题是:已标定出摄像机内参数模型、畸变模型(畸变系数),给定一幅畸变图像,如何矫正图像?

已有畸变图像,已知该图像上每一点坐标和像素值,目标是求得一幅去畸变图像,即求得该去畸变图像上的每一点坐标和像素值。常采用做法如下:

构造一个空图像(作为去畸变图像),针对每一点坐标,左乘内参矩阵 得归一化坐标,利用畸变模型得畸变的归一化坐标,再左乘内参矩阵得对应畸变坐标。由于求得的畸变坐标通常不为整数,需要在畸变图像上采用插值方法得到像素值,赋值给。即得到完整去畸变图像。

问题1不能实现,在畸变图像上选定一特征点,直接反向求取其在去畸变图像上的坐标。需要先利用插值方法获得整幅的去畸变图像,然后再提取特征点。

问题2对于径向和切向畸变模型,按照什么顺序什么方式叠加?

例:

采用网上找的例子:http://blog.csdn.net/Loser__Wang/article/details/51811347

摄像机内参数为:[445.0538, 0.1921, 327.1490; 0, 447.3691, 244.2735; 0, 0, 1]

径向畸变系数:[k1, k2] = [-0.3203, 0.1177].

切向畸变系数:[p1, p2] = [-0.0055, 0.0014].

假设图像分辨率为:640*480.(根据主点值猜测)

文中给出的待校正图像和矫正后图像,如下:

我在程序中仅考虑径向畸变,和先径向再切向畸变都矫正,得图:

可见,图像是得到了矫正,但显示范围变小了,不全了。原因是,我是截图得到的图片,不是文章采用的原始图片。

另外的问题是,自己的程序耗时较长,openCV现成函数应该有优化。

采用自己的摄像机,对已有图片去参数,结果如下,依次为:原图、仅矫正径向畸变图、均矫正图:

 

 

时间: 2024-11-10 15:04:55

摄像机模型,畸变模型及畸变图像的矫正的相关文章

多路复用I/O模型poll() 模型 代码实现

多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pollfd结构体,对每个描述符进行轮询的 struct pollfd fdarray { int fd;    /*文件描述符*/ short events; /*表示等待的事件*/ short revents;/*表示返回事件即实际发生的事件*/ }; data.h #ifndef DATA_H #d

KVC简单介绍 -字典转模型,模型转字典

// 以下两个方法,都属于 KVC 的方法 // KVC 是 cocoa 的大招!间接给对象属性设置数值 // 程序执行过程中,动态给对象属性设置数值,不关心 .h 中是如何定义的 //      只要对象有属性(无论是在.h中还是在.m中定义的属性),就能够读取/设置! //      这种方式,有点违背程序的开发原则! // 字典转模型 setValuesForKeysWithDictionary // 模型转字典 dictionaryWithValuesForKeys //假设self.p

行为型模型 解释模型

行为型模型 解释模型 /** * 行为型模型 解释模型 * 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子. * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> class Context { public: Context(int num) { m_num = num; } void setNum(int num) { m_num = num

iOS 自定义对象及子类及模型套模型的拷贝、归档存储的通用代码

一.runtime实现通用copy 如果自定义类的子类,模型套模型你真的会copy吗,小心有坑. copy需要自定义类继承NSCopying协议 #import <objc/runtime.h> - (id)copyWithZone:(NSZone *)zone { id obj = [[[self class] allocWithZone:zone] init]; Class class = [self class]; while (class != [NSObject class]) {

概念辨析-生成模型/产生模型

机器学习的任务是从属性X预测标记Y,即求概率P(Y|X): 有监督学习 training data给了正确的答案即label,任务就是建立相应的模型,训练样本集外的数据进行分类预测. 生成式模型 生成模型学习一个联合概率分布P(x,y) 常见的判别方法有 k近邻法.感知机.决策树.逻辑回归.线性回归.最大熵模型.支持向量机(SVM).提升方法.条件随机场(CRF) 判别式模型 判别模型学习一个条件概率分布P(y|x) 常见的生成方法有混合高斯模型.朴素贝叶斯法和隐形马尔科夫模型 判别式模型举例:

django 模型-----定义模型

定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 属性命名限制 不能是python的保留关键字 由于django的查询方式,不允许使用连续的下划线 定义属性 定义属性时,需要字段类型 字段类型被定义在django.db.mode

[模型优化]模型欠拟合及过拟合判断、优化方法

[模型优化]模型欠拟合及过拟合判断.优化方法 一.模型欠拟合及过拟合简介 模型应用时发现效果不理想,有多种优化方法,包含: 添加新特征 增加模型复杂度 减小正则项权重 获取更多训练样本 减少特征数目 增加正则项权重 具体采用哪种方法,才能够有效地提高模型精度,我们需要先判断模型是欠拟合,还是过拟合,才能确定下一步优化方向. 图1 模型欠拟合,即高偏差(high bias),是指模型未训练出数据集的特征,导致模型在训练集.测试集上的精度都很低.如图1左图所示. 模型过拟合,即高方差(high va

osg fbx模型删除模型中的某几个节点,实现编辑模型的功能

fbx model element count:80 三维视图: {三维} 4294967295 osg::MatrixTransform1 基本墙 wall_240 [361750] 4294967295 osg::MatrixTransform2 基本墙 wall_240 [361813] 4294967295 osg::MatrixTransform3 基本墙 wall_240 [361889] 4294967295 osg::MatrixTransform4 基本墙 wall_240 [

网络编程之IO模型——IO模型比较分析

网络编程之IO模型--IO模型比较分析 IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了.现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪. 先回答最简单的这个:blocking vs non-blocking.前面的介绍中其实已经很明确的说明了这两者的区别.调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kerne