ISIS Application Documentation
    Map project a cube without a camera model
  
 
          Description
        
    
      This program will map project a raw instrument cube without a
      camera model. However, the lack of a camera model requires
      latitude/longitude information at each pixel in the
      raw cube. This must be facilitated through a latitude cube and longitude cube
      with the same size as the raw instrument cube.
     
    
      The procedure to project the input cube is output driven. That is, we
      create an output map cube (as specified by the user) and at each output
      pixel, compute its projected latitude/longitude using the projection
      parameters. Using this coordinate we must search for that position in
      the two input cubes (latitude/longitude). If found, we will have a
      sub-pixel location that has a 1-1 correspondence with the raw instrument
      pixel. An interpolator (nearest neighbor, bilinear, or cubic convolution)
      is then used to compute a value for the output pixel.
     
    
      Therefore, the root of the problem is finding the latitude/longitude in the 
      two input cubes as it is a 2-dimensional search. We do this by first
      creating two polynomial functions of a user-specified order (DEGREE), one
      for sample and one for line. These functions, f(lat,lon) = sample and
      g(lat,lon) = line, are derived using a least-squares computation by
      collecting a sparse set of control points (line,samp)-to-(lat,lon). The
      sparseness is controlled by the SINC and LINC. Unfortunately, the
      polynomial is not accurate enough to supply the mapping to sub-pixel
      accuracy. The level of errors between the control points and the derived
      equations can be written to the RESIDUAL file for examination.
     
    
      To achieve sub-pixel accuracy, we use the polynomials to get us close
      (generally within 6 pixels). Using this estimated location, two affine
      transforms are computed by collecting a small 3x3 window of control
      points. These equations are used to further refine the estimated location.
      We iterate this process until our estimated sample/line is within an
      acceptable tolerance (TOLERANCE) of latitude/longitude values contained
      in the two cubes (LATCUBE/LONCUBE) or until the number of iterations is 
      exceeded (ITERATIONS).
     
    
      Defining the output map projection is controlled as follows:
       
        - ProjectionName - Should be specified by the map file
 
        - TargetName -  Will be searched for in the FROM cube or can be
          specified by the user.
        
 
        - EquatorialRadius and PolarRadius- Will be automatically computed
          from NAIF kernels or can be specified by the user.
        
 
        - LatitudeType - Will be read from the map file if available,
          otherwise will be set to the latitude type of the
          LATCUBE
 
        - LongitudeDirection - Will be read from the map file if available,
          otherwise will be set to the longitude direction of the
          LONCUBE
 
        - LongitudeDomain - The longitude domain will be 0-360 by
          default.
 
        - MinimumLatitude - Can be computed from the LATCUBE, read from the
          map file or user specified.
 
        - MaximumLatitude - Can be computed from the LATCUBE, read from
          the map file or user specified.
 
        - MinimumLongitude - Can be computed from the LONCUBE, read from
          the map file or user specified.
 
        - MaximumLongitude - Can be computed from the LONCUBE, read from
          the map file or user specified.
 
        - Scale or PixelResolution - Can be computed1
           from the input, read from the map file, or user specified in either meters/pixel
          (PixelResolution) or pixels/degree (Scale)
 
       
    
      
        1To compute the scale we find the number of pixels from pixel (1, 1)
        to pixel (nsamples, nlines) in the input cube:
        sqrt[(nsamples-1)2 + (nlines-1)2]
        And the angle across this line:
        acos(cos(latitude_point1) * cos(latitude_point2) * cos(longitude_point1 - longitude_point2) + sin(latitude_point1) * sin(latitude_point2))
        The scale is equal to the number of pixels divided by the angle in pixels per degree.
      
    
      If the program is run on an image with a camera model contained in the label, 
      much of the model information is deleted in the output cube.  This avoids display 
      conflicts between the built in display solution of the camera model and that 
      generated by the projection function.
     
    
      This application fails to produce correct output with smaller cubes sized 5x1, 1x5 or smaller. 
      The error message provided is: "**ERROR** Unable to solve-least squares using QR Decomposition.
      The upper triangular R matrix is not full rank in LeastSquares.cpp at 402."
      This issue occurs because there is not enough information provided by small cubes for the equations used.
     
   
 
          Categories
        
 
              History
          
| Noah Hilt | 2008-08-01 | 
      Original Version
     | 
 
| Christopher Austin | 2009-01-27 | 
      Fixed parameter names
     | 
 
| Noah Hilt | 2009-03-02 | 
      The min/max longitude/latitude are now converted from the input domain to 
      the map file's domain if necessary.
     | 
 
| Travis Addair | 2009-08-10 | 
      Mapping group parameters are now placed into the print file.
     | 
 
| Annie Howington and Tracie Sucharski | 2012-01-13 | 
      Updated documentation.
     | 
 
