Hi I have a question regarding the use of estimateWorldCameraPose and pointsToWorld of the Computer Vision Toolbox.
When I estimate the orientation and the location of the camera relative to the planar scene of points using estimateWorldCameraPose,
and then, using the camera orientation and postion thus obtained, I back-project the points to world coordinates (sans depth) using pointsToWorld,
why are the back-projected points inverted relative to the original world points?
The below code illustrates the question:
% Create a matrix of planar world points
[wx,wy]=meshgrid(0:20:100,0:40:200);worldPoints=[wx(:) wy(:) zeros(size(wy(:)))];% Remove one (so we can recognize the orientation later)
worldPoints(2,:)=[];% Create a set of image points. For this example they are the same as the world
% points (but 2D)
imagePoints=worldPoints(:,[1 2]);% Create arbitraty camera intrinsics
focalLength = [800, 800];principalPoint = [320, 240];imageSize = [480, 640];intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);% Estimate the orientation and the location of the camera relative to the planar
% scene of points
[worldOri,worldLoc] = estimateWorldCameraPose(worldPoints(:,[1 2]),worldPoints,intrinsics);% Using the estimates, back project the points to world coordinates (sans depth)
backProjectPoints = pointsToWorld(intrinsics,worldOri,worldLoc,imagePoints);% Plot the worldPoints and the back projection
figurescatter(worldPoints(:,1),worldPoints(:,2))hold onscatter(backProjectPoints(:,1),backProjectPoints(:,2))title('Why inverted?');
Best Answer