青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

How to tranform 2D image coordinates to 3D world coordinated with Z = 0?

http://answers.opencv.org/question/150451/how-to-tranform-2d-image-coordinates-to-3d-world-coordinated-with-z-0/
https://github.com/opencv/opencv/issues/8762

Hi everyone, I currently working on my project which involves vehicle detection and tracking and estimating and optimizing a cuboid around the vehicle. For that I am taking the center of the detected vehicle and I need to find the 3D world coodinate of the point and then estimate the world coordinates of the edges of the cuboid and the project it back to the image to display it.
So, now I am new to computer vision and OpenCV, but in my knowledge, I just need 4 points on the image and need to know the world coordinates of those 4 points and use solvePNP in OpenCV to get the rotation and translation vectors (I already have the camera matrix and distortion coefficients). Then, I need to use Rodrigues to transform the rotation vector into a rotation matrix and then concatenate it with the translation vector to get my extrinsic matrix and then multiply the extrinsic matrix with the camera matrix to get my projection matrix. Since my z coordinate is zero, so I need to take off the third column from the projection matrix which gives the homography matrix for converting the 2D image points to 3D world points. Now, I find the inverse of the homography matrix which gives me the homography between the 3D world points to 2D image points. After that I multiply the image points [x, y, 1]t with the inverse homography matrix to get [wX, wY, w]t and the divide the entire vector by the scalar w to get [X, Y, 1] which gives me the X and Y values of the world coordinates.
My code is like this:
image_points.push_back(Point2d(275, 204));
image_points.push_back(Point2d(331, 204));
image_points.push_back(Point2d(331, 308));
image_points.push_back(Point2d(275, 308));
cout << "Image Points: " << image_points << endl << endl;
world_points.push_back(Point3d(0.0, 0.0, 0.0));
world_points.push_back(Point3d(1.775, 0.0, 0.0));
world_points.push_back(Point3d(1.775, 4.620, 0.0));
world_points.push_back(Point3d(0.0, 4.620, 0.0));
cout << "World Points: " << world_points << endl << endl;
solvePnP(world_points, image_points, cameraMatrix, distCoeffs, rotationVector, translationVector);
cout << "Rotation Vector: " << endl << rotationVector << endl << endl;
cout << "Translation Vector: " << endl << translationVector << endl << endl;
Rodrigues(rotationVector, rotationMatrix);
cout << "Rotation Matrix: " << endl << rotationMatrix << endl << endl;
hconcat(rotationMatrix, translationVector, extrinsicMatrix);
cout << "Extrinsic Matrix: " << endl << extrinsicMatrix << endl << endl;
projectionMatrix = cameraMatrix * extrinsicMatrix;
cout << "Projection Matrix: " << endl << projectionMatrix << endl << endl;
double p11 = projectionMatrix.at<double>(0, 0),
    p12 = projectionMatrix.at<double>(0, 1),
    p14 = projectionMatrix.at<double>(0, 3),
    p21 = projectionMatrix.at<double>(1, 0),
    p22 = projectionMatrix.at<double>(1, 1),
    p24 = projectionMatrix.at<double>(1, 3),
    p31 = projectionMatrix.at<double>(2, 0),
    p32 = projectionMatrix.at<double>(2, 1),
    p34 = projectionMatrix.at<double>(2, 3);
homographyMatrix = (Mat_<double>(3, 3) << p11, p12, p14, p21, p22, p24, p31, p32, p34);
cout << "Homography Matrix: " << endl << homographyMatrix << endl << endl;
inverseHomographyMatrix = homographyMatrix.inv();
cout << "Inverse Homography Matrix: " << endl << inverseHomographyMatrix << endl << endl;
Mat point2D = (Mat_<double>(3, 1) << image_points[0].x, image_points[0].y, 1);
cout << "First Image ...

https://github.com/opencv/opencv/issues/8762


  • OpenCV => 3.2
  • Operating System / Platform => Windows 64 Bit
  • Compiler => Visual Studio 2015

Hi everyone, I understand that this forum is to report bugs and not to ask questions but I already posted about my problems in answers.opencv.org without any useful response. I need to resolve my problem very urgently since my final year project deadline is approaching soon.

I am currently working on my project which involves vehicle detection and tracking and estimating and optimizing a cuboid around the vehicle. For that I have accomplished detection and tracking of vehicles and I need to find the 3-D world coordinates of the image points of the edges of the bounding boxes of the vehicles and then estimate the world coordinates of the edges of the cuboid and the project it back to the image to display it.

