Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2013 Alibaba.com All right reserved. This software is the
   * confidential and proprietary information of Alibaba.com ("Confidential
   * Information"). You shall not disclose such Confidential Information and shall
   * use it only in accordance with the terms of the license agreement you entered
   * into with Alibaba.com.
   */
  package com.alibaba.simpleimage.analyze.sift.match;
  
 import java.util.List;
 import java.util.Map;
 

Author(s):
axman 2013-4-3 上午 11:20:03
 
 public class MatchKeys {
 
     private static class _mylist extends ArrayList<Match> {
 
         private static final long serialVersionUID = -1672787720681683109L;
 
         public void removeRange(int formIndexint toIndex) {
             super.removeRange(formIndextoIndex);
         }
     }
 
     public static List<MatchfindMatchesBBF(List<KDFeaturePointkeys1List<KDFeaturePointkeys2) {
         return findMatchesBBF(keys1, KDTree.createKDTree(keys2));
     }
 
     public static List<MatchfindMatchesBBF(List<KDFeaturePointkeys1KDTree kd) {
         List<Matchmatches = new _mylist();
         for (KDFeaturePoint kp : keys1) {
             ArrayList<KDTree.BestEntrykpNNList = kd.nearestNeighbourListBBF(kp, 2, 40);
             if (kpNNList.size() < 2) throw (new IllegalArgumentException("BUG: less than two neighbours!"));
             KDTree.BestEntry be1 = (KDTree.BestEntrykpNNList.get(0);
             KDTree.BestEntry be2 = (KDTree.BestEntrykpNNList.get(1);
             if ((be1.getDist() / be2.getDist()) > ModifiableConst.getTowPntDistRatio()) {
                 continue;
             }
             // XXX:
             KDFeaturePoint kpN = (KDFeaturePointbe1.getNeighbour();
             if (Math.abs(kpN.orientation - kp.orientation) > ModifiableConst.getTowPntOrientationMinus()) {
                 continue;
             }
             // if (Math.abs(kpN.getScale() - kp.getScale()) > ModifiableConst.getTowPntScaleMinus()) continue;
             matches.add(new Match(kpkpNbe1.getDist(), be2.getDist()));
         }
         return (matches);
     }
 
 
 
     public static ArrayList<MatchfilterMore(List<Matchmatches) {
         Map<KDFeaturePointIntegermap = new HashMap<KDFeaturePointInteger>();
 
         for (Match m : matches) {
             Integer kp1V = map.get(m.fp1);
             int lI = (kp1V == null) ? 0 : (intkp1V;
             map.put(m.fp1lI + 1);
             Integer kp2V = map.get(m.fp2);
             int rI = (kp2V == null) ? 0 : (intkp2V;
             map.put(m.fp2rI + 1);
         }
         ArrayList<Matchsurvivors = new ArrayList<Match>();
         for (Match m : matches) {
             Integer kp1V = map.get(m.fp1);
             Integer kp2V = map.get(m.fp2);
             if (kp1V <= 1 && kp2V <= 1) survivors.add(m);
         }
         return (survivors);
     }
 
     public static void filterNBest(ArrayList<Matchmatchesint bestQ) {
         Collections.sort(matchesnew Match.MatchWeighter());
         if (matches.size() > bestQ) {
             ((_mylistmatches).removeRange(bestQmatches.size() - bestQ);
         }
     }
 
     public static List<MatchfilterFarMatchL(List<Matchmatchesfloat minXfloat minY) {
         int arcStep = ModifiableConst.getSolpeArcStep();
         if (matches.size() <= 1) return matches;
         int[] ms = new int[90 / arcStep]; // 
         for (Match m : matches) {
             float r = (float)(Math.atan((m.fp2.y + minY - m.fp1.y) / (m.fp2.x + minX - m.fp1.x)) * 360
                        / (2 * .));
             m.slopeArc = (intr / arcStep * arcStep// 
             if (m.slopeArc < 0) m.slopeArc += 90;
             ms[m.slopeArc / arcStep] = ms[m.slopeArc / arcStep] + 1;
         }
        int count = 0;
        int idx = 0;
        for (int i = 0; i < ms.lengthi++) {// 
            if (ms[i] > count) {
                count = ms[i];
                idx = i;
            }
        }
        idx = idx * arcStep;
        ArrayList<Matchsurvivors = new ArrayList<Match>();
        for (Match m : matches) {
            if (m.slopeArc == idxsurvivors.add(m);
        }
        return survivors;
    }
    public static List<MatchfilterFarMatchR(List<Matchmatchesfloat minXfloat minY) {
        int arcStep = ModifiableConst.getSolpeArcStep();
        if (matches.size() <= 1) return matches;
        int[] ms = new int[90 / arcStep]; // 
        for (Match m : matches) {
            float r = (float)(Math.atan((m.fp1.y - (m.fp2.y + minY)) / (m.fp1.x + minX - m.fp2.x)) * 360
                       / (2 * .));
            m.slopeArc = ((intr / arcStep * arcStep); //
            if (m.slopeArc < 0) m.slopeArc += 90;
            ms[m.slopeArc / arcStep] = ms[m.slopeArc / arcStep] + 1;
        }
        int count = 0;
        int idx = 0;
        for (int i = 0; i < ms.lengthi++) {// 
            if (ms[i] > count) {
                count = ms[i];
                idx = i;
            }
        }
        idx = idx * arcStep;
        ArrayList<Matchsurvivors = new ArrayList<Match>();
        for (Match m : matches) {
            if (m.slopeArc == idxsurvivors.add(m);
        }
        return survivors;
    }
New to GrepCode? Check out our FAQ X