.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MRCAL 1" .TH MRCAL 1 "2023-01-30" "mrcal 2.2" "mrcal: camera projection, calibration toolkit" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" mrcal\-show\-residuals\-board\-observation \- Visualize calibration residuals for one or more observations of a board .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& $ mrcal\-show\-residuals\-board\-observation \& \-\-from\-worst \-\-explore left.cameramodel 0\-2 \& \& ... a plot pops up showing the 3 worst\-fitting chessboard observations in this \& ... solve. And a REPL opens up to allow further study .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" The residuals come from the optimization inputs stored in the cameramodel file. A cameramodel that's missing this data cannot be used with this tool. .PP To plot the residuals on top of the image used in the calibration the image paths are loaded from the optimization inputs. The paths are used directly, relative to the current directory. If the paths are unavailable or if the image cannot be read, the plot is made without the underlying image. .SH "OPTIONS" .IX Header "OPTIONS" .SS "\s-1POSITIONAL ARGUMENTS\s0" .IX Subsection "POSITIONAL ARGUMENTS" .Vb 9 \& model Camera model that contains the optimization_inputs \& that describe the solve. The displayed observations \& may come from ANY of the cameras in the solve, not \& necessarily the one given by this model \& observations The observation indices we\*(Aqre looking at. A list of \& integers and/or A\-B ranges. By default these index the \& board observations in the order they appear in the \& solve. If \-\-from\-worst, then we index them from the \& worst\-fitting to the best\-fitting instead .Ve .SS "\s-1OPTIONAL ARGUMENTS\s0" .IX Subsection "OPTIONAL ARGUMENTS" .Vb 10 \& \-h, \-\-help show this help message and exit \& \-\-title TITLE Title string for the plot. Overrides the default \& title. Exclusive with \-\-extratitle \& \-\-extratitle EXTRATITLE \& Additional string for the plot to append to the \& default title. Exclusive with \-\-title \& \-\-vectorscale VECTORSCALE \& Scale all the vectors by this factor. Useful to \& improve legibility if the vectors are too small to see \& \-\-circlescale CIRCLESCALE \& Scale all the plotted circles by this factor. Useful \& to improve legibility if the vectors are too big or \& too small \& \-\-from\-worst If given, the requested observations index from the \& worst\-fitting observations to the best\-fitting \& (observation 0 is the worst\-fitting observation). By \& default we index the observations in the order they \& appear in the solve \& \-\-image\-path\-prefix IMAGE_PATH_PREFIX \& If given, we prepend the given prefix to the image \& paths. Exclusive with \-\-image\-directory \& \-\-image\-directory IMAGE_DIRECTORY \& If given, we extract the filenames from the image \& paths in the solve, and use the given directory to \& find those filenames. Exclusive with \-\-image\-path\- \& prefix \& \-\-hardcopy HARDCOPY Write the output to disk, instead of making an \& interactive plot. If given, only ONE observation may \& be specified \& \-\-terminal TERMINAL gnuplotlib terminal. The default is good almost \& always, so most people don\*(Aqt need this option \& \-\-set SET Extra \*(Aqset\*(Aq directives to gnuplotlib. Can be given \& multiple times \& \-\-unset UNSET Extra \*(Aqunset\*(Aq directives to gnuplotlib. Can be given \& multiple times \& \-\-explore If given, the tool drops into a REPL before exiting, \& to allow the user to follow\-up with more diagnostics .Ve .SH "REPOSITORY" .IX Header "REPOSITORY" .SH "AUTHOR" .IX Header "AUTHOR" Dima Kogan, \f(CW\*(C`\*(C'\fR .SH "LICENSE AND COPYRIGHT" .IX Header "LICENSE AND COPYRIGHT" Copyright (c) 2017\-2021 California Institute of Technology (\*(L"Caltech\*(R"). U.S. Government sponsorship acknowledged. All rights reserved. .PP Licensed under the Apache License, Version 2.0 (the \*(L"License\*(R"); You may obtain a copy of the License at .PP .Vb 1 \& http://www.apache.org/licenses/LICENSE\-2.0 .Ve