| Tracie Sucharski | 2012-12-06 | 
      Changed to use TProjection instead of Projection.  References #775
     | 
 
| Sasha Browsnberger | 2015-02-12 | 
      If it exists, certain camera model information is removed from the label in the output image.
     | 
 
| Kristin Berry | 2015-07-22 | 
      Added NaifStatus::CheckErrors() to see if any NAIF errors were signaled. References #2248
     | 
 
| Jeannie Backer | 2016-05-10 | 
      Replaced calls to NAIF routines (bodn2c and bodvar) with call to static method
      Isis::Target::radiiGroup. References #3934
     | 
 
| Curtis Rose | 2016-05-16 | 
      Fixed an issue with small cubes (9x9 or less) causing application to become stuck in an infinite loop. References #2284.
      Also added to the description a message about why the application fails on small cubes (5x1, 1x5, or less).
     | 
 
 
 | 
 
 
                Parameter Groups
            
Files
| 
                    Name
                     | 
                    Description
                     | 
 
| FROM | 
          Input cube to be mapped
         | 
 
| LATCUBE | 
          Input cube to read latitude values
         | 
 
| LATTYPE | The latitude type | 
 
| LONCUBE | 
          Input cube to read longitude values
         | 
 
| LONDIR | The longitude direction | 
 
| TO | 
            Newly mapped cube
           | 
 
 
Polynomial Fit
| 
                    Name
                     | 
                    Description
                     | 
 
| DEGREE | Degree of polynomial functions | 
 
| SINC | Sample Increment | 
 
| LINC | Line Increment | 
 
| RESIDUALS | File to write residuals to | 
 
| NOWARP | Specify whether or not to warp the image | 
 
 
Mapping
| 
                    Name
                     | 
                    Description
                     | 
 
| MAP | 
          File containing mapping parameters
         | 
 
| PIXRES | 
          Defines how the pixel resolution in the output map file
          is obtained
         | 
 
| RESOLUTION | Pixel resolution | 
 
| TARGET | The target planet to map from/to | 
 
| EQURADIUS | Equatorial radius of target | 
 
| POLRADIUS | Polar radius of target | 
 
 
Output Map Ground Range
Affine Correction
| 
                    Name
                     | 
                    Description
                     | 
 
| TOLERANCE | Geometric tolerance in pixels | 
 
| ITERATIONS | The number of iterations to meet tolerance | 
 
 
Interpolation
| 
                    Name
                     | 
                    Description
                     | 
 
| INTERP | Type of interpolation | 
 
 
 | 
 
Files:
                        FROM
                         Description
                       
          This will specify the raw instrument cube to be mapped.
        
| 
                             Type
                            | cube | 
| 
                               File Mode
                              | input | 
| 
                               Filter
                              | 
          *.cub
         | 
 
 
Files:
                        LATCUBE
                         Description
                       
          The DN values from this cube will be used as the latitude values for
          the input cube.  The number of  samples and lines must match the FROM
          cube.
        
| 
                             Type
                            | cube | 
| 
                               File Mode
                              | input | 
| 
                               Filter
                              | 
          *.cub
         | 
 
 
Files:
                        LATTYPE
                         Description
                       
          Specify the latitude type, as either planetographic latitude
          or planetocentric latitude.
        
| 
                             Type
                            | string | 
| 
                               Default
                              | 
          PLANETOCENTRIC
         | 
| 
                               Option List:
                              | 
| 
                                   Option | 
                                   Brief | 
                                   Description | 
 
| PLANETOCENTRIC | Planetocentric Latitude | 
              Sets the latitude to be in planetocentric coordinates.
             | 
 
| PLANETOGRAPHIC |  Planetographic latitude | 
              Sets the latitude to be in planetographic coordinates.
             | 
 
 
 | 
 
 
Files:
                        LONCUBE
                         Description
                       
          The DN values from this cube will be used as the longitude values for
          the input cube.  The number of samples and lines must match the FROM
          cube.
        
| 
                             Type
                            | cube | 
| 
                               File Mode
                              | input | 
| 
                               Filter
                              | 
          *.cub
         | 
 
 
Files:
                        LONDIR
                         Description
                       
          Specify the longitude direction, either positive east or positive
          west.
        
| 
                             Type
                            | string | 
| 
                               Default
                              | 
          POSITIVEEAST
         | 
| 
                               Option List:
                              | 
| 
                                   Option | 
                                   Brief | 
                                   Description | 
 
| POSITIVEEAST | Positive East Longitude | 
              Sets the longitude direction to be positive east.
             | 
 
| POSITIVEWEST | Positive West Longitude | 
              Sets the longitude direction to be positive west.
             | 
 
 
 | 
 
 
Files:
                        TO
                         Description
                       
            This file will contain the map projected cube.
          
| 
                             Type
                            | cube | 
