j18*_*897 3 transformation computer-vision rotational-matrices
我有两个旋转矩阵。一个是我通过解决 PnP 问题得到的真实网络摄像头的旋转矩阵。我有一个世界坐标系,我知道世界空间中世界坐标中每个点的位置。
据我所知,旋转矩阵将世界坐标中的点转换为相机帧坐标(此处不考虑平移)。这意味着,R1 为您提供了世界坐标系相对于相机坐标系的方向。
我的第二个旋转矩阵是一个也在世界坐标中的传感器。即,此旋转矩阵为您提供世界坐标系相对于传感器坐标系的方向。
我想找到真实网络摄像头坐标系相对于传感器坐标系的方向。
让我们命名第一个旋转矩阵 Rw1 和第二个旋转矩阵 Rw2,下标 w1 表示相对于真实网络摄像头的世界,w2 表示相对于传感器的世界(1 和 2 可以被认为分别表示真实的网络摄像头和传感器)。
所以我的目标是找到R12。(而不是 R21)
R12 = R1w * Rw2 = (Rw1)' * Rw2
Run Code Online (Sandbox Code Playgroud)
我假设这个 R12 始终保持不变(在视频的后续帧中),因为传感器和网络摄像头的位置不会相互干扰,并且它们总是一起移动。我的假设有效吗?
如果它有效,那么我的最终目标是计算后续帧中真实网络摄像头的旋转矩阵。我可以计算后续帧中传感器的旋转矩阵,即后续帧的 Rw2。我必须找出 Rw1 并且我不能使用任何 PnP 算法。我想根据当前可用的信息计算它。
现在让我们考虑第二帧。
我知道 R12(我假设它是常数,我在第一帧中计算了它)和 Rw2(第二帧的传感器旋转矩阵)。我必须为第二帧找到 Rw1。
Rw1 = Rw2 * R21 = Rw2 * (R12)'
Run Code Online (Sandbox Code Playgroud)
我的方法正确吗?
PS:(R)'表示R的转置。
使用旋转矩阵时,必须特别注意源坐标系和目标坐标系。
考虑到两个坐标系 R1 和 R2,您可以表示旋转矩阵将R1中表示的点 M R1转换为R2中表示的相应点 M R2,其中 R R2<-R1使得:
M R2 = R R2<-R1 * M R1
这个符号非常有用,并且有两个很好的属性:
(R R2<-R1 ) -1 = R R1<-R2
R R3<-R2 * R R2<-R1 = R R3<-R1
现在,考虑到这一点,您应该很容易得到问题的答案。让我们对您的特定问题使用以下符号:
R 0 1 = R 0 cam<-world:旋转矩阵世界坐标到第 0 帧的相机坐标
R 0 2 = R 0 sensor<-world : 旋转矩阵世界坐标到第 0 帧的传感器坐标
R t 1 = R t cam<-world:旋转矩阵世界坐标到第 t 帧的相机坐标
R t 2 = R t sensor<-world:旋转矩阵世界坐标到第 t 帧的传感器坐标
首先,您要找到将相机坐标系中的点转换为传感器坐标系中的点的旋转矩阵(即“真实网络摄像头坐标系相对于传感器坐标系的方向”)。
R 0 12 = R 0传感器<-cam = R 0传感器<-world * R 0 world<-cam = R 0 2 * (R 0 1 ) -1
然后,您想在后续帧中找到网络摄像头的旋转矩阵,知道该帧的传感器旋转矩阵并假设 R t 12 = R 0 12。
R t 1 = R t cam<-world = R t cam<-sensor * R t sensor<-world = (R t sensor<-cam ) -1 * R t sensor<-world = (R 0 12 ) -1 * R t 2