package nbtool.gui.logviews.images;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
public class MathMorphology {
StructuringElement s;
public MathMorphology(StructuringElement s_) {
s = s_;
}
public void setStructuringElement(StructuringElement s_) {
s = s_;
}
public BufferedImage erosion(BufferedImage img) {
WritableRaster forReading = img.copyData(null);
WritableRaster forWriting = img.getRaster();
for (int y = 0; y < forReading.getHeight(); y++) {
for (int x = 0; x < forReading.getWidth(); x++) {
int[] pixel = new int[1];
pixel[0] = s.min(forReading, x, y);
forWriting.setPixel(x, y, pixel);
}
}
return img;
}
public BufferedImage dilation(BufferedImage img) {
WritableRaster forReading = img.copyData(null);
WritableRaster forWriting = img.getRaster();
for (int y = 0; y < forReading.getHeight(); y++) {
for (int x = 0; x < forReading.getWidth(); x++) {
int[] pixel = new int[1];
pixel[0] = s.max(forReading, x, y);
forWriting.setPixel(x, y, pixel);
}
}
return img;
}
public BufferedImage opening(BufferedImage img) {
return dilation(erosion(img));
}
public BufferedImage closing(BufferedImage img) {
return erosion(dilation(img));
}
}