- All Implemented Interfaces:
public class MetricExpandByOneView extends ExpandByOneView
sceneby one view (the taget) using the geometric relationship between the target and two known metric views.
- Input: A seed view and the known graph
- Selects two other views with known camera matrices
- Finds features in common with all three views
- Trifocal tensor and RANSAC to find the unknown seed camera matrix
- Estimate calibrating homography from found projective scene and known metric values
- Elevate target from projective to metric
- Bundle Adjustment to refine estimate
- Convert from local coordinates to world / scene coordinates
- Add found metric view for target to scene
The initial projective scene is found independently using common observations in an attempt to reduce the influence of past mistakes. To mitigate past mistakes, the intrisic parameters for the known views are optimized inside of bundle adjustment even though they are "known". Only the found intrinsic and Se3 for the target view will be added/modified in the scene graph.
Nested Class Summary
Nested Classes Modifier and Type Class Description
static classSolution for a view's metric state from a particular approach/set of assumptions.
Fields Modifier and Type Field Description
booleanDo not consider the uncalibrated case if the camera is already known
doubleFit score for uncalibrated case needs to be significantly better than calibrated to be selected.
Constructors Constructor Description
Modifier and Type Method Description
LookUpSimilarImages dbSimilar, LookUpCameraInfo dbCam, SceneWorkingGraph workGraph, PairwiseImageGraph.View target)(Attempts to estimate the camera model in the global projective space for the specified view
PrintStream out, @Nullable Set<String> configuration)(@Nullable
onlyConsiderCalibratedpublic boolean onlyConsiderCalibratedDo not consider the uncalibrated case if the camera is already known
expandCalibratedpublic EstimateViewKnownCalibration expandCalibrated
expandUnknownpublic EstimateViewSelfCalibrate expandUnknown
overfitHandyCappublic double overfitHandyCapFit score for uncalibrated case needs to be significantly better than calibrated to be selected. This is how much its score is degraded. The reason is because you will almost always get a better fit when you allow more parameters to vary.
processpublic boolean process(LookUpSimilarImages dbSimilar, LookUpCameraInfo dbCam, SceneWorkingGraph workGraph, PairwiseImageGraph.View target)Attempts to estimate the camera model in the global projective space for the specified view
dbSimilar- (Input) image data base
workGraph- (Input/Output) scene graph. On input it will have the known scene and if successful the metric information for the target view.
target- (Input) The view that needs its projective camera estimated and the graph is being expanded into
- true if successful target view has an estimated calibration matrix and pose, which have already been added to "workGraph"
setVerbosepublic void setVerbose(@Nullable @Nullable PrintStream out, @Nullable @Nullable Set<String> configuration)