PDS_VERSION_ID         = PDS3
RECORD_TYPE            = STREAM
OBJECT                 = TEXT
  PUBLICATION_DATE     = 2004-07-21
  INTERCHANGE_FORMAT   = ASCII
  NOTE                 = "GEOMETRIC_CM.TXT file for the Mars 
                          Science Laboratory Mastcam, MAHLI, 
                          and MARDI EDRs and RDRs."
END_OBJECT             = TEXT
END


Camera Model Parameters

The model names CAHV, CAHVOR, and CAHVORE (as provided by the label
keyword element, MODEL_TYPE), are based on the one-letter terms that
comprise the list of parameters for each model. Each of the parameters
(C, A, H, V, O, R, E) denoted by the label keyword element,
MODEL_COMPONENT_ID (and further expanded by the label keyword element
MODEL_COMPONENT_NAME), is a triplet of numbers specified by the
multiple MODEL_COMPONENT_# keyword element entries within the
label. One of these numbers is a cartesian point. Four are
3-vectors. The other two are sets of coefficients without a direct
spatial interpretation.

Two additional parameters (T, P) have been appended to the
MODEL_COMPONENT_ID keyword element in cases when the CAHVORE model is
used. Their values are provided by the MODEL_COMPONENT_8 and
MODEL_COMPONENT_9 keyword elements.

The interpretations of the (C, A, H, V, O, R, E, T, P) parameters are
described below . When reading these descriptions it would be good
to keep in mind that these interpretations are merely
approximations. They are based on the geometrical models that were
used when the camera models were designed. In so far as these models
do not accurately reflect the physical reality, the interpretations
will be wrong. In the final analysis the parameters are simply the
best least-squares fit to the input calibration data.

CAHV 
The parameters of the CAHV model (also known as the Yakimovsky &
Cunningham model) describe a linear, perspective-projection camera
model. They provide a mapping between an external 3D ("world")
coordinate system and a 2D image coordinate system. The 3D coordinate
system is arbitrary, and is chosen at calibration time. By convention
the 2D coordinate system has (0,0) in the middle of the upper-left
image pixel, with X increasing to the right and Y increasing
down. Given a 3D point P, the image coordinates may be computed as

             (P-C)*H         (P-C)*V 
         X = -------     Y = -------        
             (P-C)*A         (P-C)*A 

         (Note: * = vector dot product)

    * C: Center vector: MODEL_COMPONENT_1 
      The 3D position of the center of the entrance pupil, the image
      of the aperture stop when viewed from the front of the
      camera. It is the point toward which all image rays from the
      world appear to converge on entering the lens.

    * A: Axis vector: MODEL_COMPONENT_2
      A unit vector normal to the image plane and pointing outward. It
      is not, however, what most people mean by the pointing direction
      of the camera.  Most people would define the pointing direction
      as the ray that points out from the center (middle pixel) of the
      image. If the plane of the image sensor (e.g. CCD array) is not
      mounted such that it is orthogonal to and centered on the axis
      of optical symmetry, then the A vector will stay normal to the
      image plane and deviate from the pointing direction.  For all
      real-world cameras this is the norm.

    * H: Horizontal vector: MODEL_COMPONENT_3
      A vector pointing roughly rightward in the image, but actually a
      composite of several characteristics related to the horizontal
      dimension. A projection of this vector into the image plane,
      called H', shows how the horizontal image dimension (the rows)
      are oriented in 3D. The magnitude of this projection is, for an
      ideal thin lens, the distance between the lens center and the
      image plane, as measured in horizontal pixels; this value is
      called the Horizontal Scale, and is often written as Hs.
      (Contrary to what has been suggested elsewhere, Hs is not the
      focal length.) A projection of the H vector perpendicular to the
      image plane (parallel to the A vector) has a magnitude called
      the Horizontal Center, often written as Hc; this is the
      horizontal image coordinate directly under the lens center when
      moving parallel to the A vector. Since real image sensors can be
      mounted off center, this center value might be anywhere,
      including outside the bounds of the image, although it is
      usually within the central region of the image.

      H' = H-(A*H)A     Hs = |AxH|    Hc = A*H

      (Note: x = vector cross product)

    * V: Vertical vector: MODEL_COMPONENT_4
      A vector pointing roughly downward in the image, but actually a
      composite of several characteristics related to the vertical
      dimension. A projection of this vector into the image plane,
      called V', shows how the vertical image dimension (the columns)
      are oriented in 3D. The magnitude of this projection is, for an
      ideal thin lens, the distance between the lens center and the
      image plane, as measured in vertical pixels; this value is
      called the Vertical Scale, and is often written as Vs. (Contrary
      to what has been suggested elsewhere, Vs is not the focal
      length.) A projection of the V vector perpendicular to the image
      plane (parallel to the A vector) has a magnitude called the
      Vertical Center, often written as Vc; this is the vertical image
      coordinate directly under the lens center when moving parallel
      to the A vector. Since real image sensors can be mounted off
      center, this center value might be anywhere, including outside
      the bounds of the image, although it is usually within the
      central region of the image.

      V' = V-(A*V)A    Vs = |AxV|    Vc = A*V

