Search in sources :

Example 1 with FeatureSelectNBest

use of boofcv.alg.feature.detect.selector.FeatureSelectNBest in project BoofCV by lessthanoptimal.

the class FactoryInterestPointAlgs method hessianPyramid.

/**
 * Creates a {@link FeaturePyramid} which is uses a hessian blob detector.
 *
 * @param extractRadius Size of the feature used to detect the corners.
 * @param detectThreshold Minimum corner intensity required
 * @param maxFeatures Max number of features that can be found.
 * @param imageType Type of input image.
 * @param derivType Image derivative type.
 * @return CornerLaplaceScaleSpace
 */
public static <T extends ImageGray<T>, D extends ImageGray<D>> FeaturePyramid<T, D> hessianPyramid(int extractRadius, float detectThreshold, int maxFeatures, Class<T> imageType, Class<D> derivType) {
    GeneralFeatureIntensity<T, D> intensity = new WrapperHessianDerivBlobIntensity<>(HessianBlobIntensity.Type.DETERMINANT, derivType);
    NonMaxSuppression extractorMin = intensity.localMinimums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.min(extractRadius, detectThreshold, extractRadius, true)) : null;
    NonMaxSuppression extractorMax = intensity.localMaximums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.max(extractRadius, detectThreshold, extractRadius, true)) : null;
    FeatureSelectLimitIntensity<Point2D_I16> selector = new FeatureSelectNBest<>(new SampleIntensityImage.I16());
    GeneralFeatureDetector<T, D> detector = new GeneralFeatureDetector<>(intensity, extractorMin, extractorMax, selector);
    detector.setFeatureLimit(maxFeatures);
    AnyImageDerivative<T, D> deriv = GImageDerivativeOps.derivativeForScaleSpace(imageType, derivType);
    return new FeaturePyramid<>(detector, deriv, 2);
}
Also used : FeatureSelectNBest(boofcv.alg.feature.detect.selector.FeatureSelectNBest) NonMaxSuppression(boofcv.abst.feature.detect.extract.NonMaxSuppression) Point2D_I16(georegression.struct.point.Point2D_I16) SampleIntensityImage(boofcv.alg.feature.detect.selector.SampleIntensityImage) WrapperHessianDerivBlobIntensity(boofcv.abst.feature.detect.intensity.WrapperHessianDerivBlobIntensity)

Example 2 with FeatureSelectNBest

use of boofcv.alg.feature.detect.selector.FeatureSelectNBest in project BoofCV by lessthanoptimal.

the class FactoryInterestPointAlgs method harrisPyramid.

/**
 * Creates a {@link FeaturePyramid} which is uses the Harris corner detector.
 *
 * @param extractRadius Size of the feature used to detect the corners.
 * @param detectThreshold Minimum corner intensity required
 * @param maxFeatures Max number of features that can be found.
 * @param imageType Type of input image.
 * @param derivType Image derivative type.
 * @return CornerLaplaceScaleSpace
 */
public static <T extends ImageGray<T>, D extends ImageGray<D>> FeaturePyramid<T, D> harrisPyramid(int extractRadius, float detectThreshold, int maxFeatures, Class<T> imageType, Class<D> derivType) {
    GradientCornerIntensity<D> harris = FactoryIntensityPointAlg.harris(extractRadius, 0.04f, false, derivType);
    GeneralFeatureIntensity<T, D> intensity = new WrapperGradientCornerIntensity<>(harris);
    NonMaxSuppression extractorMin = intensity.localMinimums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.min(extractRadius, detectThreshold, extractRadius, true)) : null;
    NonMaxSuppression extractorMax = intensity.localMaximums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.max(extractRadius, detectThreshold, extractRadius, true)) : null;
    FeatureSelectLimitIntensity<Point2D_I16> selector = new FeatureSelectNBest<>(new SampleIntensityImage.I16());
    GeneralFeatureDetector<T, D> detector = new GeneralFeatureDetector<>(intensity, extractorMin, extractorMax, selector);
    detector.setFeatureLimit(maxFeatures);
    AnyImageDerivative<T, D> deriv = GImageDerivativeOps.derivativeForScaleSpace(imageType, derivType);
    return new FeaturePyramid<>(detector, deriv, 2);
}
Also used : FeatureSelectNBest(boofcv.alg.feature.detect.selector.FeatureSelectNBest) NonMaxSuppression(boofcv.abst.feature.detect.extract.NonMaxSuppression) Point2D_I16(georegression.struct.point.Point2D_I16) SampleIntensityImage(boofcv.alg.feature.detect.selector.SampleIntensityImage) WrapperGradientCornerIntensity(boofcv.abst.feature.detect.intensity.WrapperGradientCornerIntensity)

