package ini.trakem2.imaging.filters; import ij.plugin.filter.BackgroundSubtracter; import ij.process.ColorProcessor; import ij.process.ImageProcessor; import java.util.Map; /** Subtract background with the rolling-ball algorithm. */ public class SubtractBackground implements IFilter { protected int radius = 50; public SubtractBackground() {} public SubtractBackground(final int radius) { this.radius = radius; } public SubtractBackground(Map<String,String> params) { String s = params.get("radius"); if (null != s) { try { this.radius = Integer.parseInt(s); return; } catch (NumberFormatException nfe) {} } throw new IllegalArgumentException("Could not create filter " + getClass().getName() + ": invalid or undefined radius!"); } @Override public ImageProcessor process(ImageProcessor ip) { BackgroundSubtracter bs = new BackgroundSubtracter(); if (ip instanceof ColorProcessor) { bs.subtractRGBBackround((ColorProcessor)ip, radius); } else { bs.subtractBackround(ip, radius); } return ip; } @Override public String toXML(String indent) { return new StringBuilder(indent) .append("<t2_filter class=\"") .append(getClass().getName()) .append("\" radius=\"").append(radius).append("\" />\n").toString(); } @Override public boolean equals(final Object o) { if (null == o) return false; if (o.getClass() == getClass()) { return ((SubtractBackground)o).radius == radius; } return false; } }