相关疑难解决方法(0)

如何校准相机的焦距,平移和旋转给出四点?

我正试图在世界空间中找到相机的焦距,位置和方向.

因为我需要这是与分辨率无关的,我归我的图像坐标,以在范围[-1, 1]x,和一个稍小范围y(取决于纵横比).(0, 0)图像的中心也是如此.我已经纠正了镜头失真(使用k1k2系数),所以这不会进入图片,除了有时投掷xy稍微超出[-1, 1]范围.

作为给定,我在已知尺寸的世界空间中具有平面的固定矩形(以毫米为单位).保证矩形的四个角可见,并在图像中手动标记.例如:

std::vector<cv::Point3f> worldPoints = {
    cv::Point3f(0, 0, 0),
    cv::Point3f(2000, 0, 0),
    cv::Point3f(0, 3000, 0),
    cv::Point3f(2000, 3000, 0),
};
std::vector<cv::Point2f> imagePoints = {
    cv::Point2f(-0.958707, -0.219624),
    cv::Point2f(-1.22234, 0.577061),
    cv::Point2f(0.0837469, -0.1783),
    cv::Point2f(0.205473, 0.428184),
};
Run Code Online (Sandbox Code Playgroud)

实际上,我认为我试图解决的等式是(参见OpenCV文档中等价物):

  / xi \   / fx    0 \ /        tx \ / Xi \
s | yi | = | …
Run Code Online (Sandbox Code Playgroud)

c++ opencv opencv3.1

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

基本矩阵的分解:验证 R 和 T 的四种可能解决方案

我想使用 OpenCV 进行一些运动结构。到目前为止,我已经有了基本矩阵和基本矩阵。有了基本矩阵,我正在做 SVD 来获得 R 和 T。

我的问题是,我有 2 个可能的 R 解决方案和 2 个可能的 T 解决方案,这导致整体姿势有 4 个解决方案,其中 4 个解决方案中只有一个是正确的。我怎样才能找到正确的解决方案?

这是我的代码:

private void calculateRT(Mat E, Mat R, Mat T){

    Mat w = new Mat();
    Mat u = new Mat();
    Mat vt = new Mat();

    Mat diag = new Mat(3,3,CvType.CV_64FC1);
    double[] diagVal = {1,0,0,0,1,0,0,0,1};
    diag.put(0, 0, diagVal);

    Mat newE = new Mat(3,3,CvType.CV_64FC1);

    Core.SVDecomp(E, w, u, vt, Core.DECOMP_SVD); 

    Core.gemm(u, diag, 1, vt, 1, newE);

    Core.SVDecomp(newE, w, u, vt, Core.DECOMP_SVD);

    publishProgress("U: " …
Run Code Online (Sandbox Code Playgroud)

java opencv computer-vision

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

标签 统计

opencv ×2

c++ ×1

computer-vision ×1

java ×1

opencv3.1 ×1