opencv initundistortrectifymap()函数,为什么是在相机坐标系下去畸变

一棹烟波 2016-11-24 11:16:40
最近在看张正友标定和畸变校正的的Opencv源代码, 求出畸变系数后利用initundistortrectifymap()函数和remap()函数进行畸变校正。但是有一点不明白的就是,在initundistortrectifymap()函数中,是先将图像坐标(u, v)转换摄像机坐标系,再到世界坐标(X, Y, Z),然后在转换到摄像机坐标系(x', y', 1),在摄像机坐标系中利用畸变校正模型得到去畸变后的坐标(x'', y'', 1),然后再转换到图像坐标系(u', v'),这是什么原理呢?求大神指导,如果能够详细的解释整个过程,更是感激不尽!!
...全文
7406 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
人设崩塌 2020-02-07
  • 打赏
  • 举报
回复
当然,由于坐标映射推导涉及非整数量,因此,推导得到的畸变后的坐标值有可能是非整数,因此中间会涉及插值操作(在remap函数中)。
人设崩塌 2020-02-07
  • 打赏
  • 举报
回复
这个initUndistortRectifyMap函数其实是在找畸变前畸变后坐标映射关系,即map1和map2。整个流程为: 由于从畸变前推畸变后的坐标比较容易(我不严谨地理解为后者类似于前者的函数值),所以,使用undistort函数(标定得到的内参和畸变系数作为输入)由imgsize得到图像大小,遍历元素坐标,由坐标转化关系得到畸变后的坐标,得到映射关系,即map1和map2,然后再使用remap(map1和map2以及已经得到的畸变后地图像作为输入),利用映射关系给畸变后地元素找畸变前地位置就得到了输出(即畸变前地图像),不知道这么理解有没有问题?可以参考这个博客地公式推导https://blog.csdn.net/humanking7/article/details/45037239
人设崩塌 2020-02-07
  • 打赏
  • 举报
回复
https://blog.csdn.net/humanking7/article/details/45037239 这个解释我看懂了
lqxx03708wl 2019-12-15
  • 打赏
  • 举报
回复
楼主我想请教下您现在弄清楚了吗,opencv给的说明怎么看起来像是把无畸变的图像加上畸变的过程 看了半天被绕晕了
mmLxfz 2018-12-25
  • 打赏
  • 举报
回复
引用 3 楼 一棹烟波 的回复:

这是opencv2.4.9中关于initundistortrectifymap()函数的说明,我看了好蒙。。。


从式子来看,是将某一帧图像上的点(像素坐标),转换为起始帧的点(像素坐标),是一个加入了内参、外参(R,t)、畸变函数的2D到2D的转换过程
hy3316597 2017-08-19
  • 打赏
  • 举报
回复
楼主可能认为undistort()函数是进行畸变校正吧,但是正好相反,undistort是用来获得重映射remap的查找表map1、2 的。 所以undistort的功能是把图像从“校正后”变换到“畸变”图像。
furuit 2017-08-06
  • 打赏
  • 举报
回复
[quote=引用 10 楼 真的可以,货真价实的干货
这家伙也很懒 2017-06-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/ssw_1990/article/details/53216767感觉这个博客写的还可以 可以参考一下
Johnny_Xiu 2017-06-07
  • 打赏
  • 举报
回复
最近在看张正友标定和畸变校正的的Opencv源代码, 求出畸变系数后利用initundistortrectifymap()函数和remap()函数进行畸变校正。但是有一点不明白的就是,在initundistortrectifymap()函数中,是先将图像坐标(u, v)转换摄像机坐标系,再到世界坐标(X, Y, Z),然后在转换到摄像机坐标系(x', y', 1),在摄像机坐标系中利用畸变校正模型得到去畸变后的坐标(x'', y'', 1),然后再转换到图像坐标系(u', v'),这是什么原理呢?求大神指导,如果能够详细的解释整个过程,更是感激不尽!
NoEdUl 2017-03-22
  • 打赏
  • 举报
回复
http://wiki.opencv.org.cn/index.php/Cv%E7%85%A7%E7%9B%B8%E6%9C%BA%E5%AE%9A%E6%A0%87%E5%92%8C%E4%B8%89%E7%BB%B4%E9%87%8D%E5%BB%BA#.E9.92.88.E5.AD.94.E7.9B.B8.E6.9C.BA.E6.A8.A1.E5.9E.8B.E5.92.8C.E5.8F.98.E5.BD.A2
weixin_37627606 2017-03-21
  • 打赏
  • 举报
回复
可以多参考点关于畸变的文献,弄懂那几个坐标系间的关系就行。对于畸变模型中所用的是图像坐标,但是直接从图像中提取的是像素左边,所以要先转化。转化后可以用实际提取到的图像坐标的畸变模型来表示理想坐标
  • 打赏
  • 举报
回复
引用 4 楼 yizhaoyanbo 的回复:
[quote=引用 1 楼 hust_bochu_xuchao 的回复:] 楼主所说的东西,我没看过。 不过,我一般用undistort 这个函数,进行校正图像。
undistort是我说的两个函数的组合,大侠有兴趣了互相探讨一下。[/quote] 2625812497 这是我扣扣号,,不过,我是用的比较多,,,原理什么的弄明白的少
一棹烟波 2016-11-25
  • 打赏
  • 举报
回复
引用 1 楼 hust_bochu_xuchao 的回复:
楼主所说的东西,我没看过。
不过,我一般用undistort 这个函数,进行校正图像。


undistort是我说的两个函数的组合,大侠有兴趣了互相探讨一下。
一棹烟波 2016-11-25
  • 打赏
  • 举报
回复

这是opencv2.4.9中关于initundistortrectifymap()函数的说明,我看了好蒙。。。
一棹烟波 2016-11-25
  • 打赏
  • 举报
回复
Opencv文档里说undistort()函数就是initundistortrectifymap()函数和remap()函数的简单组合。我就是最近在看opencv源码,关于畸变校正的步骤不太明白。
  • 打赏
  • 举报
回复
楼主所说的东西,我没看过。 不过,我一般用undistort 这个函数,进行校正图像。

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