/** * SymmetryMatch.java * * Matches the symmetry of given files for recognition purposes * * Jamie Hutton (JDH301) *s */ import java.awt.*; import java.awt.image.*; import java.applet.*; import java.net.*; import java.io.*; import java.lang.Math; import java.util.*; // additional stuff for swing import java.awt.event.*; import javax.swing.*; import javax.swing.JApplet; import javax.imageio.*; public class SymmetryMatch extends JApplet { Image [] matchingImages = new Image[5]; MediaTracker tracker = null; PixelGrabber grabber = null; int width = 0, height = 0, alg = 0, im = 0, imSet = 0, matchSetNo = 0, shapeNo = 0, noise = 0, rows = 0, cols = 0; String Indoor03[] = {"008a013s03L.png","008a014s03L.png","008a015s03L.png","008a016s03L.png","008a017s03L.png"}; String IndoorRight03[] = {"008a013s03R.png","008a014s03R.png","008a015s03R.png","008a016s03R.png","008a017s03R.png"}; String Indoor13[] = {"008a013s00L.png","008a013s01L.png","008a013s02L.png","008a013s03L.png","008a013s04L.png","008a013s05L.png","008a013s06L.png"}; String Indoor14[] = {"008a014s00L.png","008a014s01L.png","008a014s02L.png","008a014s03L.png","008a014s04L.png","008a014s06L.png","008a015s00L.png"}; String Indoor15[] = {"008a015s00L.png","008a015s01L.png","008a015s02L.png","008a015s03L.png","008a015s04L.png","008a015s05L.png","008a015s06L.png"}; String Indoor16[] = {"008a016s00L.png","008a016s01L.png","008a016s02L.png","008a016s03L.png","008a016s04L.png","008a016s05L.png","008a016s06L.png"}; String Indoor17[] = {"008a017s00L.png","008a017s01L.png","008a017s02L.png","008a017s03L.png","008a017s04L.png","008a017s05L.png","008a017s06L.png"}; String IndoorALL[] = {"008a013s00L.png","008a013s01L.png","008a013s02L.png","008a013s03L.png","008a013s04L.png","008a013s05L.png","008a013s06L.png","008a014s00L.png","008a014s01L.png","008a014s02L.png","008a014s03L.png","008a014s04L.png","008a014s06L.png","008a015s00L.png","008a015s01L.png","008a015s02L.png","008a015s03L.png","008a015s04L.png","008a015s05L.png","008a015s06L.png","008a016s00L.png","008a016s01L.png","008a016s02L.png","008a016s03L.png","008a016s04L.png","008a016s05L.png","008a016s06L.png","008a017s00L.png","008a017s01L.png","008a017s02L.png","008a017s03L.png","008a017s04L.png","008a017s05L.png","008a017s06L.png"}; String OutdoorALL[] = {"008e013s00L.png","008e014s00L.png","008e015s00L.png","008e016s01L.png","009e017s01L.png","009e018s00L.png","009e019s00L.png","009e020s02L.png","010e021s01L.png","010e022s01L.png","010e023s03L.png","010e024s00L.png","011e025s05L.png","011e026s02L.png","011e027s01L.png","011e028s00L.png","011e029s00L.png","012e030s00L.png","012e032s02L.png","012e033s01L.png"}; //matching data String IndoorSample[] = {"008a013s00L.png","008a014s00L.png","008a015s00L.png","008a016s00L.png","008a017s00L.png"}; String OutdoorSample[] = {"008e013s00L.png","008e014s00L.png","008e015s00L.png","008e016s01L.png","009e017s01L.png"}; String IndoorFirst[] = {"1sta013_avL.png","1sta014_avL.png","1sta015_avL.png","1sta016_avL.png","1sta017_avL.png"}; String IndoorLast[] = {"lsta013_avL.png","lsta014_avL.png","lsta015_avL.png","lsta016_avL.png","lsta017_avL.png"}; String IndoorAverages[] = {"ALLa013_avL.png","ALLa014_avL.png","ALLa015_avL.png","ALLa016_avL.png","ALLa017_avL.png"}; boolean processActionListener=true; Image image[]; //input image storage Image icons[]; //stores tick and cross Image shape[]; //data to match // thresholds int lowerThresh = 10; int upperThresh = 20; // original image pixel data int orig[] = null; int comp[] = null; int showMatches=5; // Output array int output[] = null; // some swing stuff JPanel controlPanel, topPanel, centpanel; JLabel origLabel; JLabel[] matches=new JLabel[showMatches]; JLabel[] matchesText=new JLabel[showMatches]; JLabel[] matchesOutput=new JLabel[showMatches]; JComboBox imSel, matchSet,imageSet, noiseSel; // Applet constructor public SymmetryMatch() { } // Applet init function public void init() { Container cont = getContentPane(); cont.removeAll(); cont.setBackground(Color.white); BorderLayout b = new BorderLayout(); b.setVgap(5); cont.setLayout(b); centpanel = new JPanel(new GridLayout(showMatches,3)); centpanel.setBackground(Color.white); cont.add(centpanel, BorderLayout.CENTER); topPanel = new JPanel(); topPanel.setBackground(Color.yellow); //combo boxes String imageSet2[] = {"Indoor Sample Set (03)", "Indoor Subject 13 (00-06)", "Indoor Subject 14 (00-06)", "Indoor Subject 15 (00-06)", "Indoor Subject 16 (00-06)", "Indoor Subject 17 (00-06)", "Indoor ALL: 13-17 (00-06)", "Indoor Right Set (03)", "Outdoor ALL: 13-33"}; imageSet = new JComboBox(imageSet2); imSet = imageSet.getSelectedIndex(); imSel = new JComboBox(getImageArray()); im = imSel.getSelectedIndex(); loadImages(); String matchSets[] = {"Single Gait Cycle (00L)", "Three Gait Average (00L-02L)", "Three Gait Average (04L-06L)", "Seven Gait Average (00L-06L)"}; matchSet = new JComboBox(matchSets); alg = matchSet.getSelectedIndex(); JLabel a; controlPanel = new JPanel(); a = new JLabel("Image Set:"); controlPanel.add(a); controlPanel.add(imageSet); a = new JLabel("Test Image:"); controlPanel.add(a); controlPanel.add(imSel); a = new JLabel("Comparison Data:"); controlPanel.add(a); controlPanel.add(matchSet); controlPanel.setBackground(Color.yellow); controlPanel.setForeground(Color.blue); origLabel = new JLabel("Original Image", new ImageIcon(image[0]), JLabel.LEFT); origLabel.setFont(new Font("Arial Bold", Font.PLAIN, 18)); a = new JLabel("Test Image:"); a.setFont(new Font("Arial Bold", Font.PLAIN, 18)); origLabel.setVerticalTextPosition(JLabel.CENTER); origLabel.setHorizontalTextPosition(JLabel.RIGHT); origLabel.setForeground(Color.red); topPanel.add(a); topPanel.add(origLabel); cont.add(topPanel, BorderLayout.NORTH); for(int j=0; j"; ret=ret+"Gait: "+filename.charAt(8)+filename.charAt(9)+"
"; if(filename.charAt(3)=='e') ret=ret+"Outdoors"; if(filename.charAt(3)=='a') ret=ret+"Indoors"; return ret; } private int fileGetPerson(String filename) { String ret=""; ret=ret+filename.charAt(4)+filename.charAt(5)+filename.charAt(6); return Integer.parseInt(ret); } private int indexOf(String[] filenames, String search) { for(int i=0; imax) return 0; else return (int)(100-(100*(diff/max))); } private float getCertainty(float image1, float image2) { if(image2-image1>image1) return 100; else return (100*((image2-image1)/image1)); } private int compareImages(int[] image1, int[] image2) { //try comparing both forward and backward double differences1=0; for(int i=0; i> 16) & 0xff; int green = (image[y*width+x] >> 8) & 0xff; int blue = (image[y*width+x]) & 0xff; graylevel = (int)(red + green + blue) / 3; image[y*width+x] = 0xff000000 | (graylevel << 16 | graylevel << 8 | graylevel); } } return image; } private float[] gaussian(int radius, float std) { int size = 2*radius+1; float sum = 0; float vals[] = new float[(int)Math.pow((float)size,(float)2)]; for(int x = 0; x < size; x++) { for(int y = 0; y < size; y++) { vals[x*size+y] = (float)Math.exp(-(Math.pow((x-radius),2) + Math.pow((y-radius),2))/(2*Math.pow(std, 2))); //System.out.println("no " + vals[x*size+y]); sum += vals[x*size+y]; } } for(int x = 0; x < size; x++) { for(int y = 0; y < size; y++) { vals[x*size+y] = vals[x*size+y]/sum; //System.out.println("no " + vals[x*size+y]); } } return vals; } }