![JAR search and dependency download from the Maven repository](/logo.png)
boofcv.alg.tracker.tld.TldFernManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of recognition Show documentation
Show all versions of recognition Show documentation
BoofCV is an open source Java library for real-time computer vision and robotics applications.
/*
* Copyright (c) 2011-2013, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.alg.tracker.tld;
import java.util.Stack;
/**
* Lookup table for ferns. An array is used to look up each fern by value. The recommend descriptor size in the
* paper is 10 bits, which results in a reasonably sized table.
*
* @author Peter Abeles
*/
public class TldFernManager {
// lookup table for ferns. The value of the fern is an element in the table
TldFernFeature table[];
// storage for unused ferns which can be recycled
Stack unusedFern = new Stack();
/**
* Configures the manager
*
* @param descriptorSize Size of the fern's descriptor
*/
public TldFernManager(int descriptorSize) {
int N = 1 << descriptorSize;
table = new TldFernFeature[N];
}
/**
* Looks up the fern with the specified value. If non exist a new one is created and returned.
* @param value The fern's value
* @return The fern associated with that value
*/
public TldFernFeature lookupFern( int value ) {
TldFernFeature found = table[value];
if( found == null ) {
found = createFern();
found.init(value);
table[value] = found;
}
return found;
}
/**
* Looks up the posterior probability of the specified fern. If a fern is found its posterior is returned
* otherwise -1 is returned.
*
* NOTE: How unknown values are handled is a deviation from the paper.
*
* @param value The fern's value
* @return Fern's posterior probability. If the value is known then return -1
*/
public double lookupPosterior( int value ) {
TldFernFeature found = table[value];
if( found == null ) {
return 0;
}
return found.posterior;
}
public void reset() {
for( int i = 0; i < table.length; i++ ) {
TldFernFeature f = table[i];
if( f != null ) {
unusedFern.add(f);
table[i] = null;
}
}
}
protected TldFernFeature createFern() {
if( unusedFern.size() > 0 ) {
return unusedFern.pop();
}
return new TldFernFeature();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy