Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how to find pose data from 3x3 homography matrix ? #14

Open
maharshi114 opened this issue Aug 9, 2018 · 11 comments
Open

how to find pose data from 3x3 homography matrix ? #14

maharshi114 opened this issue Aug 9, 2018 · 11 comments

Comments

@maharshi114
Copy link

first of all, thank you for writing an April Tag code in python.
My camera calibration values are fx, fy, cx, cy = (1600.686892782011, 1598.3654331406094, 640, 480)
Homography: [[ 2.92529352e-01 1.25090562e-01 5.47693202e+00]
[-5.70424844e-01 4.61686531e-01 3.91037508e+00]
[-4.98269301e-04 -4.78715645e-04 1.06762929e-02]]
Center: [512.99941666 366.26712251]
Corners: [[434.15356445 344.89123535]
[529.65270996 270.08859253]
[607.72912598 391.94927979]
[496.40701294 462.09399414]]
my homography matrix is accurate or not? because of the Homography matrix value change continuously.
if this matrix is accurate then how to find Pose data from the 3x3 matrix?

@mzucker
Copy link
Member

mzucker commented Aug 9, 2018

Hi, please read through issue #10 – I hope you will find some helpful information there. Let me know if you still have questions after reading it.

@maharshi114
Copy link
Author

Thank you for quick replay.
somehow I manage to print pose matrix using camtest.py code
Detection 1 of 1:
Family: tag36h11
ID: 2
Hamming error: 0
Goodness: 0.0
Decision margin: 60.6518554688
Homography: [[-2.63700683e-02 -7.44275243e-01 1.26088787e+00]
[ 6.93561147e-01 -7.26055716e-02 2.31620847e+00]
[-3.56854414e-06 -1.90672384e-04 9.19281710e-03]]
Center: [137.16011768 251.95850647]
Corners: [[216.41851807 180.59469604]
[210.96052551 328.61419678]
[ 54.4800148 326.40319824]
[ 60.2931366 172.11759949]]
Pose: [[-0.12400197 -0.86445901 -0.48716951 -0.41820917]
[ 0.95202461 0.0347795 -0.3040387 -0.18913546]
[ 0.2797725 -0.50149876 0.81867353 1.33183182]
[ 0. 0. 0. 1. ]]
InitError: 11.5416902905
FinalError: 1.26238447089

as according to issue #10, the three values in the 4x4 pose matrix ( -0.41820917, -0.18913546, 1.33183182 ) show me the X, Y, and Z positions respectively.

but the value of Z is wrong in my case. The actual distance in my case is 0.9 meter.
my tag size is 0.16 meter.
after some observation, I figure out the in homography matrix the last value in matrix "9.19281710e-03" show me the accurate number in distance. Just multiplicate with 100 so final value (9.19281710e-03*100) = 0.919 meters with 1 to 2 mm accuracy.

so my question is, Why Pose matrix X, Y, and Z values show me wrong?
and what is homography matrix actually shows?

@mzucker
Copy link
Member

mzucker commented Aug 10, 2018

This article I wrote describes what a homography matrix is: https://mzucker.github.io/2016/10/11/unprojecting-text-with-ellipses.html

The homography matrix will not in general correspond directly to physical measurements because it is a product of the camera intrinsics and the pose of the tag. In this case, I believe the fact that the bottom-right entry resembles the distance you measured is a coincidence.

What are the dimensions (resolution) of the images you are detecting tags in, and how did you obtain the calibration values listed above?

@maharshi114
Copy link
Author

calibration values are find via calibrate_camera.py code. Click the image of the chessboard via Logitech C270 camera and run calibrate_camera.py code.
camera resolution = 640x480 pixels

@mzucker
Copy link
Member

mzucker commented Aug 10, 2018

I don't trust the camera calibration values you provided for that camera. For the vast majority of desktop webcams you would expect to see focal lengths (fx, fy) on the order of image width and optical center (cx, cy) towards the center of the image. So for that camera, I would expect fx,fy to be in the 500-800 range, and the (cx, cy) point to be much closer to (320, 240) (that is 640/2, 480/2).

If you attach your chessboard calibration images here, I can try verifying your calibration values.

@mzucker
Copy link
Member

mzucker commented Aug 10, 2018

I can't access that image on Google drive, but github accepts attachments to replies.

Note you must use multiple images to calibrate the camera. One is not sufficient! See for example https://github.com/swatbotics/apriltag/tree/master/images/mapping_feb_2014/calibration

@maharshi114
Copy link
Author

sorry for google drive link.
here it is the image file.
im3

@mzucker
Copy link
Member

mzucker commented Aug 10, 2018

Right, the problem as I mentioned above is that you are only using a single image file. See the example images I linked to in my last message to get an idea of the number and variety of images you should be using.

@maharshi114
Copy link
Author

Ok got it.
Thank you.. sir

@mzucker
Copy link
Member

mzucker commented Aug 10, 2018

I would recommend in the range of 10-20 images. You will not get good data with 2 or 3 images.

@maharshi114
Copy link
Author

Ok sir ..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants