Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV: Calculate angle between camera and pixel

I'd like to know how I can go about calculating the angle of some pixel in a photo relative to the webcam that I'm using. I'm new to this sort of thing and I'm using a webcam. Essentially, I take a photo, process it, and I end up with a pixel value in the image that is what I'm looking for. I then need to somehow turn that pixel value into some meaningful quantity---I need to find a line/vector that passes through the pixel and the camera. I don't need magnitude, just phase.

How does one go about doing this? Is camera calibration necessary? I've been reading a bit about it but am unsure.

Thanks

like image 906
Jean-Luc Avatar asked Jul 06 '13 03:07

Jean-Luc


1 Answers

Recipe:

1 - Calibrate the camera, obtaining the camera matrix K and distortion parameters D. In OpenCV this is done as described in this tutorial.

2 - Remove the nonlinear distortion from the pixel positions of interest. In OpenCV is done using the undistortPoints routine, without passing arguments R and P.

3 - Back-project the pixels of interest into rays (unit vectors with the tail at the camera center) in camera 3D coordinates, by multiplying their pixel positions in homogeneous coordinates times the inverse of the camera matrix.

4 - The angle you want is the angle between the above vectors and (0, 0, 1), the vector associated to the camera's focal axis.

like image 183
Francesco Callari Avatar answered Sep 19 '22 12:09

Francesco Callari