Camera |
Overview
A camera object is used in association with a photo object, and it provides necessary data for interior orientation of a photo.
In classical aerial analog camera, the format of a camera is indirectly expressed by a set of coordinates of fiducial marks.
In modern digital cameras, where the size of the pixel is known, and there is no fiducial mark as in an analog camera sense, the 4 corners of the photo could be regarded as fiducial marks. In other words, we can set the coordinate of the photo center to (0,0) and compute coordinates of corner points based upon the pixel size and the width and height of the photo. Once the coordinates of the LL and UR corners are set, coordinates of all other pixels in the photo can be computed. We can think of this resulting coordinate reference system as fiducial coordinate system in the analog camera sense. There is no need to do a measurement like the traditional aerial photo.
For a digital camera, the fiducial coordinates are interpreted as distortion parameters, using the following rule:
· x y coordinate of the 1st given fiducial mark is pixel size in x and pixel size in y direction
· x y coordinate of the 2ndgiven fiducial mark is k1 and k2
· x y coordinate of the 3rd given fiducial mark is A1 and A2
· x y coordinate of the 4th given fiducial mark is p1 and p2
· x coordinate of the 5th given fiducial mark is k3
In order to enable Noobeed to recognize a digital camera, point IDs must be LESS THAN zero. If more than 5 points are given, only the first five points are relevant.
The following is an example of a digital camera documentation file.
|
For an analog camera, all fiducial marks must have an ID, an integer number, and x y coordinates and standard deviation, if known, otherwise just omit it. When measuring, the sequence of measurement does not have to follow that appear in the fiducial mark vector. However, the user must make sure that he or she measures the same point and calls it the same way as that in the fiducial mark vector.
On the other hand, for a digital camera, fiducial mark data are interpreted as lens distortion parameters. There are 7 parameters, namely, k1, A1, p1, k2, A2, p2 and k3. These parameters are given into Noobeed via fiducail mark data, like this: (pt_no pixel_size_x pixel_size_y) (pt_no k1 k2) (pt_no A1 A2) (pt_no p1 p2) (pt_no k3 not_use). We can see that the first point of fiducial coordinate is the pixel size in x and y direction. The second point is the k1 and k2 parameters, and so forth. The point numbers do not matter here and can be arbitary numbers.
The X Y axis in the camera calibration report defines the fiducial mark
coordinate system. This system is a reference system, in which the
coordinates of fiducial marks and the calibrated principal point coordinates are
referred to. This system can refer to any point as its origin, it does not
matter, as long as it is a right hand coordinate system. Some
calibration reports make the so-called PPA (Principal Point of Auto-collimation)
as the origin. Don't be confused by the name PPA, it is just a physical
fixed point of a camera.
The most important point that we really want for the photo coordinate system origin is the so-called calibrated principal point (Principal Point of Symmetry, PPS). Its coordinate referred to the fiducial coordinate system must be given, otherwise the default is x = 0, and y = 0.
Radial distortion is given as a list of X Y coordinates, where X represent
radial distance and Y is for radial distortion. It is very important
that the unit of lens distortion values provided by user be the same as unit of
photo coordinate system, inherited from the unit of fiducial mark coordinates,
and focal length. For example if focal length has a unit of millimeter,
the unit of lens distortion must be millimeter too, not micrometer.
If radial distance is not available, but rather the field angles are given, then
they must be converted to radial distances, using the following formula:
r = c tan(theta)where c = focal length
theta = the field angle, which is an angle at the projection center between the camera axis, line perpendicular to the photo, and the image rays.
Member data
Name | Data type | Meaning |
id | int | ID of camera |
name | String | name of camera |
focal | double | focal length of camera (more correct, calibrated principal distance) |
pp | double | coordinate of principal point (in the fiducial mark coordinate system) |
vecfiducial | VecIdPt2D | a vector contains a list of
fiducial mark numbers and their coordinates In case of the digital camera, this vector is used to store pixel size and lens distortions. |
vecrdd | VecPt2D | a vector contains a list of radial lens distortion |
GPSoffset | Pt3D | coordinate of GCP receiver center point |
Operator
no operator provided
Construction function
{Camera} ret = CAMERA([{double} argm1, {VecIdPt2D} argm2])
argm1 = focal length (default = 150)
argm2 = a vector of fiducial marks' ID and coordinates (default = a list of vector of
IdPt2D points, as follows
99991 x= -115 y = 115
99992 x= 115 y = 115
99993 x= -115 y = -115
99994 x= 115 y = -115)
Example:
->cam1 = Camera() | a default camera. |
->cam2 = Camera(150.027) |
a camera with focal length |
Lfunction
object.ID() = {int} left-value
object.NAME() = {String} left-value
object.FOCAL() = {double} left-value
object.PP() = {Pt2D} left-value
object.VECFIDUCIAL() = {VecIdPt2D} left-value
object.VECRDD() = {VEcPt2D} left-value
object.GPSOFFSET() = {Pt3D} left-value
Example:
->cam2.pp() = Pt2D(0.002,0.015) | set coordinate of principal point |
Class function
COR_RDD | FOCAL | GPSOFFSET | ID | INIT | LOAD |
NAME | PP | SAVE | VECFIDUCIAL | VECRDD |