@Override public void process(GrayF32 input) { features.reset(); locations.reset(); orientations.reset(); super.process(input); }
GrowQueue_F64 storage ) storage.reset(); if( H_inv == null ) H_inv = new DMatrixRMaj(3,3);
@Override public void findNearest(P point, double maxDistance, int numNeighbors, FastQueue<NnData<P>> results) { results.reset(); if( maxDistance < 0 ) maxDistance = Double.MAX_VALUE; outputIndex.reset(); outputDistance.reset(); alg.findClosestN(point,maxDistance,numNeighbors,outputIndex,outputDistance); for( int i = 0; i < outputIndex.size; i++ ) { int index = outputIndex.get(i); NnData<P> r = results.grow(); r.distance = outputDistance.get(i); r.point = points.get(index); r.index = index; } } }
@Override public void findNearest(P point, double maxDistance, int numNeighbors, FastQueue<NnData<P>> results) { results.reset(); if( maxDistance < 0 ) maxDistance = Double.MAX_VALUE; outputIndex.reset(); outputDistance.reset(); alg.findClosestN(point,maxDistance,numNeighbors,outputIndex,outputDistance); for( int i = 0; i < outputIndex.size; i++ ) { int index = outputIndex.get(i); NnData<P> r = results.grow(); r.distance = outputDistance.get(i); r.point = points.get(index); r.index = index; } } }
/** * Updates learning using the latest tracking results. * @param targetRegion Region selected by the fused tracking */ public void updateLearning( Rectangle2D_F64 targetRegion ) { storageMetric.reset(); // learn the initial descriptor TldHelperFunctions.convertRegion(targetRegion, targetRegion_I32); template.addDescriptor(true, targetRegion_I32); fern.learnFernNoise(true, targetRegion_I32); // mark only a few of the far away regions as negative. Marking all of them as negative is // computationally expensive FastQueue<TldRegionFernInfo> ferns = detection.getFernInfo(); int N = Math.min(config.numNegativeFerns,ferns.size); for( int i = 0; i < N; i++ ) { int index = rand.nextInt(ferns.size); TldRegionFernInfo f = ferns.get(index); // no need to check variance here since the detector already did it // learn features far away from the target region double overlap = helper.computeOverlap(targetRegion_I32, f.r); if( overlap > config.overlapLower ) continue; fern.learnFern(false, f.r ); } learnAmbiguousNegative(targetRegion); }
storageMetric.reset(); fernNegative.clear();
chisqs.reset();
/** * Detects and describes features inside provide images. All images are integral images. * * @param grayII Gray-scale integral image * @param colorII Color integral image */ public void detect( II grayII , Planar<II> colorII ) { orientation.setImage(grayII); describe.setImage(grayII,colorII); descriptions.reset(); featureAngles.reset(); // detect features detector.detect(grayII); // describe the found interest points foundPoints = detector.getFoundPoints(); for( int i = 0; i < foundPoints.size(); i++ ) { ScalePoint p = foundPoints.get(i); orientation.setObjectRadius(p.scale); double angle = orientation.compute(p.x,p.y); describe.describe(p.x, p.y, angle, p.scale, descriptions.grow()); featureAngles.push(angle); } }
angles.reset(); peakAngle = 0;
distances.reset(); indexes.reset();
distances.reset(); indexes.reset();
@Override public void detect(T input) { if( ii != null ) { ii.reshape(input.width,input.height); } // compute integral image ii = GIntegralImageOps.transform(input, ii); orientation.setImage(ii); describe.setImage(ii); features.reset(); featureAngles.reset(); // detect features detector.detect(ii); // describe the found interest points foundPoints = detector.getFoundPoints(); for( int i = 0; i < foundPoints.size(); i++ ) { ScalePoint p = foundPoints.get(i); double radius = p.scale* BoofDefaults.SURF_SCALE_TO_RADIUS; orientation.setObjectRadius(radius); double angle = orientation.compute(p.x,p.y); describe.describe(p.x,p.y, angle, p.scale, features.grow()); featureAngles.push(angle); } }
@Override public void detect(T input) { descs.reset(); featureRadiuses.reset(); featureAngles.reset(); location.reset(); if( orientation != null ) { orientation.setImage(input); } describe.setImage(input); detector.detect(input); int N = detector.getNumberOfFeatures(); for( int i = 0; i < N; i++ ) { Point2D_F64 p = detector.getLocation(i); double radius = detector.getRadius(i); double yaw = detector.getOrientation(i); if( orientation != null ) { orientation.setObjectRadius(radius); yaw = orientation.compute(p.x,p.y); } if( describe.process(p.x,p.y,yaw,radius,descs.grow()) ) { featureRadiuses.push(radius); featureAngles.push(yaw); location.add(p); } else { descs.removeTail(); } } }
weights.reset(); int numSamples = radialSamples*2+2; int numPts = numSamples-1;
listWidths.reset(); listIDs.reset();
@Test public void reset() { GrowQueue_F64 alg = new GrowQueue_F64(10); alg.push(1); alg.push(3); alg.push(-2); assertTrue(1.0 == alg.get(0)); assertEquals(3,alg.size); alg.reset(); assertEquals(0,alg.size); }
outputDistance.reset(); exhaustive.findClosestN(where, 10.0, numNeighbors, outputIndex,outputDistance);
@Test public void addAll_array() { GrowQueue_F64 queue0 = new GrowQueue_F64(2); double[] array = new double[]{3,4,5}; queue0.add(1); queue0.add(2); assertEquals(2,queue0.size); queue0.addAll(array,0,3); assertEquals(5,queue0.size); for( int i = 0; i < queue0.size; i++ ) { assertEquals(queue0.get(i),i+1,1e-8); } queue0.reset(); queue0.addAll(array,1,3); assertEquals(2,queue0.size); for( int i = 0; i < queue0.size; i++ ) { assertEquals(queue0.get(i),i+4,1e-8); } }
/** * Make sure it works after multiple calls */ @Test public void findClosestN_multiple_calls() { List<double[]> list = TestKdTreeConstructor.createPoints(2, 1,2, 3,4 , 4,5, 6,7 , 8,9 ); ExhaustiveNeighbor<double[]> alg = new ExhaustiveNeighbor<>(distance); alg.setPoints(list); GrowQueue_I32 outputIndex = new GrowQueue_I32(); GrowQueue_F64 outputDistance = new GrowQueue_F64(); alg.findClosestN(new double[]{4.1, 4.9}, 10, 3, outputIndex, outputDistance); outputIndex.reset(); outputDistance.reset(); alg.findClosestN(new double[]{4.1, 4.9}, 10, 3, outputIndex, outputDistance); assertEquals(3,outputIndex.size); assertEquals(3,outputDistance.size); checkContains(1,outputIndex); checkContains(2,outputIndex); checkContains(3,outputIndex); }
@Test public void addAll_queue() { GrowQueue_F64 queue0 = new GrowQueue_F64(2); GrowQueue_F64 queue1 = new GrowQueue_F64(3); queue0.add(1); queue0.add(2); queue1.add(3); queue1.add(4); queue1.add(5); assertEquals(2,queue0.size); queue0.addAll(queue1); assertEquals(5,queue0.size); for( int i = 0; i < queue0.size; i++ ) { assertEquals(queue0.get(i),i+1,1e-8); } queue0.reset(); queue0.addAll(queue1); assertEquals(3,queue0.size); for( int i = 0; i < queue0.size; i++ ) { assertEquals(queue0.get(i),i+3,1e-8); } }