package edu.harvard.mcb.leschziner.particlefilter;
import com.googlecode.javacv.cpp.opencv_imgproc;
import edu.harvard.mcb.leschziner.core.Particle;
import edu.harvard.mcb.leschziner.core.ParticleFilter;
/**
* Applies a gaussian filter to a particle
*
* @author spartango
*
*/
public class GaussianFilter implements ParticleFilter {
/**
*
*/
private static final long serialVersionUID = -5419594820002104375L;
// Radius of the filtering kernel
private final int radius;
/**
* Builds a gaussian filter
*
* @param radius
*/
public GaussianFilter(int radius) {
this.radius = radius;
}
/**
* Applies a gaussian blur to the particle
*/
@Override public Particle filter(Particle target) {
Particle result = target.createCompatible();
// The kernel is separable, so we'll use 1D kernels
opencv_imgproc.cvSmooth(target.getImage(),
result.getImage(),
opencv_imgproc.CV_GAUSSIAN,
radius,
radius,
0,
0);
return result;
}
}