So, I am new to computer vision and OpenCV, but in my knowledge, I just need 4 points on the image and need to know the world coordinates of those 4 points and use solvePNP in OpenCV to get the rotation and translation vectors (I already have the camera matrix and distortion coefficients). Then, I need to use Rodrigues to transform the rotation vector into a rotation matrix and then concatenate it with the translation vector to get my extrinsic matrix and then multiply the extrinsic matrix with the camera matrix to get my projection matrix. Since my z coordinate is zero, so I need to take off the third column from the projection matrix which gives the homography matrix for converting the 2D image points to 3D world points. Now, I find the inverse of the homography matrix which gives me the homography between the 3D world points to 2D image points. After that I multiply the image points [x, y, 1]t with the inverse homography matrix to get [wX, wY, w]t and the divide the entire vector by the scalar w to get [X, Y, 1] which gives me the X and Y values of the world coordinates.

My code looks like this:

#include "opencv2/opencv.hpp" #include <stdio.h> #include <iostream> #include <sstream> #include <math.h> #include <conio.h>  using namespace cv; using namespace std;  Mat cameraMatrix, distCoeffs, rotationVector, rotationMatrix, translationVector, extrinsicMatrix, projectionMatrix, homographyMatrix, inverseHomographyMatrix;   Point point; vector<Point2d> image_points; vector<Point3d> world_points;  int main() {     FileStorage fs1("intrinsics.yml", FileStorage::READ);     fs1["camera_matrix"] >> cameraMatrix;    cout << "Camera Matrix: " << cameraMatrix << endl << endl;     fs1["distortion_coefficients"] >> distCoeffs;    cout << "Distortion Coefficients: " << distCoeffs << endl << endl;          image_points.push_back(Point2d(275, 204));    image_points.push_back(Point2d(331, 204));    image_points.push_back(Point2d(331, 308));    image_points.push_back(Point2d(275, 308));     cout << "Image Points: " << image_points << endl << endl;     world_points.push_back(Point3d(0.0, 0.0, 0.0));    world_points.push_back(Point3d(1.775, 0.0, 0.0));    world_points.push_back(Point3d(1.775, 4.620, 0.0));    world_points.push_back(Point3d(0.0, 4.620, 0.0));     cout << "World Points: " << world_points << endl << endl;     solvePnP(world_points, image_points, cameraMatrix, distCoeffs, rotationVector, translationVector);    cout << "Rotation Vector: " << endl << rotationVector << endl << endl;    cout << "Translation Vector: " << endl << translationVector << endl << endl;     Rodrigues(rotationVector, rotationMatrix);    cout << "Rotation Matrix: " << endl << rotationMatrix << endl << endl;     hconcat(rotationMatrix, translationVector, extrinsicMatrix);    cout << "Extrinsic Matrix: " << endl << extrinsicMatrix << endl << endl;     projectionMatrix = cameraMatrix * extrinsicMatrix;    cout << "Projection Matrix: " << endl << projectionMatrix << endl << endl;     double p11 = projectionMatrix.at<double>(0, 0),    	p12 = projectionMatrix.at<double>(0, 1),    	p14 = projectionMatrix.at<double>(0, 3),    	p21 = projectionMatrix.at<double>(1, 0),    	p22 = projectionMatrix.at<double>(1, 1),    	p24 = projectionMatrix.at<double>(1, 3),    	p31 = projectionMatrix.at<double>(2, 0),    	p32 = projectionMatrix.at<double>(2, 1),    	p34 = projectionMatrix.at<double>(2, 3);      homographyMatrix = (Mat_<double>(3, 3) << p11, p12, p14, p21, p22, p24, p31, p32, p34);    cout << "Homography Matrix: " << endl << homographyMatrix << endl << endl;     inverseHomographyMatrix = homographyMatrix.inv();    cout << "Inverse Homography Matrix: " << endl << inverseHomographyMatrix << endl << endl;     Mat point2D = (Mat_<double>(3, 1) << image_points[0].x, image_points[0].y, 1);    cout << "First Image Point" << point2D << endl << endl;     Mat point3Dw = inverseHomographyMatrix*point2D;    cout << "Point 3D-W : " << point3Dw << endl << endl;     double w = point3Dw.at<double>(2, 0);    cout << "W: " << w << endl << endl;     Mat matPoint3D;    divide(w, point3Dw, matPoint3D);     cout << "Point 3D: " << matPoint3D << endl << endl;     _getch();    return 0; }

I have got the image coordinates of the four known world points and hard-coded it for simplification.image_points contain the image coordinates of the four points and world_points contain the world coordinates of the four points. I am considering the the first world point as the origin (0, 0, 0) in the world axis and using known distance calculating the coordinates of the other four points. Now after calculating the inverse homography matrix, I multiplied it with [image_points[0].x, image_points[0].y, 1]t which is related to the world coordinate (0, 0, 0). Then I divide the result by the third component w to get [X, Y, 1]. But after printing out the values of X and Y, it turns out they are not 0, 0 respectively. What am doing wrong?

The output of my code is like this:

Camera Matrix: [517.0036881709533, 0, 320;  0, 517.0036881709533, 212;  0, 0, 1]  Distortion Coefficients: [0.1128663679798094;  -1.487790079922432;  0;  0;  2.300571896761067]  Image Points: [275, 204;  331, 204;  331, 308;  275, 308]  World Points: [0, 0, 0;  1.775, 0, 0;  1.775, 4.62, 0;  0, 4.62, 0]  Rotation Vector: [0.661476468596541;  -0.02794460022559267;  0.01206996342819649]  Translation Vector: [-1.394495345140898;  -0.2454153722672731;  15.47126945512652]  Rotation Matrix: [0.9995533907649279, -0.02011656447351923, -0.02209848058392758;  0.002297501163799448, 0.7890323093017149, -0.6143474069013439;  0.02979497438726573, 0.6140222623910194, 0.7887261380159]  Extrinsic Matrix: [0.9995533907649279, -0.02011656447351923, -0.02209848058392758, -1.394495345140898;  0.002297501163799448, 0.7890323093017149, -0.6143474069013439, -0.2454153722672731;  0.02979497438726573, 0.6140222623910194, 0.7887261380159, 15.47126945512652]  Projection Matrix: [526.3071813531748, 186.086785938988, 240.9673682002232, 4229.846989065414;  7.504351145361707, 538.1053336219271, -150.4099339268854, 3153.028471890794;  0.02979497438726573, 0.6140222623910194, 0.7887261380159, 15.47126945512652]  Homography Matrix: [526.3071813531748, 186.086785938988, 4229.846989065414;  7.504351145361707, 538.1053336219271, 3153.028471890794;  0.02979497438726573, 0.6140222623910194, 15.47126945512652]  Inverse Homography Matrix: [0.001930136511648154, -8.512427241879318e-05, -0.5103513244724983;  -6.693679705844383e-06, 0.00242178892313387, -0.4917279870709287;  -3.451449134581896e-06, -9.595179260534558e-05, 0.08513443835773901]  First Image Point[275;  204;  1]  Point 3D-W : [0.003070864657310213;  0.0004761913292736786;  0.06461112415423849]  W: 0.0646111  Point 3D: [21.04004290792539;  135.683117651025;  1] 





