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