OpenSeeFace
OpenSeeFace copied to clipboard
Camera space origin is not at screen center
When a face is centered on camera the reported translation X and Y coordinates are not zeros. A possible reason for this is that the camera intrinsic matrix has offsets computed for the wrong axis when doing the position solving.
The camera matrix is
self.camera = np.array([[width, 0, width/2], [0, width, height/2], [0, 0, 1]], np.float32)
so that means c_x = width/2
and c_y = height/2
but then later image_pts
that is passed to solvePnP()
is a vector of (y,x)
points so self.camera
translates the Y coordinates with width/2
and vice-versa for the point X coordinates.
I'd submit a patch to fix this but the code is somewhat tricky so I'm not sure I'd get it right.
Thank you for the report. I'll look into it.
There does definitely seem something off, but like you noted, it's the code is a bit tricky and trying to adjust it in a simple way breaks things. I'll get back to it again.