docs: public static ArrayList<SurfMatch> filterJoins(List<SurfMatch> matches) {
          Map<SURFInterestPointN, Integer> map = new HashMap<SURFInterestPointN, Integer>();
  
          // Count the references to each keypoint
          for (SurfMatch m : matches) {
              Integer kp1V = map.get(m.getSp1());
              int lI = (kp1V == null) ? 0 : (int) kp1V;
              map.put(m.getSp1(), lI + 1);
              Integer kp2V = map.get(m.getSp2());
              int rI = (kp2V == null) ? 0 : (int) kp2V;
              map.put(m.getSp2(), rI + 1);
          }
          ArrayList<SurfMatch> survivors = new ArrayList<SurfMatch>();
          for (SurfMatch m : matches) {
              Integer kp1V = map.get(m.getSp1());
              Integer kp2V = map.get(m.getSp2());
              if (kp1V <= 1 && kp2V <= 1) survivors.add(m);
          }
          return (survivors);
      }