Sorry for being a bit off-topic, but I know that many people here use
the opencv camera model, for example with Nicolas' RGBDemo.
The Kinect has fx and fy values around 500 to 700. What's the unit of
fx/fy?
According to the OpenCV book, fx = F*sx, and sx is something like px/mm
or px/m, depending on what the user chooses.
When using the calibration.cpp example shipped with opencv, it is
possible to set the square size of the checkerboard in a user-defined
unit. Until yesterday, I thought that this would set the unit of the
fx / fy values in the camera matrix. But fx/fy don't change with
changing square-size.
I am sure I miss something quite obvious, but still I'm stuck since
yesterday.. Thanks in advance for help!
Kai
thank you for your answer. I checked it and you are right :-) Strange,
that the OpenCV book states something different (p.373).
If I dont care about another coordinate system, it should be possible to
use a coordinate system that uses the same origin and orientation as the
camera system, isn't it? Then, all I need would be the scaling
mm <-> px.
Can you tell me, where the second coordinate system's origin is, that
the opencv calibration procedure uses and calculates R and T for? (Is it
somehow object-fixed, but to what object, then? -> p. 379)
You are really helping me with your answer, thanks again.
Kai
>
>
> Usually when using a chessboard to calibrate a camera, we choose a
> corner of the chessbord as the origin of the "world" coordinate
> system . the plane of the chessbord is usually considered as the plane
> z = 0. Since the purpose of this is just to compute the intrinsic
> parameters, you can consider any world coordinate system you want. The
> choice of using one fixed to the chessboard is just to ease things.
Ok, that makes sense: Opencv returns a rotation and translation vector
for every view ( every chessboard) used during calibration.
> Once you have computed this parameters, you can consider any "world"
> coordinate system you want. If you choose to consider the camera
> coordinate system to be the world one, then the geometric
> transformation (rotation and translation) will be equal to identity.
> So, to get pixel coordinates, you need, as you said, to transform
> metric coordinates into pixels :
>
If I chose that simple way
>
> u = fx * x/z + u0;
> v = fy * y/z + v0;
>
>
, I still lack the conversion factor between px and mm. Is it possible
to retrieve it from the extrinsics provided by the calibration
procedure?
Or do I need to implement a second step where I take a picture of a
chessboard whose position (and R and t) is known to me, so that I can
calculate a conversion factor from those and the returned extrinsics?
Cheers,
Kai
> u = fx * x/z + u0;, I still lack the conversion factor between px and mm. Is it possible
> v = fy * y/z + v0;
>
>
to retrieve it from the extrinsics provided by the calibration
procedure?
Or do I need to implement a second step where I take a picture of a
chessboard whose position (and R and t) is known to me, so that I can
calculate a conversion factor from those and the returned extrinsics?