code: public boolean performBundleAdjustment()
  	{
  		// Configure the sparse Levenberg-Marquardt solver
  		ConfigLevenbergMarquardt configLM = new ConfigLevenbergMarquardt();
  		configLM.hessianScaling = false;
  
  		ConfigBundleAdjustment configSBA = new ConfigBundleAdjustment();
  		configSBA.configOptimizer = configLM;
  
  		BundleAdjustment<SceneStructureMetric> bundleAdjustment;
  		if( robust ) {
  			configLM.mixture = 0;
  			bundleAdjustment = FactoryMultiView.bundleDenseMetric(true,configSBA);
  		} else {
  			bundleAdjustment = FactoryMultiView.bundleSparseMetric(configSBA);
  		}
  
  		bundleAdjustment.setVerbose(verbose,0);
  		// Specifies convergence criteria
  		bundleAdjustment.configure(1e-20, 1e-20, 200);
  
  		bundleAdjustment.setParameters(structure,observations);
  		return bundleAdjustment.optimize(structure);
  	}
docs: Use non-linear optimization to improve the parameter estimates