/** * Computes the difference between the two parameters. */ protected double computeDiff(Model modelA, Model modelB ) { double paramA[] = new double[ codec.getParamLength() ]; double paramB[] = new double[ codec.getParamLength() ]; codec.encode(modelA,paramA); codec.encode(modelB,paramB); double total = 0; for (int i = 0; i < paramA.length; i++) { total += Math.abs(paramA[i] - paramB[i]); } return total / paramA.length; }
@Override public int getNumOfInputsN() { return param.getParamLength(); }
@Override public boolean fitModel(List<AssociatedPair> obs, DMatrixRMaj F, DMatrixRMaj refinedF) { func.setObservations(obs); paramModel.encode(F, param); minimizer.setFunction(func,null); minimizer.initialize(param,0,convergenceTol*obs.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } paramModel.decode(minimizer.getParameters(), refinedF); return true; }
@Override public void process(double[] input, double[] output) { codec.decode(input,model); process(model,output); }
@Override public int getNumOfInputsN() { return param.getParamLength(); }
@Override public boolean fitModel(List<AssociatedPair> obs, DenseMatrix64F F, DenseMatrix64F refinedF) { func.setObservations(obs); paramModel.encode(F, param); minimizer.setFunction(func,null); minimizer.initialize(param,0,convergenceTol*obs.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } paramModel.decode(minimizer.getParameters(), refinedF); return true; } }
@Override public void process(double[] input, double[] output) { param.decode(input, pose); residual.setModel(pose); int index = 0; for( int i = 0; i < obs.size(); i++ ) { index = residual.computeResiduals(obs.get(i),output,index); } } }
@Override public int getNumOfInputsN() { return param.getParamLength(); }
/** * Computes the difference between the two parameters. */ protected double computeDiff(Model modelA, Model modelB ) { double paramA[] = new double[ codec.getParamLength() ]; double paramB[] = new double[ codec.getParamLength() ]; codec.encode(modelA,paramA); codec.encode(modelB,paramB); double total = 0; for (int i = 0; i < paramA.length; i++) { total += Math.abs(paramA[i] - paramB[i]); } return total / paramA.length; }
@Override public boolean fitModel(List<Point2D3D> obs, Se3_F64 worldToCamera, Se3_F64 refinedWorldToCamera) { paramModel.encode(worldToCamera, param); func.setObservations(obs); jacobian.setObservations(obs); minimizer.setFunction(func,jacobian); minimizer.initialize(param,0,convergenceTol*obs.size()); boolean updated = false; for( int i = 0; i < maxIterations; i++ ) { boolean converged = minimizer.iterate(); if( converged || minimizer.isUpdated() ) { // save the results paramModel.decode(minimizer.getParameters(), refinedWorldToCamera); updated = true; } if( converged ) { if( i == 0 ) { // if it converted on the first iteration then that means it already // meet convergence. use input to avoid introduction of small numerical errors refinedWorldToCamera.set(worldToCamera); } break; } } return updated; }
@Override public void process(double[] input, double[] output) { param.decode(input, F); residual.setModel(F); for( int i = 0; i < obs.size(); i++ ) { AssociatedPair p = obs.get(i); output[i] = residual.computeResidual(p); } } }
@Override public int getNumOfInputsN() { return codec.getParamLength(); }
codec.encode(model, paramPrev); if (initialFitToPoints) fitter.fitModel(matches, model, model); codec.encode(model, paramCurr); for (int i = 0; i < codec.getParamLength(); i++) { double d = paramCurr[i] - paramPrev[i]; change += Math.abs(d); change /= codec.getParamLength();
@Override public void process(double[] input, double[] output) { param.decode(input, F); residual.setModel(F); int index = 0; for( int i = 0; i < obs.size(); i++ ) { AssociatedPair p = obs.get(i); index = residual.computeResiduals(p,output,index); } } }
@Override public int getNumOfInputsN() { return param.getParamLength(); }
@Override public void process(double[] input, double[] output) { param.decode(input, F); residual.setModel(F); for( int i = 0; i < obs.size(); i++ ) { AssociatedPair p = obs.get(i); output[i] = residual.computeResidual(p); } } }
@Override public int getNumOfInputsN() { return param.getParamLength(); }
@Override public void process(double[] input, double[] output) { param.decode(input, F); residual.setModel(F); int index = 0; for( int i = 0; i < obs.size(); i++ ) { AssociatedPair p = obs.get(i); index = residual.computeResiduals(p,output,index); } } }
@Override public int getNumOfInputsN() { return param.getParamLength(); }