/** * Wraps {@link GeneralFeatureDetector} inside an {@link InterestPointDetector}. * * @param feature Feature detector. * @param scale Scale of detected features * @param inputType Image type of input image. * @param derivType Image type for gradient. * @return The interest point detector. */ public static <T extends ImageGray, D extends ImageGray> InterestPointDetector<T> wrapPoint(GeneralFeatureDetector<T, D> feature, double scale , Class<T> inputType, Class<D> derivType) { ImageGradient<T, D> gradient = null; ImageHessian<D> hessian = null; if (feature.getRequiresGradient() || feature.getRequiresHessian()) gradient = FactoryDerivative.sobel(inputType, derivType); if (feature.getRequiresHessian()) hessian = FactoryDerivative.hessianSobel(derivType); return new GeneralToInterestPoint<>(feature, gradient, hessian, scale, derivType); }
@Override public void detect(T input) { super.detect(input,null); foundPoints.reset(); if( getDetector().isDetectMaximums() ) { QueueCorner corners = detector.getMaximums(); for (int i = 0; i < corners.size; i++) { Point2D_I16 p = corners.get(i); foundPoints.grow().set(p.x,p.y); } } if( getDetector().isDetectMinimums() ) { QueueCorner corners = detector.getMinimums(); for (int i = 0; i < corners.size; i++) { Point2D_I16 p = corners.get(i); foundPoints.grow().set(p.x,p.y); } } }