package edu.harvard.mcb.leschziner.particlefilter;
import java.awt.image.Kernel;
import edu.harvard.mcb.leschziner.core.Particle;
import edu.harvard.mcb.leschziner.core.ParticleFilter;
/**
* A simple low-pass filter that utilizes a 1/size kernel
*
* @author spartango
*
*/
public class LowPassFilter implements ParticleFilter {
/**
*
*/
private static final long serialVersionUID = 5558259888147858661L;
// Size of the filter
private int size;
// Low pass kernel to be convolved (cannot be serialized)
private transient Kernel kernel;
/**
* Builds a low pass filter of a given size
*
* @param size
*/
public LowPassFilter(int size) {
this.size = size;
}
private static Kernel generateKernel(int size) {
float[] basis = new float[size * size];
float value = 1.0f / (size * size);
for (int i = 0; i < basis.length; i++) {
basis[i] = value;
}
return new Kernel(size, size, basis);
}
/**
* Applies the low pass filter to a particle, generating a new, filtered
* particle
*/
@Override public Particle filter(Particle target) {
if (kernel == null) {
kernel = generateKernel(size);
}
return Particle.convolve(target, kernel);
}
}