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

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>
            国产精品乱码久久久久久| 久久精品视频免费观看| 亚洲欧美视频在线观看| 国产精品久久国产精品99gif| 亚洲欧洲精品成人久久奇米网| 欧美激情第六页| 欧美日韩国产bt| 欧美一区二区在线| 久久久久久自在自线| 日韩特黄影片| 亚洲欧洲av一区二区三区久久| 欧美日韩国产123| 另类欧美日韩国产在线| 欧美日韩专区在线| 亚洲精品永久免费| 午夜日韩激情| 亚洲视频在线播放| 久久躁日日躁aaaaxxxx| 亚洲欧美电影院| 欧美精品在线视频| 欧美一二三区精品| 欧美日本一区| 亚洲欧美日韩国产成人| 亚洲三级色网| 久久久久欧美精品| 亚洲精品乱码久久久久久久久| 亚洲国产精品激情在线观看| 亚洲天堂视频在线观看| 国产综合精品| 久久五月天婷婷| 中国女人久久久| 亚洲欧美文学| 一区二区激情| 久久久久九九视频| 亚洲欧美日韩精品综合在线观看| 欧美国产先锋| 欧美电影免费网站| 亚洲福利专区| 美女国产精品| 麻豆成人精品| 亚洲精品一级| 欧美日韩国产成人在线91| 一区二区三区产品免费精品久久75 | av成人国产| 性高湖久久久久久久久| 国产一在线精品一区在线观看| 欧美一级片久久久久久久| 亚洲一区二区在线免费观看视频| 久久综合给合| 日韩一级大片| 欧美呦呦网站| 99视频精品在线| 精品成人久久| 国产欧美一区二区三区视频| 美女主播精品视频一二三四| 在线亚洲电影| 亚洲精品看片| 羞羞色国产精品| 久久国产日本精品| 国产一区二区三区高清在线观看| 亚洲国产精品久久久久| 亚洲黄色在线| 午夜精品久久久久久久白皮肤| 亚洲裸体视频| 91久久久久久| 一本色道久久综合狠狠躁篇怎么玩 | 麻豆精品在线视频| 久久er精品视频| 国产精品国产三级国产aⅴ入口| 美乳少妇欧美精品| 最新日韩欧美| 亚洲激情国产| 一区二区日韩免费看| 亚洲综合精品四区| 性高湖久久久久久久久| 久久av一区二区三区| 久久久一二三| 国产精品视频免费一区| 国产精品久久二区| 国产午夜精品全部视频播放| 国产精品久久久久一区| 国产日韩综合一区二区性色av| 国产精品你懂的在线| 国产日韩欧美精品综合| 国产一区在线免费观看| 亚洲黑丝在线| 亚洲欧美日韩国产精品| 欧美一级夜夜爽| 男女av一区三区二区色多| 亚洲精品自在久久| 欧美午夜片在线观看| 日韩系列欧美系列| 欧美在线一区二区| 亚洲精品美女在线观看| 亚洲一区在线视频| 欧美chengren| 国产欧美日韩精品一区| 红桃视频国产一区| 久久九九全国免费精品观看| 国产精品久久久久久妇女6080| 黄色日韩网站| 久热国产精品| 久久一区二区三区av| 好吊视频一区二区三区四区| 亚洲欧美日韩综合一区| 亚洲自拍偷拍视频| 伊人影院久久| 亚洲视频一区| 亚洲精品影院在线观看| 蜜桃久久精品乱码一区二区| 国产日韩一区二区三区在线| 美女日韩在线中文字幕| 亚洲一区二区在| 亚洲无线视频| 国产欧美日韩在线观看| 欧美在线免费观看视频| 一区二区三区精品| 国产精品日本一区二区| 欧美一区在线看| 亚洲欧美精品一区| 国产视频亚洲| 欧美成ee人免费视频| 毛片基地黄久久久久久天堂| 亚洲国产精品视频| 亚洲日本成人女熟在线观看| 欧美激情一区二区| 亚洲欧美激情在线视频| 99精品免费视频| 亚洲欧美日韩国产综合在线 | 久久天天狠狠| 久久视频国产精品免费视频在线| 亚洲国产aⅴ天堂久久| 亚洲高清精品中出| 欧美日韩午夜剧场| 久久视频这里只有精品| 欧美日韩免费观看一区=区三区| 在线视频免费在线观看一区二区| 亚洲一区二区三区免费观看| 亚洲欧美日韩一区二区| 永久免费视频成人| 99精品久久久| 亚洲人成人一区二区三区| 亚洲无线视频| 一本色道久久综合狠狠躁的推荐| 欧美一级片一区| 午夜久久黄色| 国产精品福利网| 亚洲精品一区在线观看香蕉| 在线观看一区视频| 欧美一区二区三区婷婷月色| 亚洲在线第一页| 欧美日韩伦理在线| 久久久噜噜噜久久久| 欧美日韩视频专区在线播放 | 欧美mv日韩mv国产网站app| 久久精品123| 国产欧美日韩中文字幕在线| 亚洲视频一区二区| 亚洲一区二区黄| 国产精品久久久久91| 一二三区精品福利视频| 暖暖成人免费视频| 亚洲欧美在线观看| 麻豆免费精品视频| 红桃视频一区| 欧美日韩成人激情| 一本色道久久综合狠狠躁篇怎么玩| 亚洲自拍偷拍色片视频| 国产一区二区三区久久久| 久久久久国产精品人| 老色鬼久久亚洲一区二区| 亚洲精品乱码久久久久久黑人 | 极品尤物一区二区三区| 久久性色av| 亚洲免费人成在线视频观看| 美女精品网站| 欧美亚洲在线播放| 99精品99| 狠狠色狠狠色综合日日小说| 国产精品国内视频| 老司机成人在线视频| 亚洲精品国产系列| 国产精品久久久久久久一区探花 | 亚欧成人精品| 亚洲国产一区二区精品专区| 国产精品福利在线观看网址| 美女诱惑黄网站一区| 欧美在线视频二区| 亚洲在线中文字幕| 亚洲三级影院| 亚洲欧洲精品成人久久奇米网 | 国产精品www.| 欧美日韩高清区| 欧美激情精品久久久久久大尺度| 久久久久久久一区| 欧美一区在线视频| 久久久久九九视频| 久久综合给合久久狠狠色| 午夜精品成人在线| 欧美一区二区成人6969|