@Override public ByteNearestNeighboursKDTree create(byte[][] data) { return new ByteNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public int[] assign(byte[][] data) { int [] argmins = new int [data.length]; float [] mins = new float [data.length]; nn.searchNN(data, argmins, mins); return argmins; }
@Override public int numDimensions() { return nn.numDimensions(); } }
@Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); byte [][] data = new byte[keys1.size()][]; for (int i=0; i<keys1.size(); i++) data[i] = keys1.get(i).ivec; int [][] argmins = new int[keys1.size()][2]; float [][] mins = new float[keys1.size()][2]; modelKeypointsKNN.searchKNN(data, 2, argmins, mins); for (int i=0; i<keys1.size(); i++) { float distsq1 = mins[i][0]; float distsq2 = mins[i][1]; if (10 * 10 * distsq1 < thresh * thresh * distsq2) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i][0]))); } if (matches.size() >= limit) break; } return true; } }
@Override public int size() { return nn.size(); }
@Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); byte [][] data = new byte[keys1.size()][]; for (int i=0; i<keys1.size(); i++) data[i] = keys1.get(i).ivec; int [][] argmins = new int[keys1.size()][2]; float [][] mins = new float[keys1.size()][2]; modelKeypointsKNN.searchKNN(data, 2, argmins, mins); for (int i=0; i<keys1.size(); i++) { float distsq1 = mins[i][0]; float distsq2 = mins[i][1]; if (10 * 10 * distsq1 < thresh * thresh * distsq2) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i][0]))); } if (matches.size() >= limit) break; } return true; } }
/** * Construct the assigner using the given cluster data. * * @param data the cluster data */ public KDTreeByteEuclideanAssigner(byte[][] data) { nn = new ByteNearestNeighboursKDTree(data, ByteNearestNeighboursKDTree.DEFAULT_NTREES, ByteNearestNeighboursKDTree.DEFAULT_NCHECKS); }
@Override public void assignDistance(byte[][] data, int[] indices, float[] distances) { nn.searchNN(data, indices, distances); }
/** * Given a pair of images and their keypoints, pick the first keypoint from * one image and find its closest match in the second set of keypoints. Then * write the result to a file. */ @Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); final byte[][] data = new byte[keys1.size()][]; for (int i = 0; i < keys1.size(); i++) data[i] = keys1.get(i).ivec; final int[][] argmins = new int[keys1.size()][2]; final float[][] mins = new float[keys1.size()][2]; modelKeypointsKNN.searchKNN(data, 2, argmins, mins); for (int i = 0; i < keys1.size(); i++) { final float distsq1 = mins[i][0]; final float distsq2 = mins[i][1]; if (10 * 10 * distsq1 < thresh * thresh * distsq2) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i][0]))); } } return true; }
@Override public ByteNearestNeighboursKDTree create(byte[][] data) { return new ByteNearestNeighboursKDTree(data, ntrees, nchecks); } }
@Override public IntFloatPair assignDistance(byte[] data) { int [] index = new int [1]; float [] distance = new float [1]; nn.searchNN(new byte[][] { data }, index, distance); return new IntFloatPair(index[0], distance[0]); }
/** * Given a pair of images and their keypoints, pick the first keypoint from * one image and find its closest match in the second set of keypoints. Then * write the result to a file. */ @Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); final byte[][] data = new byte[keys1.size()][]; for (int i = 0; i < keys1.size(); i++) data[i] = keys1.get(i).ivec; final int[][] argmins = new int[keys1.size()][2]; final float[][] mins = new float[keys1.size()][2]; modelKeypointsKNN.searchKNN(data, 2, argmins, mins); for (int i = 0; i < keys1.size(); i++) { final float distsq1 = mins[i][0]; final float distsq2 = mins[i][1]; if (10 * 10 * distsq1 < thresh * thresh * distsq2) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i][0]))); } } return true; }
@Override public void setModelFeatures(List<T> modelkeys) { modelKeypoints = modelkeys; byte [][] data = new byte[modelkeys.size()][]; for (int i=0; i<modelkeys.size(); i++) data[i] = modelkeys.get(i).ivec; modelKeypointsKNN = new ByteNearestNeighboursKDTree(data, 8, 768); }
@Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); final byte[][] data = new byte[keys1.size()][]; for (int i = 0; i < keys1.size(); i++) data[i] = keys1.get(i).ivec; final int[] argmins = new int[keys1.size()]; final float[] mins = new float[keys1.size()]; modelKeypointsKNN.searchNN(data, argmins, mins); for (int i = 0; i < keys1.size(); i++) { final float distsq = mins[i]; if (distsq < threshold) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i]))); } } return true; }
float [][] mins = new float[keys1.size()][this.count]; modelKeypointsKNN.searchKNN(data, this.count, argmins, mins); double threshProp = (1.0 + thresh) * (1.0 + thresh) ;
@Override public void setModelFeatures(List<T> modelkeys) { modelKeypoints = modelkeys; final byte[][] data = new byte[modelkeys.size()][]; for (int i = 0; i < modelkeys.size(); i++) data[i] = modelkeys.get(i).ivec; modelKeypointsKNN = new ByteNearestNeighboursKDTree(data, 8, 768); }
@Override public boolean findMatches(List<T> keys1) { matches = new ArrayList<Pair<T>>(); final byte[][] data = new byte[keys1.size()][]; for (int i = 0; i < keys1.size(); i++) data[i] = keys1.get(i).ivec; final int[] argmins = new int[keys1.size()]; final float[] mins = new float[keys1.size()]; modelKeypointsKNN.searchNN(data, argmins, mins); for (int i = 0; i < keys1.size(); i++) { final float distsq = mins[i]; if (distsq < threshold) { matches.add(new Pair<T>(keys1.get(i), modelKeypoints.get(argmins[i]))); } } return true; }
float [][] mins = new float[keys1.size()][this.count]; modelKeypointsKNN.searchKNN(data, this.count, argmins, mins); double threshProp = (1.0 + thresh) * (1.0 + thresh) ;
@Override public void setModelFeatures(List<T> modelkeys) { modelKeypoints = modelkeys; final byte[][] data = new byte[modelkeys.size()][]; for (int i = 0; i < modelkeys.size(); i++) data[i] = modelkeys.get(i).ivec; modelKeypointsKNN = new ByteNearestNeighboursKDTree(data, 1, 100); } }
@Override public boolean findMatches(List<T> keys1) { Queue<WPair> mq = new PriorityQueue<WPair>(); byte [][] data = new byte[keys1.size()][]; for (int i=0; i<keys1.size(); i++) data[i] = keys1.get(i).ivec; int [] argmins = new int[keys1.size()]; float [] mins = new float[keys1.size()]; modelKeypointsKNN.searchNN(data, argmins, mins); for (int i=0; i<keys1.size(); i++) { float distsq = mins[i]; mq.add(new WPair(keys1.get(i), modelKeypoints.get(argmins[i]), distsq)); } matches = new ArrayList<Pair<T>>(limit); for (int i=0; i<limit; i++) matches.add(mq.poll()); return true; }