@Override public boolean fitModel(List<PointVectorNN> dataSet, Model initial, Model found) { points.clear(); for (int i = 0; i < dataSet.size(); i++) { PointVectorNN p = dataSet.get(i); points.add(p.p); } return model.fitModel(points, initial, found); } }
private void addShapeToOutput(List<PointVectorNN> inliers) { ModelFitter<Object, PointVectorNN> fitter = fitters.get(ransac.getModelIndex()); Object shapeParam = models.get(ransac.getModelIndex()); fitter.fitModel(inliers, ransac.getModelParameters(), shapeParam); // convert the results into output format Shape os = output.grow(); os.parameters = modelManagers.get(ransac.getModelIndex()).createModelInstance(); modelManagers.get(ransac.getModelIndex()).copyModel(shapeParam,os.parameters); os.type = shapeList.get(ransac.getModelIndex()); os.points.clear(); os.indexes.reset(); // add the points to it for (int j = 0; j < inliers.size(); j++) { PointVectorNN pv = inliers.get(j); os.points.add(pv.p); os.indexes.add(pv.index); } }
if (!modelFitter.fitModel(inliers, null, currParam)) {
if (!modelFitter.fitModel(inliers, null, currParam)) {
@Override public void process(List<Point3D_F64> cloud, Box3D_F64 boundingBox) { this.cloud = cloud; output.reset(); pointNormList.reset(); surfaceNormals.process(cloud, pointNormList); // run ransac and if it failed just give up if (!ransac.process(pointNormList.toList())) return; List<PointVectorNN> inliers = ransac.getMatchSet(); if (inliers.size() < minimumPoints) return; ModelFitter<Object, PointVectorNN> fitter = fitters.get(ransac.getModelIndex()); Object shapeParam = models.get(ransac.getModelIndex()); fitter.fitModel(inliers, ransac.getModelParameters(), shapeParam); // convert the results into output format Shape os = output.grow(); os.parameters = shapeParam; os.type = shapeList.get(ransac.getModelIndex()); os.points.clear(); os.indexes.reset(); // add the points to it for (int j = 0; j < inliers.size(); j++) { PointVectorNN pv = inliers.get(j); os.points.add(pv.p); os.indexes.add(pv.index); } }