| 
                               File Mode
                              | output | 
| 
                               Filter
                              | 
            *.cub
           | 
 
 
Polynomial Fit:
                        DEGREE
                         Description
                       
             The order of the polynomial functions to compute sample/line from 
             latitude/longitude.
            
 
Polynomial Fit:
                        SINC
                         Description
                       
              The number of samples skipped over when adding points to the
              polynomial functions.
            
| 
                             Type
                            | integer | 
| 
                               Internal Default
                              | 
            Computed
           | 
 
 
Polynomial Fit:
                        LINC
                         Description
                       
              The number of lines skipped over when adding points to the
              polynomial functions.
            
| 
                             Type
                            | integer | 
| 
                               Internal Default
                              | 
            Computed
           | 
 
 
Polynomial Fit:
                        RESIDUALS
                         Description
                       
              If a file is specified, residuals for each point (line, sample) 
              are written to the file for examination.
            
| 
                             Type
                            | filename | 
| 
                               File Mode
                              | output | 
| 
                               Internal Default
                              | 
            none
           | 
 
 
Polynomial Fit:
                        NOWARP
                         Description
                       
          If set to true, the output cube will not be processed and warped.
          The program will simply calculate the polynomial fit with errors.
        
| 
                             Type
                            | boolean | 
| 
                               Default
                              | false | 
| 
                               Exclusions
                              | 
- TO
 
- MAP
 
- PIXRES
 
- RESOLUTION
 
- TARGET
 
- EQURADIUS
 
- POLRADIUS
 
- DEFAULTRANGE
 
- MINLAT
 
- MAXLAT
 
- MINLON
 
- MAXLON
 
- TOLERANCE
 
- ITERATIONS
 
- INTERP
 
 
 | 
 
 
Mapping:
                        MAP
                         Description
                       
          A file containing the desired output mapping parameters in
          PVL form.  This file can be a simple hand produced label
          file.  It can also be an existing cube label which contains a Mapping
          group.  You can produce map file using the maptemplate
          program.
        
| 
                             Type
                            | filename | 
| 
                               File Mode
                              | input | 
| 
                               Default Path
                              | $ISISROOT/appdata/templates/maps | 
| 
                               Default
                              | $ISISROOT/appdata/templates/maps/sinusoidal.map | 
| 
                               Filter
                              | 
          *.map *.cub
         | 
 
 
Mapping:
                        PIXRES
                         Description
                       
          This parameter is used to specify how the
          pixel resolution is obtained for the output map projected
          cube.
        
| 
                             Type
                            | string | 
| 
                               Default
                              | COMPUTE | 
| 
                               Option List:
                              | 
| 
                                   Option | 
                                   Brief | 
                                   Description | 
 
| COMPUTE | Compute pixel resolution from input cube | 
                This option will automatically determine the pixel resolution
                from the input cube. The scale in pixels per degree is computed
                by calculating the angle from pixel (1,1) to
                pixel (nsamples, nlines) across the input cube and dividing the
                number of pixels across the line from pixel (1,1) to
                pixel (nsamples, nlines) by the angle.
              Exclusions
 | 
 
| MAP | Read resolution from input map file | 
                This option will use either the PixelResolution (meters/pixel)
                or Scale (pixels/degree) in the map file.
              Exclusions
 | 
 
| MPP |  Get pixel resolution from user in meters per pixel | 
                This option allows the user to specify the pixel resolution in
                meters per pixel using the RESOLUTION parameter.
              Inclusions
 | 
 
| PPD |  Get pixel resolution from user in pixels per degree | 
                This option allows the user to specify the pixel resolution in
                pixels per degree using the RESOLUTION parameter.
              Inclusions
 | 
 
 
 | 
 
 
Mapping:
                        RESOLUTION
                         Description
                       
          Specifies the pixel resolution in either meters per pixel or pixels
          per degree.
        
| 
                             Type
                            | double | 
| 
                               Minimum
                              | 0.0
                                   (exclusive)
                                  | 
 
 
Mapping:
                        TARGET
                         Description
                       
          This will specify the target planet to map from/to, i.e. Mars, Venus,
          etc.
        
| 
                             Type
                            | string | 
| 
                               Internal Default
                              | Read from FROM cube | 
 
 
Mapping:
                        EQURADIUS
                         Description
                       
           The equatorial radius can be read using the NAIF routines to get
           the radius from the specified target planet, or read from the user.
          
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Read from Naif PCK kernel file | 
| 
                               Minimum
                              | 0.0
                                   (exclusive)
                                  | 
| 
                               Inclusions
                              | 
 | 
 
 
Mapping:
                        POLRADIUS
                         Description
                       
             The polar radius can be read using the NAIF routines to get
             the radius from the specified target planet, or read from the user.
           
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Read from Naif PCK kernel file | 
| 
                               Minimum
                              | 0.0
                                   (exclusive)
                                  | 