Note that H' and V' are not necessarily exactly perpendicular to each
other. The angle between them, theta, is a measure of the spatial
relationship of the rows and columns. They are usually very close to
perpendicular, but have sometimes been observed to fall more than a
standard deviation away from that ideal.

                             (   VxH*A   ) 
               Theta = arctan(-----------) 
                             ((AxV)*(AxH))

CAHVOR
The new parameters of the CAHVOR model add radial (barrel or
pin-cushion) distortion on top of the previous linear model. This is a
characteristic of lenses that tends to become more important as the
field of view increases.

    * O: Optical vector: MODEL_COMPONENT_5
      A unit vector, pointing outward, that is the symmetry axis for
      the radial distortion. It should also be the symmetry axis for
      the lens system. It is not, however, what most people mean by
      the pointing direction of the camera. Most people would define
      the pointing direction as the ray that points out from the
      center (middle pixel) of the image. If the lens system is not
      mounted such that its symmetry axis is orthogonal to and
      centered on the image sensor, then these two directions will
      deviate from each. For all real-world cameras the O vector, the
      A vector, and the camera's pointing direction will all differ,
      although they will usually be close to one other.

    * R: Radial-distortion terms: MODEL_COMPONENT_6 
      The coefficients of the polynomial function used to model radial
      distortion. For more details, the following reference can be
      found at
 http://eis.jpl.nasa.gov/~telitwin/public-jpl/src/ccal/ccal-references.html.

            Least-Squares Camera Calibration Including Lens Distortion
            and Automatic Editing of Calibration Points, Donald
            Gennery. 2001.  Appears as chapter 5 in Calibration and
            Orientation of Cameras in Computer Vision, A. Grun and
            T. Huang, editors, Springer-Verlag, ISBN 3-540-65283-3,
            2001, pp. 123-136.

CAHVORE
The CAHVORE model departs from the previous models in two ways. The
first is that it adds to the model a representation of an entrance
pupil (see above) that moves as a function of the off-axis angle of
the incident light. But it also splits out into fundamentally
different types of lenses. The model types use all the same
parameters, but they differ in how some of those parameters are
interpreted. The types are

   1. Perspective-projection
   2. Fish-eye
   3. General

      The type-1 model is the most similar to CAHV and CAHVOR, merely
      adding the entrance pupil. The type-2 model reflects
      fundamentally different geometry. Fish-eye lenses are often used
      for very wide fields of view since perspective lenses are unable
      to reach 180 degrees, and in practice are much more narrow than
      that. Modeling the moving entrance pupil is usually important
      for fish-eye models. It is rarely needed for
      perspective-projection lenses, but is included for
      completeness. The type-3 model is a generalization that includes
      the first two. It requires a scalar floating-point parameter to
      specify it. If that parameter is 1, then the resulting model is
      identical to type-1. If it is 0, then it is identical to type-2.

    * E: Entrance-pupil terms: MODEL_COMPONENT_7
      The coefficients of the polynomial function used to model
      movement of the entrance pupil. For more details, the following
      references can be found at
 http://eis.jpl.nasa.gov/~telitwin/public-jpl/src/ccal/ccal-references.html.

            Computations for Generalized Camera Model Including
            Entrance Pupil Movement, Donald Gennery. May 23, 2001.

            Generalized Camera Calibration Including Fish-Eye Lenses
            Donald B. Gennery. 2002. JPL document clearance number
            03-0869.

    * T: CAHVORE Type (MTYPE): MODEL_COMPONENT_8
      To distinguish the various CAHVORE model types (e.g., CAHVORE-1,
      CAHVORE-2, CAHVORE-3), a parameter "T" is specified. It's value
      may be integers 1, 2, or 3 to coincide with CAHVORE-1,
      CAHVORE-2, or CAHVORE-3, repectively.

    * P: CAHVORE Parameter (MPARM): MODEL_COMPONENT_9
      "P" is an additional parameter to CAHVORE that specifies the
      Linearity of the camera model for the CAHVORE-3 case. It is an
      arbitrary floating-point number. A value of 0.0 results in a
      model equivalent to CAHVORE-2, while a value of 1.0 results in a
      model equivalent to CAHVORE-1.