SegmentationGUI.java
package ac.essex.ooechs.imaging.commons.segmentation;
import ac.essex.ooechs.imaging.commons.util.panels.FileTree;
import ac.essex.ooechs.imaging.commons.util.panels.ImagePanel;
import ac.essex.ooechs.imaging.commons.util.ImageFilenameFilter;
import ac.essex.ooechs.imaging.commons.PixelLoader;
import ac.essex.ooechs.imaging.commons.ConvolutionMatrix;
import java.io.File;
import java.awt.image.BufferedImage;
import java.awt.*;
import javax.swing.*;
public class SegmentationGUI extends JFrame {
protected ImagePanel p;
protected JButton load, segment;
protected Segmenter segmenter;
public SegmentationGUI(File file, Segmenter segmenter) {
super("Image Browser");
this.segmenter = segmenter;
p = new ImagePanel();
p.setDisplayCentered(true);
FileTree f = new FileTree(file, new ImageFilenameFilter()) {
/**
* Called when a file is selected in the tree
*/
public void onSelectFile(File f) {
loadImage(f);
}
};
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, new JScrollPane(f), new JScrollPane(p));
getContentPane().add(splitPane);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(640, 480);
setVisible(true);
}
protected void loadImage(File f) {
if (f != null) {
try {
p.setImage(new PixelLoader(f));
segment();
} catch (Exception err) {
err.printStackTrace();
}
}
}
protected void segment() {
if (segmenter == null) return;
new Thread() {
public void run() {
BufferedImage image = p.getImage();
PixelLoader pl = new PixelLoader(image);
for (int y = 0; y < image.getHeight(); y++)
for (int x = 0; x < image.getWidth(); x++) {
int result = segmenter.segment(pl, x, y);
if (result >= 0) {
int color = segmenter.getColor(result);
image.setRGB(x, y, color);
}
}
p.repaint();
}
}.start();
}
public static void main(String args[]) {
File directory = new File("/home/ooechs/Desktop/Documents/Papers/Pipelines/data");
Segmenter s = new Segmenter() {
public int getColor(int i) {
return new Color(i ,i, i).getRGB();
}
public int segment(PixelLoader image, int x, int y) {
int i = image.getConvolved(x, y, new ConvolutionMatrix(ConvolutionMatrix.HORIZONTAL_SOBEL));
if (i < 0) i = 0;
if (i > 255) i = 255;
return i;
}
};
new SegmentationGUI(directory, s);
}
}