| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 畸变模型的求解 -> 正文阅读 |
|
[人工智能]畸变模型的求解 |
畸变模型求解畸变模型在上一篇博客,我提到了我们用的畸变模型大多数是布朗模型的一种近似(当然还存在很多畸变模型,如鱼眼模型、根据镜头特点提出的模型等等)。 同时,在上一篇博客也指出了以下两种模型其实是等价的:
x
u
n
d
i
s
t
=
f
(
x
d
i
s
t
,
y
d
i
s
t
)
(1)
x_{undist} = f(x_{dist},y_{dist}) \tag{1}
xundist?=f(xdist?,ydist?)(1) 对于opencv,其采用的是第二种,原因是利用反向映射进行去畸变,一方面避免求解上述二元高次方程,另一方面可以避免第一种模型去畸变后产生“奶酪图”。 那么,如果我们要想求解第二种模型的方程,应该怎么做呢? 在opencv中给出了一种迭代法求解的方法,且收敛速度非常快。答案就在函数 undistortPoints()对于一些场景,我们并不需要对整幅图进行去畸变。比如对于光流法中我们跟踪的一些点(a sparse set of points),我们只需要对这些点进行畸变矫正即可,相比全图去畸变,节约算力。 同时,该函数还是 对于给定的畸变点 ( u , v ) (u,v) (u,v),计算其去畸变后的坐标点 ( x ′ ′ , y ′ ′ ) (x^{''},y^{''}) (x′′,y′′),主要步骤如下: 1、根据相机内参,将坐标转化到相机坐标系下,即 2、迭代求解畸变模型,得到去畸变后的坐标,即 3、再根据相机内参,将坐标系转化为像素坐标系,得到去畸变后的像素坐标,即 之所以要经过上述一圈,是因为我们在相机坐标系下,利用透镜前(无畸变)和透镜后(畸变)对应的坐标点进行优化得到畸变系数。 迭代法求解非线性方程组对于相机坐标系下的畸变坐标
(
x
d
i
s
t
,
y
d
i
s
t
)
(x_{dist},y_{dist})
(xdist?,ydist?),我们有如下畸变方程: 既然需要迭代进行求解,我们就需要设定迭代结束条件,即:
残差每一次迭代,我们通过公式(6)得到了“去畸变后的坐标位置”。 那么,将其带入到公式(2),我们就可以得到新的”畸变坐标位置“。 再借助相机内参,将其转化到像素坐标系下,这样我们就可以计算和真实的畸变坐标位置的欧氏距离作为最终的error,也就是重投影误差。 代码
opencv中
这种方法在去畸变的时候,收敛速度非常快,一般几次就能得到去畸变后的坐标位置。opencv中提到,默认迭代次数为5次。
最后刚开始在做反投影的时候,卡在了畸变方程的求解。于是乎,就在网上找了一个牛顿法求解非线性方程组的demo。相比牛顿法去求解,opencv中给出的这种方法,直观、收敛速度快、精度比较高,且实现起来比较容易(牛顿法需要求雅可比矩阵和海森矩阵)。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:23:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |