小编BCo*_*nic的帖子

在四元数旋转上应用镜像效果的有效方法?

四元数表示旋转 - 它们不包括有关缩放或镜像的信息.但是仍然可以反映旋转的效果.

考虑在xy平面上进行镜像(我们也可以将其称为沿z轴的镜像).围绕在xy平面上镜像的x轴的旋转将被否定.同样围绕y轴旋转.但是,围绕z轴的旋转将保持不变.

另一个例子:围绕xy平面镜像的轴(1,1,1)旋转90º会使(-1,1,-1)周围旋转-90º.为了帮助直觉,如果您可以想象轴的描绘和指示旋转的圆形箭头,则镜像该可视化指示新旋转应该是什么.

我找到了一种计算旋转镜像的方法,如下所示:

  • 获取四元数的角度轴表示.
  • 对于轴x,y和z中的每一个.
    • 如果沿该轴缩放为负(镜像):
      • 取消角度和轴.
  • 从修改的角度和轴获取更新的四元数.

这仅支持沿主轴x,y和z的镜像,因为这就是我所需要的.它适用于任意旋转.

然而,从四元数到角轴以及从角轴到四元数的转换是昂贵的.我想知道是否有一种方法可以直接在四元数上进行转换,但是我对四元数数学的理解还不足以让我自己去任何地方.

(由于计算效率方法的重要性,发布在StackOverflow而不是数学相关论坛.)

math 3d quaternions

6
推荐指数
3
解决办法
7253
查看次数

Sizeof模板类型参数的成员变量

我想确定sizeof一个结构类型的特定成员变量,我将其作为模板参数传递给函数.但是,我从编译器得到一个错误,说sizeof操作数是非法的(我在Windows 7中使用VS2010).

考虑以下程序:

#include <vector>
#include <fstream>

struct MyFloat {
    float val;
    MyFloat(){val=rand()/(RAND_MAX+1.f);};
};
struct MyDouble {
    double val;
    MyDouble(){val=rand()/(RAND_MAX+1.);};
};

template<class T>
void serializeArrayToFile(const std::string &filename, const std::vector<T> &items) {
    const size_t nbytes = sizeof(T::val); // <--- Error C2070
    std::ofstream os(filename.c_str(),std::ios::out+std::ios::binary);
    for(size_t i=0; i<items.size(); ++i)
        os.write((char*)(&items[i].val),nbytes);
    os.close();
};

void main() {
    const int N = 15;
    std::vector<MyFloat> arr_float(N); // Filled randomly by default constructor
    std::vector<MyDouble> arr_double(N); // Filled randomly by default constructor
    serializeArrayToFile<MyFloat>("myfloat_array.dat",arr_float);
    serializeArrayToFile<MyDouble>("mydouble_array.dat",arr_double);
}
Run Code Online (Sandbox Code Playgroud)

这会生成以下错误:错误C2070:'':非法sizeof操作数.

有人可以解释为什么 …

c++ templates sizeof

3
推荐指数
1
解决办法
844
查看次数

最小化测量误差时姿态估计的不确定性

假设我想估计给定图像的相机姿势,I并且我有一组测量值(例如 2D 点 u i及其相关的 3D 坐标 P i),我想最小化误差(例如平方重投影误差的总和) )。

我的问题是:如何计算最终姿态估计的不确定性?


为了使我的问题更具体,考虑的图像I从我提取的2D点ü和他们相匹配的三维点P。表示Ť瓦特相机姿态为这个图象,这是我将被估计,和pi Ť变换映射3D点到其投影的2D点。这是一张小图来澄清事情:

在此处输入图片说明

我的客观陈述如下: 最小化目标陈述

有几种技术可以解决相应的非线性最小二乘问题,考虑我使用以下(高斯牛顿算法的近似伪代码):

在此处输入图片说明

我在几个地方读到 J r T .J r可以被认为是姿势估计的协方差矩阵的估计。以下是更准确的问题列表

  1. 任何人都可以解释为什么会这样和/或知道详细解释这一点的科学文件吗?
  2. 我应该在最后一次迭代中使用 J r的值还是应该以某种方式组合连续的 J r T .J r
  3. 有人说这实际上是对不确定性的乐观估计,那么估计不确定性的更好方法是什么?

非常感谢,对此的任何见解将不胜感激。

algorithm opencv computer-vision uncertainty pose-estimation

3
推荐指数
1
解决办法
1013
查看次数

使用已知距离的其他两个点查找三角形的第三点

在此输入图像描述

在上图中,我有三点(x1,y1) (x2,y2) (x3,y3).

我知道的价值观x1,y1x2,y2.我知道的欧氏距离(x1,y1)->(x3,y3)(x2,y2)->(x3,y3).有这些信息我怎么能找到(x3,y3)

我希望像代码片段或逻辑一样有用......

我试图用圆圈方程解决这个问题,但我不知道如何继续.

math trigonometry

2
推荐指数
1
解决办法
4999
查看次数

reprojectImageTo3D - 我在哪里得到Q.

我在没有NDK的情况下在Android上使用OpenCV遇到了一些问题.
目前我正在做一个我的大学的项目,我的厨师告诉我,当从2D图像重建3D对象时,我应该避免相机校准.

到目前为止,我有2个2D图像,并具有所有特征点,匹配,good_matches,基本矩阵和同质矩阵.另外,我使用StereoBM计算了视差图.下一步应该是从所有这些值中获取3D点云.

我检查了互联网并找到了

Calib3d.reprojectImageTo3D(disparity, _3dImage, Q, false);
Run Code Online (Sandbox Code Playgroud)

使用这种方法,我应该能够重新创建3D点云......目前的问题是,我没有Matrix Q.我想我会从方法中得到这个

stereoRectify(...);
Run Code Online (Sandbox Code Playgroud)

但是因为我应该避免cameraCalibration用于这种特定情况,所以我不能使用这种方法.替代方案

stereoRectifyUncalibrated(...);
Run Code Online (Sandbox Code Playgroud)

不提供Q ...

有人可以帮助我,告诉我如何以更简单的方式获得Q或点云吗?谢谢

java android opencv disparity-mapping 3d-reconstruction

1
推荐指数
1
解决办法
981
查看次数