@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); } }
@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); } }
/** * compute the probability that each region is the target conditional upon this image * the sumP and sumN are needed for image conditional probability * * NOTE: This is a big change from the original paper */ protected void selectBestRegionsFern(double totalP, double totalN) { for( int i = 0; i < fernInfo.size; i++ ) { TldRegionFernInfo info = fernInfo.get(i); double probP = info.sumP/totalP; double probN = info.sumN/totalN; // only consider regions with a higher P likelihood if( probP > probN ) { // reward regions with a large difference between the P and N values storageMetric.add(-(probP-probN)); storageRect.add( info.r ); } } // Select the N regions with the highest fern probability if( config.maximumCascadeConsider < storageMetric.size ) { int N = Math.min(config.maximumCascadeConsider, storageMetric.size); storageIndexes.resize(storageMetric.size); QuickSelect.selectIndex(storageMetric.data, N - 1, storageMetric.size, storageIndexes.data); for( int i = 0; i < N; i++ ) { fernRegions.add(storageRect.get(storageIndexes.get(i))); } } else { fernRegions.addAll(storageRect); } }
error += dx*dx + dy*dy; storage.add(error);
private static List<double[]> findNeighbors( List<double[]> data , double[]target , double maxDistance , int maxN ) { List<double[]> ret = new ArrayList<double[]>(); List<double[]> found = new ArrayList<double[]>(); GrowQueue_F64 distances = new GrowQueue_F64(); GrowQueue_I32 indexes = new GrowQueue_I32(); for( int i = 0; i < data.size(); i++ ) { double[] d = data.get(i); double dx = d[0] - target[0]; double dy = d[1] - target[1]; double dist = dx*dx + dy*dy; if( dist <= maxDistance ) { distances.add(dist); found.add(d); } } indexes.resize(distances.size); maxN = Math.min(maxN,distances.size); QuickSelect.selectIndex(distances.data,maxN,distances.size,indexes.data); for( int i = 0; i < maxN; i++ ) { ret.add( found.get( indexes.data[i])); } return ret; }
@Override protected void handleDetection(ScalePoint p) { // adjust the image for the down sampling in each octave double localX = p.x / pixelScaleToInput; double localY = p.y / pixelScaleToInput; double localSigma = p.scale / pixelScaleToInput; // find potential orientations first orientation.process(localX,localY,localSigma); // describe each feature GrowQueue_F64 angles = orientation.getOrientations(); for (int i = 0; i < angles.size; i++) { BrightFeature feature = features.grow(); feature.white = p.white; describe.process(localX,localY,localSigma,angles.get(i),feature); orientations.add(angles.get(i)); locations.add(p); } }
weights.add(w);
weights.add(w); samplePts.grow().set((x - center.x) / localScale, (y - center.y) / localScale);
detector.getFiducialToCamera(i, targetToCamera); listPose.grow().set(targetToCamera); listWidths.add(detector.getWidth(i)); listIDs.add(detector.getId(i));
@Test public void fraction_F64() { GrowQueue_F64 l = new GrowQueue_F64(); for (int i = 0; i < 100; i++) { l.add(i); } assertEquals(50,UtilStatisticsQueue.fraction(l,0.5),1e-8); assertEquals(0,UtilStatisticsQueue.fraction(l,0),1e-8); assertEquals(99,UtilStatisticsQueue.fraction(l,1.0),1e-8); } }
@Test public void getFraction() { GrowQueue_F64 alg = new GrowQueue_F64(20); for (int i = 0; i < 20; i++) { alg.add(i); } assertEquals(0,alg.getFraction(0.0), UtilEjml.TEST_F64); assertEquals(0,alg.getFraction(0.02), UtilEjml.TEST_F64); assertEquals(0,alg.getFraction(0.03), UtilEjml.TEST_F64); assertEquals(1,alg.getFraction(1.0/19.0), UtilEjml.TEST_F64); assertEquals(1,alg.getFraction(1.7/19.0), UtilEjml.TEST_F64); assertEquals(19/2,alg.getFraction(0.5), UtilEjml.TEST_F64); assertEquals(19,alg.getFraction(1.0), UtilEjml.TEST_F64); }