跳转至

三维重建笔记——从变换矩阵中提取并分析平移量

在编写点云变换和姿态估计代码时,我们经常需要从结果的变换矩阵中提取平移信息,并分析平移量的大小,帮助判断结果的准确性。

本文将介绍如何从变换矩阵中提取平移向量,并计算其欧几里得长度。

提取平移向量

假设我们通过某种姿态估计算法得到了一个4x4的变换矩阵 result.transformation_ ,其中包含了旋转和平移信息。

我们可以通过以下代码提取出平移部分:(以Open3D为例)

core::Tensor translation = result.transformation_.Slice(0, 0, 3).Slice(1, 3, 4);

Slice(0,0,3);表示从矩阵的第0维(行),第0行开始,取3行,即前3行;Slice(1,3,4);表示从矩阵的第1维(列),第3列开始,取1列,即第4列。 最后获得一个3x1的平移向量,包含x、y、z三个方向的平移量。

计算欧几里得长度

有了平移向量后,我们可以计算其欧几里得长度,表示平移量的大小:

double translation_norm = std::sqrt((translation * translation).Sum({0, 1}).Item<double>());

std::sqrt计算平方根,translation * translation 计算向量每个元素的平方,Sum 聚合,最终得到平移向量的L2范数,即**欧几里得长度**。

分析平移量

通过提取并计算平移向量的模长,我们可以分析相机或物体的移动距离,以及姿态估计结果的准确性。

如果 translation_norm 的值过大,可能表示估计存在误差,需要反复优化算法。

设置不同的阈值可以根据实际场景需求,判断平移量是否在允许的范围内。

以上是从变换矩阵中提取和利用平移信息的简单示例,可以提供点云变换和姿态估计任务有用的辅助分析。