ANPRTest.java

package ac.essex.ooechs.imaging.commons.apps.anpr; 
 
import ac.essex.ooechs.imaging.commons.util.panels.ImagePanel; 
import ac.essex.ooechs.imaging.commons.PixelLoader; 
 
import javax.swing.*; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 
import java.awt.*; 
import java.io.File; 
import java.util.Vector; 
 
/** 
 * Created by IntelliJ IDEA. 
 * User: ooechs 
 * Date: 06-Jul-2006 
 * Time: 11:55:00 
 * To change this template use File | Settings | File Templates. 
 */ 
public class ANPRTest extends JFrame { 
 
 
    //public static final String IMAGE_DIRECTORY = "/home/ooechs/ecj-work/color_constancy/synthetic2/unseen"; 
    public static final String IMAGE_DIRECTORY = "/home/ooechs/ecj-work/vehicle-recognition/"; 
 
 
    JList fileList; 
    ImagePanel panel, panel2; 
    JTextArea svgField; 
 
    public static void main(String[] args) { 
        new ANPRTest(); 
    } 
 
    public ANPRTest() { 
 
        super("Vehicle Recognition 1.0"); 
 
        // Get container and use Border Layout 
        Container c = getContentPane(); 
        c.setLayout(new BorderLayout()); 
 
        // initialise the JList 
        populateJListFiles(); 
 
        fileList.addListSelectionListener(new ListSelectionListener() { 
            public void valueChanged(ListSelectionEvent e) { 
                if (!e.getValueIsAdjusting()) { 
                    churn(); 
                } 
            } 
        }); 
 
        // initialise the image panel 
        panel = new ImagePanel(); 
        panel2 = new ImagePanel(); 
 
 
        // add to container 
        JScrollPane scroller = new JScrollPane(fileList); 
        scroller.setPreferredSize(new Dimension(180, -1)); 
        c.add(scroller, BorderLayout.WEST); 
 
        JPanel center = new JPanel(new GridLayout(2,1)); 
        center.add(panel2); 
        center.add(panel); 
        c.add(center, BorderLayout.CENTER); 
 
        // show 
        setSize(930, 700); 
        setVisible(true); 
 
    } 
 
    public void churn() { 
 
        if (fileList.getSelectedValue() == null) { 
            svgField.setText("Please select an image"); 
            return; 
        } 
        try { 
            File f = new File(IMAGE_DIRECTORY, (String) fileList.getSelectedValue()); 
            PixelLoader image = new PixelLoader(f); 
            panel2.setImage(new PixelLoader(f)); 
 
 
            long start = System.currentTimeMillis(); 
 
            // find all pixels which are of this colour 
            double[][] sobelResults = HorizontalSobel.Sobel(image); 
 
            final int z = 10; 
 
            boolean[][] importantPixels = new boolean[(image.getWidth() / z)+1][image.getHeight()]; 
 
            for (int y = 0; y < image.getHeight(); y++) { 
 
                int xCounter = 0; 
 
                for (int x = 0; x < image.getWidth() - z; x+=z) { 
 
                    int gr = 0; 
 
                    for (int i = 0; i < z; i++) { 
                        int tmpgr = (int) sobelResults[x + i][y]; 
                        if (tmpgr > gr) gr = tmpgr; 
                    } 
 
                    importantPixels[xCounter][y] = gr > 220; 
 
 
 
                    xCounter++; 
 
                } 
            } 
 
 
            int black = Color.BLACK.getRGB(); 
            int white = Color.WHITE.getRGB(); 
 
            for (int y = 0; y < image.getHeight(); y++) { 
                for (int x = 1; x < (image.getWidth() / z) - 1; x++) { 
 
                    int color = importantPixels[x][y]? white : black; 
 
                    // do some further tests 
                    if (!importantPixels[x - 1][y] && !importantPixels[x + 1][y]) 
                    color = black; 
 
                    int xOffset = x * z; 
 
                    for (int i = 0; i < z; i++) { 
                        image.setRGB(xOffset+i,y, color); 
                    } 
 
                } 
            } 
 
            long end = System.currentTimeMillis(); 
 
            System.out.println(end - start + " ms."); 
 
            panel.setImage(image); 
        } catch (Exception err) { 
            err.printStackTrace(); 
        } 
    } 
 
    public void populateJListFiles() { 
 
        File directory = new File(IMAGE_DIRECTORY); 
        File[] files = directory.listFiles(); 
 
        Vector<String> data = new Vector<String>(10); 
 
        for (File file : files) { 
 
            if (file.getName().toLowerCase().endsWith(".jpg")) { 
                data.add(file.getName()); 
            } else { 
                System.out.println("Did not include: " + file.getName()); 
            } 
 
        } 
 
        fileList = new JList(data); 
 
    } 
}