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); 
    } 
 
}