public SurfMultiSpectral_to_DescribeRegionPoint( DescribePointSurfMultiSpectral<II> alg, Class<T> imageType, Class<II> integralType) { this.alg = alg; gray = GeneralizedImageOps.createSingleBand(imageType, 1, 1); grayII = GeneralizedImageOps.createSingleBand(integralType, 1, 1); bandII = new MultiSpectral<II>(integralType, 1, 1, alg.getNumBands()); this.imageType = ImageType.ms(alg.getNumBands(), imageType); }
@Override public boolean process( double x, double y, double orientation, double radius, BrightFeature description) { alg.describe(x, y, orientation, radius / BoofDefaults.SURF_SCALE_TO_RADIUS, description); return true; }
@Override public void setImage(MultiSpectral<T> image) { gray.reshape(image.width, image.height); grayII.reshape(image.width, image.height); bandII.reshape(image.width, image.height); GConvertImage.average(image, gray); GIntegralImageOps.transform(gray, grayII); for (int i = 0; i < image.getNumBands(); i++) GIntegralImageOps.transform(image.getBand(i), bandII.getBand(i)); alg.setImage(grayII, bandII); }
@Override public double getCanonicalWidth() { return alg.getDescribe().getCanonicalWidth(); }
@Override public BrightFeature createDescription() { return alg.createDescription(); }