作者asdfg1597860 (Jay)
看板C_and_CPP
标题[问题] 电脑视觉问题
时间Mon Sep 14 23:31:40 2020
开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
vs2019
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Eigen
问题(Question):
各位前辈好
我想询问关於电脑视觉的问题
如果我有一个旋转+平移矩阵组合而成的转换矩阵(Transformation Matrix)
也就是相机外参数矩阵(可以得知世界座标在相机座标的位置,旋转量)
此时我可以透过这个转换矩阵,推导出逆转换矩阵,
而这个逆转换矩阵,可以得到相机在世界座标的位置,及旋转量
问题1 : 如果我有一个物体沿世界座标Z轴移动10cm,我想利用上面已知的转换矩阵与逆
转换矩阵,推导出属於这个位置的转换矩阵,是否有可能呢?
目前我的做法是
先将0,0,20转换到相机座标(将0,020乘上转换矩阵中旋转矩阵的部分)
再将此平移量加到原本的转换矩阵中平移矩阵的部分
组合而成的转换矩阵就是0,0,20 与相机的转换矩阵
如果有错误的地方再麻烦各位前辈纠正
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):
这是我目前使用到的公式
https://imgur.com/a/x6kgqPJ
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.142.197.184 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1600097502.A.1B3.html
1F:推 s4300026: prob_solve? 09/15 08:26
2F:嘘 cia1099: 老实说我看不太懂你的问题,相机外参就是世界座标转到相 09/15 08:43
3F:→ cia1099: 机座标,这没问题,你要直接取逆不是不能,但取逆要旋转 09/15 08:43
4F:→ cia1099: 矩阵和平移相量分开作,因为外参矩阵是3x4的,没有矩阵 09/15 08:43
5F:→ cia1099: 逆可以算不是方阵的矩阵,除非你用se3求逆才有办法直接 09/15 08:43
6F:→ cia1099: 算逆乘法 09/15 08:43
7F:嘘 cia1099: 你扩展成4x4还是和外参定义有差,平移运算不能直接这样 09/15 08:48
8F:→ cia1099: 求逆,这违反矩阵的rank,平移不能保这4x4是full rank 09/15 08:48
9F:嘘 cia1099: 抱歉上面的full rank讲错了,是说你的inv(T)算出来也是 09/15 09:12
10F:→ cia1099: 畸形,不满足旋转矩阵的constrain R^T*R=I,所以别直接 09/15 09:12
11F:→ cia1099: 对T求逆 09/15 09:12
12F:推 cart0909: 什麽是那个位置的转换矩阵?你是想问那个点在相机坐标系 09/15 11:17
13F:→ cart0909: 下的座标吗? 因为转换矩阵是用来描述两个坐标系的关系( 09/15 11:17
14F:→ cart0909: SE(3) group) ,还是你物体本身带有座标系? 09/15 11:17
谢谢前辈的回覆
因为小弟最近才接触到3D空间转换等问题,观念上可能还需加强
我目前认知是4*4的转换矩阵 ,为齐次座标的转换
目前我做的操作如下
1.将旋转矩阵(3x3) 与 平移矩阵(3x1) 组合成[R|t](4x4) 最後(3,0)~(3,3)的值为0,0,0,1
这里与两位前辈提到的se3 类似(不过我不确定物理意义是否相同,我需要在消化学习这部分)
2.将此4x4的转换矩阵做逆矩阵
3.分开来算旋转矩阵(3x3)与平移矩阵(3x1),新的旋转矩阵=旋转矩阵的逆矩阵
新的平移矩阵 = -(新的旋转矩阵) * 平移矩阵
将新的旋转矩阵R'与新的平移矩阵T' 组合成[R'|T'](4x4) 最後(3,0)~(3,3)的值为0,0,0,1
此时会发现 3 与 2 求出来的逆转换矩阵相同
所以我想透过这关系 求出在世界座标往Z轴位移20cm後 与相机的转换矩阵
小弟如果描述或观念不清楚的地方再请前辈指正
※ 编辑: asdfg1597860 (220.142.197.184 台湾), 09/15/2020 21:42:37
15F:→ cart0909: 1是这样写没错 R只要满足R*R^T=I 且 det(R)=1 就是rotat 09/16 23:31
16F:→ cart0909: ion matrix( SO(3) group ). 跟translation组成你写的 09/16 23:31
17F:→ cart0909: 形式就是SE(3)其中一种表示方式了。 09/16 23:31
18F:→ cart0909: 2跟3 不多补充。 09/16 23:31
19F:推 cart0909: 再来你的问题要考虑那个object只是点还是带走座标系。 09/16 23:34
20F:→ cart0909: 如果只是三维点x3Dw (描述在world frame)下,因为你有R 09/16 23:34
21F:→ cart0909: cw, tcw。就直接转到camera frame就行了 x3Dc=Rcw*x3Dw+ 09/16 23:34
22F:→ cart0909: tcw 09/16 23:34
23F:推 cart0909: 如果是有座标系且知道Two转换矩阵(object to world)。 09/16 23:36
24F:→ cart0909: 则object to camera的Tco=Tcw*Two 09/16 23:36
25F:→ asdfg1597860: 谢谢前辈的指导 09/17 23:29
26F:推 CoNsTaR: cia 怎麽那麽气 XD 09/18 08:07
27F:→ CoNsTaR: 帮补 09/18 08:08
28F:推 purefalse: 边气边教也是很好心! 09/18 08:25