use of boofcv.alg.feature.describe.DescribePointSift in project BoofCV by lessthanoptimal.
the class FactoryDetectDescribe method sift.
/**
* Creates a new SIFT feature detector and describer.
*
* @see CompleteSift
*
* @param config Configuration for the SIFT detector and descriptor.
* @return SIFT
*/
public static <T extends ImageGray<T>> DetectDescribePoint<T, BrightFeature> sift(@Nullable ConfigCompleteSift config) {
if (config == null)
config = new ConfigCompleteSift();
ConfigSiftScaleSpace configSS = config.scaleSpace;
ConfigSiftDetector configDetector = config.detector;
ConfigSiftOrientation configOri = config.orientation;
ConfigSiftDescribe configDesc = config.describe;
SiftScaleSpace scaleSpace = new SiftScaleSpace(configSS.firstOctave, configSS.lastOctave, configSS.numScales, configSS.sigma0);
OrientationHistogramSift<GrayF32> orientation = new OrientationHistogramSift<>(configOri.histogramSize, configOri.sigmaEnlarge, GrayF32.class);
DescribePointSift<GrayF32> describe = new DescribePointSift<>(configDesc.widthSubregion, configDesc.widthGrid, configDesc.numHistogramBins, configDesc.sigmaToPixels, configDesc.weightingSigmaFraction, configDesc.maxDescriptorElementValue, GrayF32.class);
NonMaxSuppression nns = FactoryFeatureExtractor.nonmax(configDetector.extract);
NonMaxLimiter nonMax = new NonMaxLimiter(nns, configDetector.maxFeaturesPerScale);
CompleteSift dds = new CompleteSift(scaleSpace, configDetector.edgeR, nonMax, orientation, describe);
return new DetectDescribe_CompleteSift<>(dds);
}
use of boofcv.alg.feature.describe.DescribePointSift in project BoofCV by lessthanoptimal.
the class TestDescribeDenseSiftAlg method computeDescriptor.
/**
* Compute to the general descriptor algorithm. They should produce the same results
*/
@Test
public void computeDescriptor() {
GrayF32 derivX = new GrayF32(100, 102);
GrayF32 derivY = new GrayF32(100, 102);
GImageMiscOps.fillUniform(derivX, rand, 0, 200);
GImageMiscOps.fillUniform(derivY, rand, 0, 200);
DescribeDenseSiftAlg<GrayF32> alg = new DescribeDenseSiftAlg<>(4, 4, 8, 0.5, 0.2, 10, 10, GrayF32.class);
DescribePointSift<GrayF32> algTest = new DescribePointSift<>(4, 4, 8, 1, 0.5, 0.2, GrayF32.class);
alg.setImageGradient(derivX, derivY);
algTest.setImageGradient(derivX, derivY);
List<Point2D_I32> samplePoints = new ArrayList<>();
samplePoints.add(new Point2D_I32(30, 35));
samplePoints.add(new Point2D_I32(45, 10));
samplePoints.add(new Point2D_I32(60, 12));
samplePoints.add(new Point2D_I32(50, 50));
TupleDesc_F64 found = new TupleDesc_F64(128);
TupleDesc_F64 expected = new TupleDesc_F64(128);
for (Point2D_I32 p : samplePoints) {
alg.computeDescriptor(p.x, p.y, found);
algTest.process(p.x, p.y, 1, 0, expected);
for (int i = 0; i < 128; i++) {
assertEquals(expected.value[i], found.value[i], 1e-8);
}
}
}
use of boofcv.alg.feature.describe.DescribePointSift in project BoofCV by lessthanoptimal.
the class TestCompleteSift method createAlg.
private CompleteSift createAlg() {
SiftScaleSpace ss = new SiftScaleSpace(-1, 4, 3, 1.6);
NonMaxSuppression nonmax = FactoryFeatureExtractor.nonmax(new ConfigExtract(1, 0, 1, true, true, true));
NonMaxLimiter limiter = new NonMaxLimiter(nonmax, 300);
OrientationHistogramSift<GrayF32> ori = new OrientationHistogramSift<>(36, 1.5, GrayF32.class);
DescribePointSift<GrayF32> describe = new DescribePointSift<>(4, 4, 8, 1.5, 0.5, 0.2, GrayF32.class);
return new CompleteSift(ss, 10, limiter, ori, describe);
}
Aggregations