Can I estimate camera intrinsics using a single image with known image-world correspondences?

17 views (last 30 days)
I have an image with a customized pattern (not a checkerboard), so I have a few image-world point correspondences. I want to estimate the camera intrinsics so that I can undistort the image. I know there is a function "estimateCameraParameters" which does what I want to do, but the input parameters imagePoints and worldPoints must be from at least two images. Can I estimate camera intrinsics using a single image? If so, are there any functions in Matlab I can use? What is the minimum required number of image-world correspondences? Thank you!

Answers (1)

Anagha Mittal
Anagha Mittal on 17 Oct 2024
Hi Tao,
There doesn't seem to be a direct way to find intrinsics using a single image. As you mentioned, the "estimateCameraParameters" function requires two images.
As an alternative, please try using the "estimateCameraProjection" function which will give you the camera projection. Please refer to the following documentation:
After that, to estimate the camera intrinsics using the camera projection model, you can use the relationship between 3D world coordinates and 2D image coordinates. This involves using the camera projection matrix, which describes how 3D points are projected onto a 2D image plane.
The general camera projection model is:
x=P⋅X
Where:
  • x = [u, v, 1]^T are the homogeneous 2D image coordinates (in pixel units),
  • X = [X, Y, Z, 1]^T are the homogeneous 3D world coordinates,
  • P = the camera projection matrix (a 3x4 matrix that encodes both intrinsic and extrinsic parameters).
The projection matrix P can be written as:
P=K⋅[R∣t]
Where:
  • K is the intrinsic matrix,
  • [Rt] is the extrinsic matrix, with R as the rotation matrix and t as the translation vector.
Hope this helps!

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!