use of boofcv.abst.feature.describe.DescribeRegionPoint in project BoofCV by lessthanoptimal.
the class TestDetectDescribeMultiFusion method checkFeatureNotInBounds.
/**
* If a feature is not in bounds make sure everything is handled correctly
*/
@Test
public void checkFeatureNotInBounds() {
DetectorInterestPointMulti detector = new DummyDetector(2);
DescribeRegionPoint describe = new TestDetectDescribeFusion.DummyRegionPoint();
DetectDescribeMultiFusion alg = new DetectDescribeMultiFusion(detector, null, describe);
alg.process(new GrayF32(2, 2));
assertEquals(2, alg.getNumberOfSets());
for (int n = 0; n < alg.getNumberOfSets(); n++) {
PointDescSet set = alg.getFeatureSet(n);
// one feature should not be inside the image
if (n == 0)
assertEquals(n + 8, set.getNumberOfFeatures());
else
assertEquals(n + 9, set.getNumberOfFeatures());
for (int i = 0; i < set.getNumberOfFeatures(); i++) {
assertTrue(set.getDescription(i) != null);
assertTrue(set.getLocation(i) != null);
}
}
}
use of boofcv.abst.feature.describe.DescribeRegionPoint in project BoofCV by lessthanoptimal.
the class VisualizeStereoVisualOdometryApp method createStereoDepth.
private StereoVisualOdometry<I> createStereoDepth(int whichAlg) {
Class derivType = GImageDerivativeOps.getDerivativeType(imageType);
StereoDisparitySparse<I> disparity = FactoryStereoDisparity.regionSparseWta(2, 150, 3, 3, 30, -1, true, imageType);
PkltConfig kltConfig = new PkltConfig();
kltConfig.templateRadius = 3;
kltConfig.pyramidScaling = new int[] { 1, 2, 4, 8 };
if (whichAlg == 0) {
ConfigGeneralDetector configDetector = new ConfigGeneralDetector(600, 3, 1);
PointTrackerTwoPass<I> tracker = FactoryPointTrackerTwoPass.klt(kltConfig, configDetector, imageType, derivType);
return FactoryVisualOdometry.stereoDepth(1.5, 120, 2, 200, 50, false, disparity, tracker, imageType);
} else if (whichAlg == 1) {
ConfigGeneralDetector configExtract = new ConfigGeneralDetector(600, 3, 1);
GeneralFeatureDetector detector = FactoryPointTracker.createShiTomasi(configExtract, derivType);
DescribeRegionPoint describe = FactoryDescribeRegionPoint.brief(null, imageType);
ScoreAssociateHamming_B score = new ScoreAssociateHamming_B();
AssociateDescription2D<TupleDesc_B> associate = new AssociateDescTo2D<>(FactoryAssociation.greedy(score, 150, true));
PointTrackerTwoPass tracker = FactoryPointTrackerTwoPass.dda(detector, describe, associate, null, 1, imageType);
return FactoryVisualOdometry.stereoDepth(1.5, 80, 3, 200, 50, false, disparity, tracker, imageType);
} else if (whichAlg == 2) {
PointTracker<I> tracker = FactoryPointTracker.combined_ST_SURF_KLT(new ConfigGeneralDetector(600, 3, 0), kltConfig, 50, null, null, imageType, derivType);
PointTrackerTwoPass<I> twopass = new PointTrackerToTwoPass<>(tracker);
return FactoryVisualOdometry.stereoDepth(1.5, 80, 3, 200, 50, false, disparity, twopass, imageType);
} else if (whichAlg == 3) {
ConfigGeneralDetector configDetector = new ConfigGeneralDetector(600, 3, 1);
PointTracker<I> trackerLeft = FactoryPointTracker.klt(kltConfig, configDetector, imageType, derivType);
PointTracker<I> trackerRight = FactoryPointTracker.klt(kltConfig, configDetector, imageType, derivType);
DescribeRegionPoint describe = FactoryDescribeRegionPoint.surfFast(null, imageType);
return FactoryVisualOdometry.stereoDualTrackerPnP(90, 2, 1.5, 1.5, 200, 50, trackerLeft, trackerRight, describe, imageType);
} else if (whichAlg == 4) {
// GeneralFeatureIntensity intensity =
// FactoryIntensityPoint.hessian(HessianBlobIntensity.Type.TRACE,defaultType);
GeneralFeatureIntensity intensity = FactoryIntensityPoint.shiTomasi(1, false, imageType);
NonMaxSuppression nonmax = FactoryFeatureExtractor.nonmax(new ConfigExtract(2, 50, 0, true, false, true));
GeneralFeatureDetector general = new GeneralFeatureDetector(intensity, nonmax);
general.setMaxFeatures(600);
DetectorInterestPointMulti detector = new GeneralToInterestMulti(general, 2, imageType, derivType);
// DescribeRegionPoint describe = FactoryDescribeRegionPoint.brief(new ConfigBrief(true),defaultType);
// DescribeRegionPoint describe = FactoryDescribeRegionPoint.pixelNCC(5,5,defaultType);
DescribeRegionPoint describe = FactoryDescribeRegionPoint.surfFast(null, imageType);
DetectDescribeMulti detDescMulti = new DetectDescribeMultiFusion(detector, null, describe);
return FactoryVisualOdometry.stereoQuadPnP(1.5, 0.5, 75, Double.MAX_VALUE, 300, 50, detDescMulti, imageType);
} else {
throw new RuntimeException("Unknown selection");
}
}
use of boofcv.abst.feature.describe.DescribeRegionPoint in project BoofCV by lessthanoptimal.
the class TestDescribePlanar method checkNumBands.
/**
* Sanity check to see if input image and number of descriptors is the same
*/
@Test(expected = IllegalArgumentException.class)
public void checkNumBands() {
DescribeRegionPoint[] descs = new DummyDesc[3];
descs[0] = new DummyDesc();
descs[1] = new DummyDesc();
descs[2] = new DummyDesc();
DummyAlg alg = new DummyAlg(descs);
alg.setImage(new Planar(GrayS8.class, 1, 1, 2));
}
use of boofcv.abst.feature.describe.DescribeRegionPoint in project BoofCV by lessthanoptimal.
the class CompareConvertedDescriptionsApp method describeImage.
public static <TD extends TupleDesc> FastQueue<TD> describeImage(GrayF32 input, InterestPointDetector<GrayF32> detector, DescribeRegionPoint<GrayF32, TD> describe, List<Point2D_F64> location) {
FastQueue<TD> list = new FastQueue<>(100, describe.getDescriptionType(), false);
System.out.println("Detecting");
detector.detect(input);
System.out.println("Describing");
describe.setImage(input);
for (int i = 0; i < detector.getNumberOfFeatures(); i++) {
Point2D_F64 p = detector.getLocation(i);
double radius = detector.getRadius(i);
double ori = detector.getOrientation(i);
TD d = describe.createDescription();
if (describe.process(p.x, p.y, ori, radius, d)) {
list.add(d);
location.add(p.copy());
}
}
return list;
}
use of boofcv.abst.feature.describe.DescribeRegionPoint in project BoofCV by lessthanoptimal.
the class TestWrapVisOdomQuadPnP method createAlgorithm.
@Override
public StereoVisualOdometry<GrayF32> createAlgorithm() {
GeneralFeatureIntensity intensity = FactoryIntensityPoint.shiTomasi(1, false, GrayF32.class);
NonMaxSuppression nonmax = FactoryFeatureExtractor.nonmax(new ConfigExtract(2, 1, 0, true, false, true));
GeneralFeatureDetector<GrayF32, GrayF32> general = new GeneralFeatureDetector<>(intensity, nonmax);
general.setMaxFeatures(600);
DetectorInterestPointMulti detector = new GeneralToInterestMulti(general, 2, GrayF32.class, GrayF32.class);
DescribeRegionPoint describe = FactoryDescribeRegionPoint.surfFast(null, GrayF32.class);
DetectDescribeMulti detDescMulti = new DetectDescribeMultiFusion(detector, null, describe);
return FactoryVisualOdometry.stereoQuadPnP(1.5, 0.5, 200, Double.MAX_VALUE, 300, 50, detDescMulti, GrayF32.class);
}
Aggregations