| 
                               Inclusions
                              | 
 | 
 
 
Output Map Ground Range:
                        DEFAULTRANGE
                         Description
                       
          This parameter is used to specify how the default latitude/longitude
          ground range for the output map projected cube is obtained.  The
          ground range can be obtained from the camera or map file.  Note the
          user can override the default using the MINLAT, MAXLAT, MINLON,
          MAXLON parameters.  The purpose of the ground range is to define the
          coverage of the map projected cube.  Essentially, the ground range and
          pixel resolution are used to compute the size (samples and line) of the
          output cube.
        
| 
                             Type
                            | string | 
| 
                               Default
                              | COMPUTE | 
| 
                               Option List:
                              | 
| 
                                   Option | 
                                   Brief | 
                                   Description | 
 
| COMPUTE |  Compute default range from input cube | 
                This option will automatically determine the minimum/maximum
                latitude/longitude from the input camera model cube specified
                using the FROM parameter.
               | 
 
| MAP |  Read default range from map file | 
                This option will read the minimum/maximum latitude/longitude
                from the input map file.  All four values are expected to be
                defined.
               | 
 
 
 | 
 
 
Output Map Ground Range:
                        MINLAT
                         Description
                       
          The minimum latitude of the ground range.   If this is entered by the
          user, it will override the default camera or map file value.  By default,
          planetocentric latitudes are assumed unless the map file specifies
          otherwise.
        
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Use default range | 
| 
                               Minimum
                              | -90.0
                                   (inclusive)
                                  | 
| 
                               Maximum
                              | 90.0
                                   (inclusive)
                                  | 
 
 
Output Map Ground Range:
                        MAXLAT
                         Description
                       
          The maximum latitude of the ground range.   If this is entered by the
          user, it will override the default camera or map file value.  By default,
          planetocentric latitudes are assumed unless the map file specifies
          otherwise.
        
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Use default range | 
| 
                               Minimum
                              | -90.0
                                   (inclusive)
                                  | 
| 
                               Maximum
                              | 90.0
                                   (inclusive)
                                  | 
| 
                               Greater Than
                              | MINLAT 
 | 
 
 
Output Map Ground Range:
                        MINLON
                         Description
                       
          The minimum longitude of the ground range.   If this is entered by
          the user, it will override the default camera or map value.  By
          default, positive east longitudes in the range of 0 to 360 are
          assumed unless the map file specifies otherwise.
        
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Use default range | 
 
 
Output Map Ground Range:
                        MAXLON
                         Description
                       
          The maximum longitude of the ground range.   If this is entered by
          the user, it will override the default camera or map value.  By
          default, positive east longitudes in the range of 0 to 360 are
          assumed unless the map file specifies otherwise.
        
| 
                             Type
                            | double | 
| 
                               Internal Default
                              | Use default range | 
| 
                               Greater Than
                              | MINLON 
 | 
 
 
Affine Correction:
                        TOLERANCE
                         Description
                       
          When computing the sample/line to be mapped from input to output, the
          sample and line are determined from the polynomial fit function. The
          transform then calculates the pixel differences in stereographically
          projected latitude/longitude from the input at sample/line to the
          output's stereographically projected latitude/longitude. If this
          difference is greater than the tolerance, then an affine
          transformation is iteratively used until the difference is less than
          the tolerance or is set to null after a set number of iterations.
        
| 
                             Type
                            | double | 
| 
                               Default
                              | 
          1.0
         | 
| 
                               Minimum
                              | 0.0
                                   (exclusive)
                                  | 
 
 
Affine Correction:
                        ITERATIONS
                         Description
                       
          If the tolerance has not been met in the number of iterations
          specified, then the pixel is not mapped to the output.
        
| 
                             Type
                            | integer | 
| 
                               Default
                              | 
          10
         | 
| 
                               Minimum
                              | 1
                                   (inclusive)
                                  | 
 
 
Interpolation:
                        INTERP
                         Description
                       
          This is the type of interpolation to be performed on the input.
        
| 
                             Type
                            | string | 
| 
                               Default
                              | 
          CUBICCONVOLUTION
         | 
| 
                               Option List:
                              | 
| 
                                   Option | 
                                   Brief | 
                                   Description | 
 
| NEARESTNEIGHBOR | Nearest Neighbor | 
              Each output pixel will be set to the pixel nearest the
              calculated input pixel.
             | 
 
| BILINEAR | Bi-Linear interpolation | 
              Each output pixel will be set to the value calculated by
              a bi-linear interpolation of the calculated input pixel.
             | 
 
| CUBICCONVOLUTION | Cubic Convolution interpolation | 
              Each output pixel will be set to the value calculated by
              a cubic convolution interpolation of the calculated input pixel.
             | 
 
 
 |