Camera

 

| HOME | BACK |

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.

 Camera

/ Documant file of a Camera object

/ camera id
  0

/ camera name
  SONY digital camera no row = 1920 no col = 2560

/ calibrated focal length (mm)
  10.000

/ calibrated principal point coordinate (X Y)
  0.000 0.000

/ list of fiducial marks

/ ( -9 pixel size_x pixel size_y) (-9 k1 k2) (-9 A1 A2) (-9 p1 p2) (-9 k3 0)

  (-9   0.004   0.004)   (-9   0   0)   (-9   0   0)   (-9   0   0) (-9 0 0)

/ GPS offset (X Y Z)
  0 0 0

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  

 


| HOME | BACK |