package fr.unistra.pelican.util.vectorial.orders; import java.util.Comparator; import fr.unistra.pelican.util.Tools; /** * This class represents a vector ordering for the RGB colour space where the max * is the vector closest to 1,1,1 and the min the closest to 0,0,0. * * @author E.A. * */ public class EdgeEuclideanOrdering implements VectorialOrdering,Comparator { private double[] max; private double[] min; /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#max(double[][]) */ public double[] max(double[][] p) { preprocess(p); return max; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#min(double[][]) */ public double[] min(double[][] p) { preprocess(p); return min; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#rank(double[][], int) */ public double[] rank(double[][] p,int r) { System.err.println("rank not supported"); return null; } private void preprocess(double[][] p) { double distB = Double.MAX_VALUE; double distS = Double.MAX_VALUE; double[] b = {1,1,1}; double[] s = {0,0,0}; for(int i = 0; i < p.length; i++){ double tmp = Tools.euclideanDistance(b,p[i]); if(tmp < distB){ distB = tmp; max = p[i]; } tmp = Tools.euclideanDistance(s,p[i]); if(tmp < distS){ distS = tmp; min = p[i]; } } } /** * Compares the given arguments according to this ordering * * @param o1 first double valued array or vector pixel * @param o2 second double valued array or vector pixel * @return 1,-1 or 0 if o1 is respectively superior, inferior or equal to o2 */ public int compare(Object o1,Object o2) { System.err.println("binary comparison not supported"); return 0; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#max(double[], double[]) */ public double[] max(double[] p,double[] r) { if(compare(p,r) == 1) return p; else return r; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#min(double[], double[]) */ public double[] min(double[] p,double[] r) { if(compare(p,r) == 1) return r; else return p; } }