import java.awt.*; import java.awt.image.*; import java.awt.Graphics; import java.io.*; import javax.swing.*; import javax.imageio.*; import java.awt.geom.Rectangle2D; public class CreateSymmetry extends JApplet{ int width; int height; double distanceWeightingMultiplier; int totalResultimage[] = new int[64*64]; public float distanceweight(int Xi, int Xj, int Yi, int Yj, float sigma, float mu){ return (float)distanceWeightingMultiplier*(float)Math.pow(Math.E,(-((distance(Xi,Xj,Yi,Yj)-mu)/(2*sigma)))); } public float distance(int Xi, int Xj, int Yi, int Yj){ return (float)Math.sqrt((Xi-Yi)*(Xi-Yi)+(Xj-Yj)*(Xj-Yj)); } public float phaseweight(int Xi, int Xj, int Yi, int Yj, double[] direction){ return (float)(1-Math.cos(direction[Xj*width+Xi]+direction[Yj*width+Yi]-2*Math.atan(Yi-Yj/Xi-Xj)))*(1-(float)Math.cos(direction[Xj*width+Xi]-direction[Yj*width+Yi])); } public int midpoint(int x1, int x2){ return (int)((x1+x2)/2); } public int[] symmetry_map(double[] input, double[] direction, float sigma, float mu, double[] magnitude){ int[] output = new int[width*height]; double max=0; float dist, phase; double value; distanceWeightingMultiplier=1/Math.sqrt(2*Math.PI*sigma); for (int Xi=1;Xi max) max = M; // store the direction of the edge direction[y*width+x] = Math.atan2(Mx,My); } } // normalising ratio float ratio = 255 / (float)max; // normalise values to prevent overflows for (int x=1;x