Ask Your Question

rcarrasco's profile - activity

2015-02-02 02:00:57 -0600 commented question Stereo to point cloud

I can get the camera baseline and FOV, but I don't know how to compute x,y,z. Can you help me?

2015-01-30 07:56:43 -0600 asked a question Stereo to point cloud

Hi, I have a calibrated stereo camera with ROS package camera_calibration, and I would like convert images to point cloud.

I'm going to do this with opencv, with the function reprojectImageTo3D, but I need the Q matrix.

I found another function to calculate the Q matrix but I don't know some parameters:

My calibration data:

Right camera:

image_width: 640
image_height: 480
camera_name: 00b09d0100a8cd50
camera_matrix:
  rows: 3
  cols: 3
  data: [618.406355982753, 0, 328.938909311292, 0, 622.618018605044, 192.823847411511, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [-0.46935852500581, 0.495020825022316, 0.0069132704108347, 0.000957659601339344, 0]
rectification_matrix:
rows: 3
cols: 3
data: [0.987794979792204, 0.000360084570829607, -0.15575926372586, -0.00147162495744743, 0.999974269489065, -0.00702101700582399, 0.155752727800526, 0.00716454457124124, 0.987770093232116]
projection_matrix:
rows: 3
cols: 4
data: [2536.3424975867, 0, 419.49533700943, 112.802583009304, 0, 2536.3424975867, 207.939946174622, 0, 0, 0, 1, 0]

Left camera:

image_width: 640
image_height: 480
camera_name: 00b09d01009b8da3
camera_matrix:
  rows: 3
  cols: 3
  data: [1303.84092827502, 0, 305.740018425863, 0, 1314.11682894773, 177.738196152231, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
   rows: 1
   cols: 5
   data: [-0.151635456291086, 0.3629641480367, -0.00784184518383463, -0.000413869770118943, 0]
rectification_matrix:
   rows: 3
   cols: 3
   data: [0.98618892981478, -0.00296598739861576, -0.165597698140795, 0.0041481493735406, 0.999968321024829, 0.006793364671487, 0.165572303141417, -0.0073864650230178, 0.986169991718928]
projection_matrix:
 rows: 3
 cols: 4
 data: [2536.3424975867, 0, 419.49533700943, 0, 0, 2536.3424975867, 207.939946174622, 0, 0, 0, 1, 0]

How I obtain the R and T?

stereoRectify(InputArray cameraMatrix1, => camera_matrix_left
              InputArray distCoeffs1, => distortion_coefficients_left
              InputArray cameraMatrix2, => camera_matrix_right
              InputArray distCoeffs2, => distortion_coefficients_right
              Size imageSize, => size of the images
              InputArray R, => ??????
              InputArray T => ??????
              OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q)
2015-01-19 05:31:21 -0600 asked a question stereoRectify doubt

Hi, I want to use the function stereoRectify to get the Q matrix, but I don't know all the input parameters. How can I calculate the R and T parameters?

This is my calibration data:

Right camera:
camera_matrix: [634.909677387927, 0, 297.560249240374, 0, 634.865463121865, 158.8371760664, 0, 0, 1]

distortion_coefficients: [-0.504454260664395, 0.138609530989189, 0.0203198092295076, 0.00967761579645135, 0]

rectification_matrix: [0.966163280084709, -0.0083550378707894, -0.257795868000506, 0.00163860823321609, 0.999653878808556, -0.0262571427627996, 0.257926018809686, 0.0249462607455643, 0.965842561132921]

projection_matrix:
data: [6304.94671586074, 0, 473.495297431946, 280.518391789843, 0, 6304.94671586074, 167.603784561157, 0, 0, 0, 1, 0]

Left camera:   
camera_matrix: [1356.35752938346, 0, 261.669289951563, 0, 1361.87246183291, 152.711809345378, 0, 0, 1]

distortion_coefficients: [-0.288103120402993, 0.398595604261962, -0.00473618587860346, -0.0097855325627947, 0]

rectification_matrix: [0.968033107464518, -0.00309525870864915, -0.250803353697904, 0.00962260176867882, 0.999646030047709, 0.0248036316908628, 0.250637803189764, -0.0264241174569953, 0.967720237273577]

projection_matrix:[6304.94671586074, 0, 473.495297431946, 0, 0, 6304.94671586074, 167.603784561157, 0, 0, 0, 1, 0]

Thanks.

2015-01-13 01:45:09 -0600 received badge  Enthusiast
2015-01-09 06:17:07 -0600 received badge  Editor (source)
2015-01-09 01:53:24 -0600 asked a question Get Q matrix.

Hi, I'm new in opencv and I want to get the XYZ of a pixel. I have a stereo camera calibrated and I read that to obtain 3D coordinates used reprojectImageTo3D function, but I'm not sure how to get the parameter Q and disparity.

reprojectImageTo3D(InputArray disparity, OutputArray _3dImage, InputArray Q, bool handleMissingValues=false, int ddepth=-1 )

To get Q matrix, should I use stereoRectify function or is there another method?

UPDATE:

I try the next code to get the Q matrix:

#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
 cv::Mat R1;
 cv::Mat R2;
 cv::Mat P1;
 cv::Mat P2;
 cv::Mat Q;
 CvSize imageSize;
 Rect* validPixROI1=0;
 Rect* validPixROI2=0;
 imageSize.width = 640;
 imageSize.height = 480;

 float cam_matR[9] = {680.6194505553137, 0.0, 355.46071062373017, 0.0, 708.4327407870684, 166.020861837664, 0.0, 0.0, 1.0};
 float cam_matL[9] = {1443.36997726192, 0.0, 310.098678757853, 0.0, 1526.48462097625, -31.0051090142091, 0.0, 0.0, 1.0};
 float dist_cefR[9] = {-0.539747915499244, 0.40294694145911397, -0.014712916213760259, -0.035996511261222594, 0.0}; 
 float dist_cefL[9] = {-0.219030634019159, 0.607086354732134, -0.0559437412413443, 0.0274216517856112, 0.0};
 float _R[9] = {4347.70749725124, 0.0, 559.7353515625,0.0, 4347.70749725124, 134.066455841064,0.0, 0.0, 1.0};
 float _T[3] = {0.0,0.0,0.0};

 const cv::Mat cameraMatrixR = cv::Mat(3,3,CV_64F,cam_matR);
 const cv::Mat cameraMatrixL = cv::Mat(3,3,CV_64F,cam_matL);

 const cv::Mat distCoeffR = cv::Mat(1,5,CV_64F,dist_cefR);
 const cv::Mat distCoeffL = cv::Mat(1,5,CV_64F,dist_cefL);

 const cv::Mat R = cv::Mat(3,3,CV_64F,_R);
 const cv::Mat T = cv::Mat(1,3,CV_64F,_T);

 stereoRectify(cameraMatrixR, distCoeffR, cameraMatrixL, distCoeffL, imageSize, R, T, R1, R2, P1, P2, Q, 0, -1, );
}

And I get the next error:

OpenCV Error: Assertion failed ((D.rows == ((flags & CV_GEMM_A_T) == 0 ? A.rows : A.cols)) && (D.cols == ((flags & CV_GEMM_B_T) == 0 ? B.cols : B.rows)) && D.type() == A.type()) in cvGEMM, file /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/core/src/matmul.cpp, line 3150
terminate called after throwing an instance of 'cv::Exception'
 what():  /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140819-1745/modules/core/src/matmul.cpp:3150: error: (-215) (D.rows == ((flags & CV_GEMM_A_T) == 0 ? A.rows : A.cols)) && (D.cols == ((flags & CV_GEMM_B_T) == 0 ? B.cols : B.rows)) && D.type() == A.type() in function cvGEMM

Aborted (core dumped)
2015-01-08 09:26:17 -0600 received badge  Critic (source)
2015-01-07 08:13:34 -0600 commented answer Real world coordinates from a pixel

OK. In my application the work piece is not always the same. So I need XYZ coord of the pixel.

2015-01-07 06:39:45 -0600 commented answer Real world coordinates from a pixel

Nice work!! But how do you determine the depth?

2015-01-07 05:52:41 -0600 commented answer Real world coordinates from a pixel

I have a work piece with holes and I want to determine where are the holes to move the robot near it.

2015-01-07 03:04:30 -0600 commented answer Real world coordinates from a pixel

I can't use a reference point because the stereo are mounted in a robot arm. I read about other solution that use the opencv function reprojectImageTo3D() but I need the disparity array and Q matrix, but I'm not sure if I'm on the right direction.

2015-01-05 09:26:40 -0600 asked a question Real world coordinates from a pixel

Hi I'm new in opencv and I have a problem: I don't know which are the steps to obtain the pose an orientation (in the real world) to the one pixel of my image. I read about it but it is not clear for me. I have a calibrated camera stereo and I get the pixel coordinate of interest, but I don't know how to continue. Can anyone help me? Thanks!!