MATLAB: Pixel position is bigger than image dimension or negative using pinhole camera model

cameracomputer visionpin hole cameraprotective camera

Hi there
I am having a problem with a simple code that uses the pinhole camera model. The problem is when I am trying to locate the pixel position in the image plane of a certain point in the scene it gives me weird results such as negative value or a number byend the image dimension. here is my code where x,y and z are the coordinate of the point I am interested in camx,camy and camz are the coordinate of the camera in the scene all in mm.Image resolution has 1440* 960 pixels (width *height), focal length is 40 mm. rotation matrix is identity because the camera is facing the scene as shown in the image . From the coordination above, the point should be right infront of the camera (Y is the distance from the camera to the house, X is right in the middel of the front view of the hous and z is the height of the camera as shown in the image below) and as a result the pixels should be roughly in the middle of the image but the results is [w,h]= [2970.6, 636.2].
I think i am doing something wrong in the translation matrix but i cant know what is ,
any help please
mathwork.jpg
x=1.067621626992524e+03;
y=-3.718505419300001e+03;
z=2848.17;
camx=-1871.14;
camy=-7763.71;
camz=2848.17;
F=40; % in millimetere
Pixelox=720;
Pixeloy=480;
Pixelx=0.025 ;
Pixely=0.025;
K=[F/Pixelx 0 0;0 F/Pixely 0;Pixelox Pixeloy 1];
R= [1 0 0;0 1 0;0 0 1];
t=[ x-camx y-camy z-camz];
P=[R;t]*K;
tem= [x y z 1]*P;
w=tem(1)/tem(3);
h=tem(2)/tem(3);

Best Answer

Here are a few errors that I can deduce from your description:
  1. You say that the point is "right in front of the camera" and that Y represents the distance from the camera to the house. Doesn't that mean that the y coordinate of the point should be positive while (x,z) should both be approximately equal to camx and camz? This is not the case with the data you've shown.
  2. If the Y axis points from the camera to the house, then the R matrix should not be identity. The first and second columns of R should point along the w-axis and h-axis of your image respectively. But with R=eye(3), the second column of R is instead pointing along the Y-axis toward the house and not along your h-axis.
  3. The camera parameter t should not depend on any particular (x,y,z). I think you meant instead to have,
t= [-camx,-camy,-camz].