Help for MARSJPLSTEREO
PURPOSE:
This program computes disparity maps from a stereo pair. The images
are assumed to be aligned (CAHV linearized), hence only the sample
disparity map is computed. The line disparity map is output as 0
disparity (i.e. DN matches line number). In contrast to MARSCORR,
this program relies on camera model to do the computations. The
camera model is derived from the PIG (Planetary Image Geometry)
library in the standard way.
The resulting line and sample disparity maps can be used as input to
MARSXYZ routine to convert disparity maps to XYZ images. That output
can further be sent to MARSRANGE to generate range maps. The disparity
map file format is compatible with the output of MARSCORR; see the help
for that program for file format details.
This program is also in theory capable of performing trinocular stereo
matching with left, right and bottom cameras. However, THIS HAS NOT
BEEN TESTED.
The underlying correlation library works with 8-bit data only. Since
most mission data is 16 bits (really 12, in a 16-bit image), a percent
linear stretch is done to convert to byte before sending the image into
the correlator. This results in some loss of precision but shouldn't
cause too much trouble in practice. Normally the histograms for all
inputs are combined so a single stretch is performed, but if the cameras
are of unequal brightness, the SEPARATE flag will cause the images to be
stretched independently. The correlator is rather sensitive to overall
brightness levels.
This routine is based on the JPL Stereo code developed in the JPL
Robotics Division. Great deal of help and explanation was provided by
Mark Maimone <mwm@helios.jpl.nasa.gov>.
In this program, input images must be projected from CAHVOR/CAHVORE
space to CAHV space, i.e. run MARSCAHV routine to remove distortion.
The underlying correlation library supports CAHVOR/CAHVORE models,
but simply does an internal warp to CAHV before correlating. It was
thus decided that the complexity of supporting CAHVOR/CAHVORE directly
was not worthwhile, since CAHV images are normally created anyway.
If pyramid level is not zero, image dimensions are truncated(if necessary)
to the max. multiple of pyramid level. For example if pyramid=2 and image
size is 258x258, the correlation will be done on 256x256 subframe and the
extra input pixels will be ignored.
The underlying JPL Stereo code can only handle images up to 2048 x 2048.
If the image is larger than that, it is automatically downsampled until it
fits within 2048 x 2048. The pyramid level is reduced as well, so that
the effective result is identical to what would have happened if JPL Stereo
could handle larger images (i.e. the downsizing is transparent). However,
the pyramid level must be big enough to accommodate this; if it goes negative
the program will abend.
EXECUTION:
marsjplstereo inp=(left.img, right.img) out=disparity.img params
or
marsjplstereo inp=(left.img, right.img, lower.img) out=disparity.img) params
left.img - left image of the stereo pair
right.img - right image of the stereo pair
lower.img - lower image for the trinocular stereo. Not used for binocular stereo
disparity.img - output disparity map. Can be a single 2-band file or two
1-band files.
parameters : see below.
NOTE.
Parameter space for this routine has not been explored fully. Some
comments on the default values and their ranges are given in the
parameter section.
EXAMPLE
Convert images from CAHVOR space to CAHV and update camera model
information in the labels :
marscahv left.img left_cahv
marscahv right.img right_cahv
Run the JPL Stereo algorithm with window size 15 :
marsjplstereo inp=(left_cahv, right_cahv) out=(disparity.img) window = 15
Convert from disparity to XYZ maps
marsxyz inp=( left_cahv, right_cahv ) dispar=disparity.img out=xyz.img
OPERATION :
This algorithm is descried in part in Matthies [1992]. Here's a quote
from the abstract of this paper.
" .. The statistical and algorithmic aspects employ random field models
of the disparity map, Bayesian formulations of single-scale matching,
and area-based image comparison. The implementation builds bandpass
pyramids and produces disparity maps... ".
REFERENCES : (kindly supplied by Mark Maimone)
(in order of relevance)
L. H. Matthies, 1992 ,Stereo vision for planetary rovers: stochastic modeling
to near real-time implementation, Int. Jour. of Computer Vision, 8(1), pp71-91
L. Matthies, A. Kelly, T. Litwin, G. Tharp, 1996, Obstacle
Detection for Unmanned Ground Vehicles: A Progress Report, in Robotics
Research: the 7th International Symposium, Springer-Verlag
Yalin Xiong, Larry Matthies, 1997, Error Analysis of a Real-Time
Stereo System, in CVPR, pp. 1087-1093,
URL "http://www.cs.cmu.edu/~yx/papers/StereoError97.pdf"
DEVELOPER NOTES
All files in this package with the exception of marsjplstereo.* and
cmod_fp_stubs.h, are part of the correlator package obtained from Mark
Maimone. Many have been modified to compile in the VICAR environment or
to fix bugs (e.g. more blobs than a short can handle, changed to long;
precision differences between Solaris and Linux). However, an attempt has
been made to keep the changes to a minimum. The original delivery is in
B. Deen's "mer" email folder if needed.
FUTURE WORK
- Loosen the ultra conservative approach to the Maximum
Disparity. Currently the left edge of valid dispairty map values
starts at the maximum disparity value.
- Allow min/maxdisp to be expressed in meters of range (for user convenience)
- Add parameter to turn off LRLOS (reverse correlation check) option. That
would only be useful for investigation of problems.
- Add ability to output disparity space for a given row, again to investigate
bad correlations (SetRowsToSearch() in the correlator code).
- Separate horizontal/vertical window size parameters
HISTORY:
2000-02 - Original version
2000-03-10 abi - Revision 1.1 Initial revision
2000-04-16 abi - Revision 1.2 Minor bugs eliminated
2000-09-26 abi - Revision 1.3 Linux compatibility issue resolved
2003-01-16 rgd - Revision 1.4 Converted to use PIG library; cleaned up for MER;
support for 16-bit input images.
2003-01-28 rgd - Revision 2.0 Installed new version of correlator from
M. Maimone's group; added Uncertainty parameter
2016-05-31 rgd - Revision 2.1 Added automatic downsampling for large images.
2019-10-02 wlb - IDS-7926 - Initialized some variables;
IDS-7928 - Corrected some printf formatting directives
(pointers should have been %lx, not %x);
Commented some unused variables; Added explicit return types
for some functions; Added includes for open and creat. Added
tst.pdf and tst.log to test dir.
2019-12-23 wlb - IDS-7926 - Initialized a variable.
2020-03-24 wlb - IDS-7927 - Replaced sprintf() calls.
COGNIZANT PROGRAMMER: Bob Deen
PARAMETERS:
INP
Left/right stereo pair images
OUT
Output disparity map
NAVTABLE
Corrected navigation filename
PYRLEVEL
Pyramid level
WINDOWSIZE
Size of correlation window
in pixels. Default 7.
MINDISP
Minimum disparity value
MAXDISP
Maximum disparity value
BLOBSIZE
Minimum size of "blobs" (regions
of connected pixels) to accept.
UNCERTAINTY
Enable and set value for
uncertainty filtering.
PERCENT
Percent stretch limit for HALF->BYTE
conversion.
SEPARATE
Specifies separate stretches for
input images.
BAND
The vicar image
band number.
Defaults to 1
SEPARATION
Set maximum Euclidean separation
for trinocular stereo only
THRESHOLD
Set uncertainty threshold for
trinocular stereo only
CONFIG_PATH
Path used to find
configuration/calibration
files.
MATCH_METHOD
Specifies a method
for pointing corrections.
MATCH_TOL
Tolerance value for
matching pointing params
in pointing corrections file.
POINT_METHOD
Specifies a mission-
specific pointing
method to use
NOSITE
Disables coordinate
system sites.
DATA_SET_NAME
Specifies the full name given
to a data set or a data product.
DATA_SET_ID
Specifies a unique alphanumeric
identifier for a data set or data
product.
RELEASE_ID
Specifies the unique identifier
associated with the release to the
public of all or part of a data set.
The release number is associated with
the data set, not the mission.
PRODUCT_ID
Specifies a permanent, unique
identifier assigned to a data
product by its producer.
PRODUCER_ID
Specifies the unique identifier
of an entity associated with the
production a data set.
PRODUCER_INST
Specifies the full name of the
identity of an entity associated
with the production of a data set.
TARGET_NAME
Specifies a target.
TARGET_TYPE
Specifies the type of a named target.
RSF
Rover State File(s) to use.
DEBUG_RSF
Turns on debugging of RSF
parameter.
COORD
Coordinate system to use.
COORD_INDEX
Coordinate system index for
some COORD/mission combos.
FIXED_SITE
Which site is FIXED for
rover missions.
SOLUTION_ID
Solution ID to use for
pointing correction.
See Examples:
Cognizant Programmer: