NAME

mrcal-triangulate - Triangulate a feature in a pair of images to report a range

SYNOPSIS

  $ mrcal-triangulate
      --range-estimate 870
      left.cameramodel right.cameramodel
      left.jpg right.jpg
      1234 2234

  ## Feature [1234., 2234.] in the left image corresponds to [2917.9 1772.6] at 870.0m
  ## Feature match found at [2916.51891391 1771.86593517]
  ## q1 - q1_perfect_at_range = [-1.43873946 -0.76196924]
  ## Range: 677.699 m (error: -192.301 m)
  ## Reprojection error between triangulated point and q0: [5.62522473e-10 3.59364094e-09]pixels
  ## Observed-pixel sensitivity: 103.641m/pixel (q1). Worst direction: [1. 0.]. Linearized correction: 1.855 pixels
  ## Calibration yaw sensitivity: -3760.702m/deg. Linearized correction: -0.051 degrees of yaw
  ## Calibration pitch sensitivity: 0.059m/deg.
  ## Calibration translation sensitivity: 319.484m/m. Worst direction: [1 0 0].
  ## Linearized correction: 0.602 meters of translation
  ## Optimized yaw correction   = -0.03983 degrees
  ## Optimized pitch correction = 0.03255 degrees
  ## Optimized relative yaw (1 <- 0): -1.40137 degrees

DESCRIPTION

Given a pair of images, a pair of camera models and a feature coordinate in the first image, finds the corresponding feature in the second image, and reports the range. This is similar to the stereo processing of a single pixel, but reports much more diagnostic information than stereo tools do.

This is useful to evaluate ranging results.

OPTIONS

POSITIONAL ARGUMENTS

  models                Camera models for the images. Both intrinsics and
                        extrinsics are used
  images_and_features   The images and/or feature pixes coordinates to use for
                        the triangulation. This is either IMAGE0 IMAGE1
                        FEATURE0X FEATURE0Y or FEATURE0X FEATURE0Y FEATURE1X
                        FEATURE1Y. If images are given, the given pixel is a
                        feature in image0, and we search for the corresponding
                        feature in image1.

OPTIONAL ARGUMENTS

  -h, --help            show this help message and exit
  --make-corrected-model1
                        If given, we assume the --range-estimate is correct,
                        and output to standard output a rotated camera1 to
                        produce this range
  --template-size TEMPLATE_SIZE TEMPLATE_SIZE
                        The size of the template used for feature matching, in
                        pixel coordinates of the second image. Two arguments
                        are required: width height. This is passed directly to
                        mrcal.match_feature(). We default to 13x13
  --search-radius SEARCH_RADIUS
                        How far the feature-matching routine should search, in
                        pixel coordinates of the second image. This should be
                        larger if the range estimate is poor, especially, at
                        near ranges. This is passed directly to
                        mrcal.match_feature(). We default to 20 pixels
  --range-estimate RANGE_ESTIMATE
                        Initial estimate of the range of the observed feature.
                        This is used for the initial guess in the feature-
                        matching. If omitted, I pick 50m, completely
                        arbitrarily
  --plane-n PLANE_N PLANE_N PLANE_N
                        If given, assume that we're looking at a plane in
                        space, and take this into account when matching the
                        template. The normal vector to this plane is given
                        here, in camera-0 coordinates. The normal does not
                        need to be normalized; any scaling is compensated in
                        planed. The plane is all points p such that
                        inner(p,planen) = planed
  --plane-d PLANE_D     If given, assume that we're looking at a plane in
                        space, and take this into account when matching the
                        template. The distance-along-the-normal to the plane,
                        in from-camera coordinates is given here. The plane is
                        all points p such that inner(p,planen) = planed
  --q-calibration-stdev Q_CALIBRATION_STDEV
                        The uncertainty of the point observations at
                        calibration time. If given, we report the
                        analytically-computed effects of this noise. If a
                        value <0 is passed-in, we infer the calibration-time
                        noise from the optimal calibration-time residuals
  --q-observation-stdev Q_OBSERVATION_STDEV
                        The uncertainty of the point observations at
                        observation time. If given, we report the
                        analytically-computed effects of this noise.
  --q-observation-stdev-correlation Q_OBSERVATION_STDEV_CORRELATION
                        By default, the noise in the observation-time pixel
                        observations is assumed independent. This isn't
                        entirely realistic: observations of the same feature
                        in multiple cameras originate from an imager
                        correlation operation, so they will have some amount
                        of correlation. If given, this argument specifies how
                        much correlation. This is a value in [0,1] scaling the
                        stdev. 0 means "independent" (the default). 1.0 means
                        "100% correlated".
  --stabilize-coords    If propagating calibration-time noise
                        (--q-calibration-stdev != 0), we report the
                        uncertainty ellipse in a stabilized coordinate system,
                        compensating for the camera-0 coord system motion
  --method {geometric,lindstrom,leecivera-l1,leecivera-linf,leecivera-mid2,leecivera-wmid2}
                        The triangulation method. By default we use the "Mid2"
                        method from Lee-Civera's paper
  --corr-floor CORR_FLOOR
                        This is used to reject mrcal.match_feature() results.
                        The default is 0.9: accept only very good matches. A
                        lower threshold may still result in usable matches,
                        but do interactively check the feature-matcher results
                        by passing "--viz match"
  --viz {match,uncertainty}
                        If given, we visualize either the feature-matcher
                        results ("--viz match") or the uncertainty ellipse(s)
                        ("--viz uncertainty"). By default, this produces an
                        interactive gnuplot window. The feature-match
                        visualization shows 2 overlaid images: the larger
                        image being searched and the transformed template,
                        placed at its best-fitting location. Each individual
                        image can be hidden/shown by clicking on its legend in
                        the top-right of the plot. It's generally most useful
                        to show/hide the template to visually verify the
                        resulting alignment.
  --title TITLE         Title string for the --viz plot. Overrides the default
                        title. Exclusive with --extratitle
  --extratitle EXTRATITLE
                        Additional string for the --viz plot to append to the
                        default title. Exclusive with --title
  --hardcopy HARDCOPY   Write the --viz output to disk, instead of an
                        interactive plot
  --terminal TERMINAL   The gnuplotlib terminal used in --viz. The default is
                        good almost always, so most people don't need this
                        option
  --set SET             Extra 'set' directives to gnuplotlib for --viz. Can be
                        given multiple times
  --unset UNSET         Extra 'unset' directives to gnuplotlib --viz. Can be
                        given multiple times

REPOSITORY

https://www.github.com/dkogan/mrcal

AUTHOR

Dima Kogan, <dima@secretsauce.net>

LICENSE AND COPYRIGHT

Copyright (c) 2017-2021 California Institute of Technology ("Caltech"). U.S. Government sponsorship acknowledged. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0