Example 3 with FeatureSelectNBest

use of boofcv.alg.feature.detect.selector.FeatureSelectNBest in project BoofCV by lessthanoptimal.

the class FactoryInterestPointAlgs method hessianLaplace.

/**
 * Creates a {@link boofcv.alg.feature.detect.interest.FeatureLaplacePyramid} which is uses a hessian blob detector.
 *
 * @param extractRadius Size of the feature used to detect the corners.
 * @param detectThreshold Minimum corner intensity required
 * @param maxFeatures Max number of features that can be found.
 * @param imageType Type of input image.
 * @param derivType Image derivative type.
 * @return CornerLaplaceScaleSpace
 */
public static <T extends ImageGray<T>, D extends ImageGray<D>> FeatureLaplacePyramid<T, D> hessianLaplace(int extractRadius, float detectThreshold, int maxFeatures, Class<T> imageType, Class<D> derivType) {
    GeneralFeatureIntensity<T, D> intensity = new WrapperHessianDerivBlobIntensity<>(HessianBlobIntensity.Type.DETERMINANT, derivType);
    NonMaxSuppression extractorMin = intensity.localMinimums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.min(extractRadius, detectThreshold, extractRadius, true)) : null;
    NonMaxSuppression extractorMax = intensity.localMaximums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.max(extractRadius, detectThreshold, extractRadius, true)) : null;
    FeatureSelectLimitIntensity<Point2D_I16> selector = new FeatureSelectNBest<>(new SampleIntensityImage.I16());
    GeneralFeatureDetector<T, D> detector = new GeneralFeatureDetector<>(intensity, extractorMin, extractorMax, selector);
    detector.setFeatureLimit(maxFeatures);
    AnyImageDerivative<T, D> deriv = GImageDerivativeOps.derivativeForScaleSpace(imageType, derivType);
    ImageFunctionSparse<T> sparseLaplace = FactoryDerivativeSparse.createLaplacian(imageType, null);
    return new FeatureLaplacePyramid<>(detector, sparseLaplace, deriv, 2);
}
Also used : FeatureSelectNBest(boofcv.alg.feature.detect.selector.FeatureSelectNBest) NonMaxSuppression(boofcv.abst.feature.detect.extract.NonMaxSuppression) Point2D_I16(georegression.struct.point.Point2D_I16) SampleIntensityImage(boofcv.alg.feature.detect.selector.SampleIntensityImage) WrapperHessianDerivBlobIntensity(boofcv.abst.feature.detect.intensity.WrapperHessianDerivBlobIntensity)

Example 4 with FeatureSelectNBest

use of boofcv.alg.feature.detect.selector.FeatureSelectNBest in project BoofCV by lessthanoptimal.

the class VideoDetectCorners method perform.

public static <T extends ImageGray<T>, D extends ImageGray<D>> void perform(String fileName, Class<T> imageType, Class<D> derivType) {
    SimpleImageSequence<T> sequence = BoofVideoManager.loadManagerDefault().load(fileName, ImageType.single(imageType));
    Objects.requireNonNull(sequence);
    int maxCorners = 200;
    int radius = 2;
    GeneralFeatureIntensity<T, D> intensity = new WrapperGradientCornerIntensity<>(FactoryIntensityPointAlg.shiTomasi(radius, false, derivType));
    // GeneralFeatureIntensity<T, D> intensity =
    // new WrapperFastCornerIntensity<T, D>(FactoryIntensityPointAlg.createFast12(defaultType, 8 , 12));
    ConfigExtract config = new ConfigExtract();
    NonMaxSuppression extractor = FactoryFeatureExtractor.nonmax(config);
    // FeatureExtractor extractor = new WrapperNonMaximumBlock( new NonMaxExtractorNaive(radius+10,10f));
    // FeatureExtractor extractor = new WrapperNonMaxCandidate(new NonMaxCandidateStrict(radius+10, 10f));
    extractor.setIgnoreBorder(radius + 10);
    extractor.setThresholdMaximum(10f);
    FeatureSelectLimitIntensity<Point2D_I16> selector = new FeatureSelectNBest<>(new SampleIntensityImage.I16());
    var detector = new GeneralFeatureDetector<>(intensity, null, extractor, selector);
    detector.setFeatureLimit(maxCorners);
    VideoDetectCorners<T, D> display = new VideoDetectCorners<>(sequence, detector, derivType);
    display.process();
}
Also used : FeatureSelectNBest(boofcv.alg.feature.detect.selector.FeatureSelectNBest) NonMaxSuppression(boofcv.abst.feature.detect.extract.NonMaxSuppression) Point2D_I16(georegression.struct.point.Point2D_I16) ConfigExtract(boofcv.abst.feature.detect.extract.ConfigExtract) SampleIntensityImage(boofcv.alg.feature.detect.selector.SampleIntensityImage) WrapperGradientCornerIntensity(boofcv.abst.feature.detect.intensity.WrapperGradientCornerIntensity) GeneralFeatureDetector(boofcv.alg.feature.detect.interest.GeneralFeatureDetector)

Example 5 with FeatureSelectNBest

use of boofcv.alg.feature.detect.selector.FeatureSelectNBest in project BoofCV by lessthanoptimal.

the class FactoryInterestPointAlgs method harrisLaplace.

/**
 * Creates a {@link FeatureLaplacePyramid} which is uses the Harris corner detector.
 *
 * @param extractRadius Size of the feature used to detect the corners.
 * @param detectThreshold Minimum corner intensity required
 * @param maxFeatures Max number of features that can be found.
 * @param imageType Type of input image.
 * @param derivType Image derivative type.
 * @return CornerLaplaceScaleSpace
 */
public static <T extends ImageGray<T>, D extends ImageGray<D>> FeatureLaplacePyramid<T, D> harrisLaplace(int extractRadius, float detectThreshold, int maxFeatures, Class<T> imageType, Class<D> derivType) {
    GradientCornerIntensity<D> harris = FactoryIntensityPointAlg.harris(extractRadius, 0.04f, false, derivType);
    GeneralFeatureIntensity<T, D> intensity = new WrapperGradientCornerIntensity<>(harris);
    NonMaxSuppression extractorMin = intensity.localMinimums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.min(extractRadius, detectThreshold, extractRadius, true)) : null;
    NonMaxSuppression extractorMax = intensity.localMaximums() ? FactoryFeatureExtractor.nonmax(ConfigExtract.max(extractRadius, detectThreshold, extractRadius, true)) : null;
    FeatureSelectLimitIntensity<Point2D_I16> selector = new FeatureSelectNBest<>(new SampleIntensityImage.I16());
    GeneralFeatureDetector<T, D> detector = new GeneralFeatureDetector<>(intensity, extractorMin, extractorMax, selector);
    detector.setFeatureLimit(maxFeatures);
    AnyImageDerivative<T, D> deriv = GImageDerivativeOps.derivativeForScaleSpace(imageType, derivType);
    ImageFunctionSparse<T> sparseLaplace = FactoryDerivativeSparse.createLaplacian(imageType, null);
    return new FeatureLaplacePyramid<>(detector, sparseLaplace, deriv, 2);
}
Also used : FeatureSelectNBest(boofcv.alg.feature.detect.selector.FeatureSelectNBest) NonMaxSuppression(boofcv.abst.feature.detect.extract.NonMaxSuppression) Point2D_I16(georegression.struct.point.Point2D_I16) SampleIntensityImage(boofcv.alg.feature.detect.selector.SampleIntensityImage) WrapperGradientCornerIntensity(boofcv.abst.feature.detect.intensity.WrapperGradientCornerIntensity)

Aggregations

NonMaxSuppression (boofcv.abst.feature.detect.extract.NonMaxSuppression)5 FeatureSelectNBest (boofcv.alg.feature.detect.selector.FeatureSelectNBest)5 SampleIntensityImage (boofcv.alg.feature.detect.selector.SampleIntensityImage)5 Point2D_I16 (georegression.struct.point.Point2D_I16)5 WrapperGradientCornerIntensity (boofcv.abst.feature.detect.intensity.WrapperGradientCornerIntensity)3 WrapperHessianDerivBlobIntensity (boofcv.abst.feature.detect.intensity.WrapperHessianDerivBlobIntensity)2 ConfigExtract (boofcv.abst.feature.detect.extract.ConfigExtract)1 GeneralFeatureDetector (boofcv.alg.feature.detect.interest.GeneralFeatureDetector)1