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

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>
            久久一区视频| 久久―日本道色综合久久| 亚洲午夜精品| 在线亚洲自拍| 一区二区三区国产精华| 亚洲美女91| 欧美三日本三级少妇三99| 亚洲网在线观看| 老牛影视一区二区三区| 亚洲一区二区三区视频| 亚洲电影网站| 亚洲国产欧美一区二区三区久久| 午夜视频在线观看一区二区三区| 亚洲国产国产亚洲一二三| 久久精品国产久精国产一老狼 | 国产在线欧美日韩| 在线电影国产精品| 99在线观看免费视频精品观看| 亚洲午夜av在线| 久久精品卡一| 亚洲黄色成人久久久| 亚洲麻豆国产自偷在线| 亚洲欧美日韩在线高清直播| 久久中文字幕一区二区三区| 欧美激情一二三区| 国产真实精品久久二三区| 亚洲精品视频一区| 久久精品国内一区二区三区| 日韩视频三区| 久久久久在线| 国产精品美女久久久免费| 亚洲国内精品| 久久久精品国产一区二区三区| 91久久国产精品91久久性色| 亚洲影音先锋| 欧美国产免费| 在线精品在线| 久久激五月天综合精品| 日韩视频欧美视频| 欧美国产亚洲另类动漫| 国产综合视频在线观看| 亚洲色诱最新| 亚洲国产人成综合网站| 久久精品99| 国产精品专区h在线观看| 99热免费精品| 亚洲国产第一| 久久综合狠狠| 在线成人黄色| 久久综合久久美利坚合众国| 亚洲欧美精品伊人久久| 国产精品久久波多野结衣| 一本到高清视频免费精品| 欧美激情精品久久久久久免费印度| 香港成人在线视频| 国产一区二区三区在线播放免费观看| 国产欧美精品日韩精品| 中文在线一区| 日韩视频精品在线| 欧美精品激情| 亚洲精品麻豆| 亚洲国产免费| 欧美成人在线免费观看| 亚洲福利视频专区| 欧美www视频| 久热精品视频在线观看| 亚洲国产高清视频| 欧美激情中文字幕乱码免费| 美女主播精品视频一二三四| 最新国产拍偷乱拍精品| 亚洲国产精品激情在线观看| 欧美黄免费看| 亚洲无线一线二线三线区别av| 亚洲久久视频| 亚洲三级影片| 免费人成精品欧美精品| 这里是久久伊人| 在线观看精品一区| 久久大逼视频| 欧美在线看片| 亚洲国产精品v| 亚洲精品久久久久中文字幕欢迎你| 欧美屁股在线| 午夜亚洲视频| 久久综合久久美利坚合众国| 亚洲乱码久久| 亚洲一区二区在| 有码中文亚洲精品| 99视频在线精品国自产拍免费观看| 国产精品美女在线| 美女诱惑黄网站一区| 欧美精品日韩一区| 国产精品永久在线| 亚洲人成亚洲人成在线观看| 亚洲人成人一区二区在线观看| 亚洲国产精品久久久久秋霞蜜臀| 欧美韩日一区| 国产精品久久999| 蜜桃精品一区二区三区| 欧美国产亚洲视频| 久久精品国产亚洲aⅴ| 欧美va亚洲va日韩∨a综合色| 亚洲在线观看免费视频| 久久欧美中文字幕| 午夜欧美理论片| 欧美sm重口味系列视频在线观看| 亚洲欧美清纯在线制服| 另类图片国产| 欧美在线观看视频在线| 欧美成人综合在线| 久久久久久91香蕉国产| 欧美精品一区二区三区视频| 久久久久久久久久久久久9999| 欧美日韩国产va另类| 欧美午夜精品久久久久免费视| 国产精品h在线观看| 毛片一区二区三区| 国产精品色在线| 亚洲国产精品久久人人爱蜜臀| 国产精品一级二级三级| 亚洲乱码一区二区| 亚洲精品日韩综合观看成人91| 久久久久国色av免费观看性色| 午夜精品久久久久久久久久久久| 欧美精品一区二区三区高清aⅴ| 免费黄网站欧美| 国产一区二区三区在线观看视频| 亚洲私拍自拍| 亚洲专区免费| 欧美体内she精视频在线观看| 亚洲国产精品一区二区第四页av | 亚洲欧洲一区二区天堂久久| 欧美一区二区三区喷汁尤物| 午夜精彩视频在线观看不卡| 欧美日韩久久| 日韩午夜在线观看视频| 99国产精品久久久久老师| 欧美激情网友自拍| 亚洲精品一区二区三区婷婷月| 亚洲国产婷婷综合在线精品| 久久久久久久尹人综合网亚洲| 久久久人人人| 1024亚洲| 欧美国产在线视频| 99精品国产福利在线观看免费 | 亚洲高清在线播放| 久久色中文字幕| 欧美成人激情视频免费观看| 亚洲国产精品久久久久久女王| 免费欧美日韩国产三级电影| 亚洲精品国偷自产在线99热| 中文国产亚洲喷潮| 国产精品久久一卡二卡| 亚洲在线一区| 久久久久免费| 91久久嫩草影院一区二区| 欧美国产一区视频在线观看| 99精品欧美一区二区三区| 篠田优中文在线播放第一区| 国产在线麻豆精品观看| 免费不卡在线观看| 亚洲裸体俱乐部裸体舞表演av| 午夜精品视频网站| 激情欧美一区二区| 欧美久色视频| 午夜精品久久久久久久白皮肤| 免费日韩视频| 亚洲香蕉在线观看| 韩国自拍一区| 欧美日韩免费观看一区=区三区| 中文日韩欧美| 欧美成人一品| 亚洲欧美日韩在线不卡| 在线观看亚洲专区| 欧美小视频在线| 国产精品成人播放| 在线观看日韩国产| 亚洲国产精品小视频| 欧美性色综合| 亚洲欧美在线一区| 欧美国产日韩免费| 欧美一级播放| 国产精品自拍视频| 性欧美videos另类喷潮| 亚洲无人区一区| 国产精品久久一级| 午夜精品久久久久久久久| 一区二区三区精密机械公司| 国产亚洲一区在线播放| 国产精品99久久久久久www| 欧美一区亚洲一区| 亚洲黄色三级| 国产日韩一区在线| 欧美三级视频在线播放| 免费av成人在线| 久久成人久久爱| 亚洲最快最全在线视频| 91久久久久久国产精品| 久久人91精品久久久久久不卡| 亚洲性线免费观看视频成熟|