I'm following this explanation on the P3P problem and have a few questions.

  1. In the heading labeled Section 1 they project the image plane points onto a unit sphere. I'm not sure why they do this, is this to simulate a camera lens? I know in OpenCV, we first compute the intrinsics of the camera and factor it into solvePnP. Is this unit sphere serving a similar purpose?

  2. Also in Section 1, where did $u^{'}_x$, $u^{'}_y$, and $u^{'}_z$ come from, and what are they? If we are projecting onto a 2D plane then why do we need the third component? I know the standard answer is "because homogenous coordinates" but I can't seem to find an explanation as to why we use them or what they really are.

  3. Also in Section 1 what does "normalize using L2 norm" mean, and what did this step accomplish?

I'm hoping if I understand Section 1, I can understand the notation in the following sections.


  • $\begingroup$ Cross-posted: stackoverflow.com/q/47942857/781723, cs.stackexchange.com/q/85807/755. Please do not post the same question on multiple sites. Each community should have an honest shot at answering without anybody's time being wasted. $\endgroup$ – D.W. Mar 1 '18 at 21:06
  • $\begingroup$ Not sure what’s wrong with cross posting. Each community has a different speciality and as a question asker I want to maximize the probability of my question being answered by someone with appropriate knowledge. $\endgroup$ – Carpetfizz Mar 1 '18 at 21:10
  • $\begingroup$ Furthermore, this question isn’t as simple as “how do I do X in JavaScript” which has an obvious home in SO. If my problem domain is multidisciplinary, it makes perfect sense to appeal to different communities $\endgroup$ – Carpetfizz Mar 1 '18 at 21:12
  • $\begingroup$ That's our policy. It's not allowed on Stack Exchange sites. See the link I gave you for details about why; it would take too long to explain in a single comment. If you want to understand the policy in greater detail, feel free to head to Computer Science Meta to ask about it, but as it stands, if you want to participate in this community, you need to follow the policies established here. Thank you for your understanding. $\endgroup$ – D.W. Mar 1 '18 at 22:21

1 & 3. Not related to OpenCV. In this context, projecting into the unit sphere is the same as normalizing, which is making the vector's L2 norm (AKA the Euclidean norm or commonly marked as $||u||_2$ or in short $||u||$) equal 1. This is done to simplify the term in the beginning of step two: $\cos{\alpha} = \frac{v*u}{||u||\cdot||v||}=v*u$

2. Before you divide the vector with the focal length (distance between the plane and $P$), the projected point is a point in space that is on the image plane. This point would change if the focal length changes, but what you really want here is a point that is independent of the focal point, since it shouldn't matter to the pose of the $ABC$ triangle. Dividing with the focal length here is like changing the focal length to 1.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.