@Override public boolean fitModel(List<AssociatedPair> obs, DMatrixRMaj F, DMatrixRMaj refinedF) { func.setObservations(obs); minimizer.setFunction(func,null); minimizer.initialize(F.data,0,convergenceTol*obs.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } System.arraycopy(minimizer.getParameters(),0,refinedF.data,0,9); return true; }
@Override public double getFitScore() { return minimizer.getFunctionValue(); } }
public void optimize() { new FactoryOptimization(); UnconstrainedLeastSquares optimizer = FactoryOptimization.leastSquaresLM(1e-3, true); optimizer.setFunction(residual, null); double[] prm = new double[residual.getNumOfInputsN()]; residual.getCurrentLinkCom().set(prm); optimizer.initialize(prm, 0, 0); boolean converged; int maxIter = 10; for (int i = 0; i < maxIter; i++) { converged = optimizer.iterate(); prm = optimizer.getParameters(); System.out.println("iter " + i + " obj: " + optimizer.getFunctionValue() + "converged " + converged); if (optimizer.isConverged()) break; } System.out.println("Optimiztion finished."); } }
/** * Minimize the algebraic error using LM. The two epipoles are the parameters being optimized. */ private void minimizeWithGeometricConstraints() { extractEpipoles.process(solutionN, e2, e3); // encode the parameters being optimized param[0] = e2.x; param[1] = e2.y; param[2] = e2.z; param[3] = e3.x; param[4] = e3.y; param[5] = e3.z; // adjust the error function for the current inputs errorFunction.init(); // set up the optimization algorithm optimizer.setFunction(errorFunction,null); optimizer.initialize(param,gtol,ftol); // optimize until convergence or the maximum number of iterations UtilOptimize.process(optimizer, maxIterations); // get the results and compute the trifocal tensor double found[] = optimizer.getParameters(); paramToEpipoles(found,e2,e3); enforce.process(e2,e3,A); enforce.extractSolution(solutionN); }
optimizer.setVerbose(System.out,0); optimizer.setFunction(func,null); optimizer.initialize(new double[]{-0.5,0.5},1e-12,1e-12); double found[] = optimizer.getParameters(); System.out.println("Final Error = "+optimizer.getFunctionValue());
/** * Minimize the algebraic error using LM. The two epipoles are the parameters being optimized. */ private void minimizeWithGeometricConstraints() { extractEpipoles.setTensor(solutionN); extractEpipoles.extractEpipoles(e2,e3); // encode the parameters being optimized param[0] = e2.x; param[1] = e2.y; param[2] = e2.z; param[3] = e3.x; param[4] = e3.y; param[5] = e3.z; // adjust the error function for the current inputs errorFunction.init(); // set up the optimization algorithm optimizer.setFunction(errorFunction,null); optimizer.initialize(param,gtol,ftol); // optimize until convergence or the maximum number of iterations UtilOptimize.process(optimizer, maxIterations); // get the results and compute the trifocal tensor double found[] = optimizer.getParameters(); paramToEpipoles(found,e2,e3); enforce.process(e2,e3,A); enforce.extractSolution(solutionN); }
@Override public boolean fitModel(List<AssociatedPair> obs, DenseMatrix64F F, DenseMatrix64F refinedF) { func.setObservations(obs); minimizer.setFunction(func,null); minimizer.initialize(F.data,0,convergenceTol*obs.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } System.arraycopy(minimizer.getParameters(),0,refinedF.data,0,9); return true; } }
optimizer.setFunction(func,null); // Compute using a numerical Jacobian optimizer.initialize(param.data,converge.ftol,converge.gtol); decode(optimizer.getParameters(),calibration,p); recomputeQ(p,Q);
@Override public double getFitScore() { return minimizer.getFunctionValue(); } }
@Override public boolean process(List<Point2D_F64> observations, List<Se3_F64> worldToCamera, Point3D_F64 worldPt, Point3D_F64 refinedPt) { func.setObservations(observations, worldToCamera); minimizer.setFunction(func,null); param[0] = worldPt.x; param[1] = worldPt.y; param[2] = worldPt.z; minimizer.initialize(param,0,convergenceTol*observations.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } double found[] = minimizer.getParameters(); refinedPt.x = found[0]; refinedPt.y = found[1]; refinedPt.z = found[2]; return true; } }
public double getThreeViewError() { return optimizer.getFunctionValue(); }
@Override public boolean process(List<Point2D_F64> observations, List<DenseMatrix64F> fundamentalWorldToCam, Point3D_F64 worldPt, Point3D_F64 refinedPt) { func.setObservations(observations, fundamentalWorldToCam); minimizer.setFunction(func,null); // the parameter being optimized is the world point location param[0] = worldPt.x; param[1] = worldPt.y; param[2] = worldPt.z; minimizer.initialize(param,0,convergenceTol*observations.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } double found[] = minimizer.getParameters(); refinedPt.x = found[0]; refinedPt.y = found[1]; refinedPt.z = found[2]; return true; } }
@Override public double getFitScore() { return minimizer.getFunctionValue(); } }
@Override public boolean process(List<Point2D_F64> observations, List<Se3_F64> worldToCamera, Point3D_F64 worldPt, Point3D_F64 refinedPt) { func.setObservations(observations, worldToCamera); minimizer.setFunction(func,null); param[0] = worldPt.x; param[1] = worldPt.y; param[2] = worldPt.z; minimizer.initialize(param,0,convergenceTol*observations.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } double found[] = minimizer.getParameters(); refinedPt.x = found[0]; refinedPt.y = found[1]; refinedPt.z = found[2]; return true; } }
@Override public boolean process(List<Point2D_F64> observations, List<DMatrixRMaj> cameraMatrices, Point4D_F64 worldPt, Point4D_F64 refinedPt) { func.setObservations(observations, cameraMatrices); minimizer.setFunction(func,null); param[0] = worldPt.x; param[1] = worldPt.y; param[2] = worldPt.z; param[3] = worldPt.w; minimizer.initialize(param,0,convergenceTol*observations.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } double found[] = minimizer.getParameters(); refinedPt.x = found[0]; refinedPt.y = found[1]; refinedPt.z = found[2]; refinedPt.w = found[3]; return true; } }
@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 boolean process(List<Point2D_F64> observations, List<DMatrixRMaj> fundamentalWorldToCam, Point3D_F64 worldPt, Point3D_F64 refinedPt) { func.setObservations(observations, fundamentalWorldToCam); minimizer.setFunction(func,null); // the parameter being optimized is the world point location param[0] = worldPt.x; param[1] = worldPt.y; param[2] = worldPt.z; minimizer.initialize(param,0,convergenceTol*observations.size()); for( int i = 0; i < maxIterations; i++ ) { if( minimizer.iterate() ) break; } double found[] = minimizer.getParameters(); refinedPt.x = found[0]; refinedPt.y = found[1]; refinedPt.z = found[2]; return true; } }
@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 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; }
jacobian.setObservations(obs); minimizer.setFunction(func,jacobian); minimizer.initialize(param,0,convergenceTol*obs.size()); boolean converged = minimizer.iterate(); if( converged || minimizer.isUpdated() ) { paramModel.decode(minimizer.getParameters(), refinedWorldToCamera); updated = true;