posted on 2017-11-17 14:40 zmj 閱讀(700) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品亚洲| 欧美在线日韩| 国产精品一区二区三区成人| 欧美日产一区二区三区在线观看| 久久免费一区| 欧美 日韩 国产精品免费观看| 校园春色综合网| 久久国产福利| 欧美aⅴ一区二区三区视频| 噜噜噜久久亚洲精品国产品小说| 狂野欧美激情性xxxx欧美| 免费亚洲一区二区| 欧美日韩精品一本二本三本| 国产精品久久福利| 国产亚洲成精品久久| 亚洲福利视频在线| 亚洲视频欧美视频| 久久国产乱子精品免费女| 免费在线成人| 日韩天天综合| 久久九九热免费视频| 欧美v日韩v国产v| 欧美性大战xxxxx久久久| 国产日韩在线一区| 亚洲人成免费| 欧美在线www| 欧美电影免费网站| 亚洲一区二区黄色| 欧美成人第一页| 国产免费观看久久| 亚洲精品在线观看免费| 欧美影视一区| 亚洲人久久久| 篠田优中文在线播放第一区| 欧美国产亚洲精品久久久8v| 国产精品久线观看视频| 亚洲精品123区| 欧美一区在线视频| 亚洲精选一区| 麻豆国产精品va在线观看不卡| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 欧美亚洲一区在线| 欧美aⅴ99久久黑人专区| 国产精品亚洲片夜色在线| 亚洲国产天堂久久综合网| 午夜精品久久久久久久99水蜜桃| 亚洲国产精品小视频| 久久精品夜色噜噜亚洲aⅴ| 国产精品成人一区二区三区吃奶| 亚洲国产综合在线| 男女精品视频| 久久精品国产免费观看| 亚洲综合成人婷婷小说| 欧美日韩p片| 最新国产乱人伦偷精品免费网站| 久久国产精品高清| 亚洲欧美久久久| 国产精品日韩高清| 亚洲欧美日韩区| 在线视频中文亚洲| 欧美三级视频在线观看| 一本久道久久综合中文字幕| 亚洲国产综合在线看不卡| 久久这里有精品15一区二区三区 | 欧美激情第4页| 亚洲人成7777| 亚洲黄色精品| 欧美大片国产精品| 亚洲精品视频在线播放| 亚洲国产另类久久久精品极度| 久久久青草婷婷精品综合日韩| 狠狠爱综合网| 欧美成人精品在线视频| 蜜桃av一区二区| 亚洲人成在线播放| 亚洲精品影视在线观看| 欧美午夜电影完整版| 亚洲一区二区在| 亚洲一级片在线看| 国产欧美一区二区三区视频| 久久久久高清| 欧美www视频| 亚洲一区欧美一区| 亚洲欧美中文另类| **欧美日韩vr在线| 亚洲精品视频免费观看| 国产精品你懂的在线欣赏| 久久国产主播精品| 韩国精品久久久999| 免费的成人av| 欧美日韩大片一区二区三区| 亚洲欧美区自拍先锋| 久久国产精品99国产| 亚洲巨乳在线| 亚洲欧美日韩精品久久久| 在线观看欧美日韩国产| 亚洲九九九在线观看| 国产日韩欧美自拍| 亚洲国产黄色| 国产精品无码永久免费888| 麻豆av福利av久久av| 欧美伦理影院| 午夜伦理片一区| 你懂的一区二区| 欧美不卡一卡二卡免费版| 亚洲四色影视在线观看| 久久精品一区四区| 亚洲一区二区在| 久久夜色精品国产欧美乱极品| 一区二区日本视频| 久久久久国产精品一区三寸| 亚洲一二区在线| 欧美国产综合视频| 久久亚洲影院| 国产日韩视频| 亚洲欧美国产另类| 亚洲综合不卡| 欧美久久久久久| 欧美大胆a视频| 伊人影院久久| 久久精品国产成人| 久久久水蜜桃| 国语对白精品一区二区| 性欧美18~19sex高清播放| 亚洲欧美成人一区二区在线电影 | 亚洲国产精品va在线观看黑人| 欧美亚洲视频在线看网址| 亚洲综合色激情五月| 欧美日韩日日骚| 亚洲精品在线二区| 亚洲精品视频二区| 欧美精品aa| 亚洲黄页视频免费观看| 亚洲欧洲偷拍精品| 美日韩精品视频| 欧美国产三区| 激情综合电影网| 欧美国产日本| 国产精品高清网站| 亚洲片在线资源| 亚洲精品一区在线观看香蕉| 欧美伊人久久大香线蕉综合69| 一区二区三区波多野结衣在线观看| 久久久精品日韩欧美| 亚洲精品中文字幕在线| 欧美大胆成人| 亚洲第一毛片| 91久久精品国产91久久| 久久久久se| 亚洲国产精选| 亚洲精品视频中文字幕| 嫩草影视亚洲| 亚洲国产成人久久综合一区| 国产精品日本一区二区| 国产精品99久久久久久www| 黑人巨大精品欧美一区二区| 久久综合网hezyo| 久久综合成人精品亚洲另类欧美| 国产九色精品成人porny| 亚洲午夜激情网站| 你懂的国产精品永久在线| 伊人影院久久| 免费观看30秒视频久久| 欧美α欧美αv大片| 亚洲精品国产精品乱码不99 | 欧美日韩国产黄| 亚洲人成7777| 在线午夜精品| 久久精品亚洲一区| 亚洲毛片一区二区| 亚洲视频第一页| 国产精品成人一区二区三区夜夜夜 | 久久精品国产视频| 久久午夜精品一区二区| 国精产品99永久一区一区| 久久噜噜噜精品国产亚洲综合| 欧美va亚洲va日韩∨a综合色| 国产农村妇女精品一二区| 欧美不卡在线视频| 一区二区三区视频在线播放| 欧美一区二区三区的| 在线观看国产精品网站| 久久aⅴ国产紧身牛仔裤| 欧美激情日韩| 久久夜色精品国产噜噜av| 亚洲国产天堂久久国产91| 欧美日韩一区在线观看视频| 午夜国产精品视频免费体验区| 亚洲精品国偷自产在线99热| 午夜精品www| 亚洲福利视频网站| 国产精品久久久久久一区二区三区 | 午夜一区在线| 亚洲第一黄网| 国产欧美综合在线| 免费欧美网站| 亚洲一区二区四区| 欧美激情亚洲自拍| 免费观看欧美在线视频的网站| 一本久道久久综合中文字幕|