8

I'm trying to find suitable algorithms for searching subsets of 2D points in larger set. A picture is worth thousand words, so:

enter image description here

Any ideas on how one could achieve this? Note that the transformations are just rotation and scaling.

It seems that the most closely problem is Point set registration [1]. I was experimenting with CPD and other rigid and non-rigid algorithms' implementations, but they don't seem to perform too well on finding small subsets in larger sets of points.

Another approach could be using star tracking algorithms like the Angle method mentioned in [2] or more robust methods like [3]. But again, they all seem to be meant for large input sets and target sets. I'm looking for something less reliable but more minimalistic...

Thanks for any ideas!

[1]: http://en.wikipedia.org/wiki/Point_set_registration

[2]: http://www.acsu.buffalo.edu/~johnc/star_gnc04.pdf

[3]: http://arxiv.org/abs/0910.2233

RobSis
  • 342
  • 2
  • 10
  • Can you give more details on the context ? For instance, are you assuming 2D points only, or should the algorithm work in higher dimension as well ? What would be the typical size of the point set in which you search for a match ? Do you have a single template to find or will you be searching for many templates one after the other ? – BConic Jan 07 '15 at 16:15
  • The input set would be around 5 to 15 points. The target set would be around 1000 points, but could be splitted to smaller regions... Eventually, I would like to find the most similar match, so the input set could be imperfect. – RobSis Jan 07 '15 at 16:22
  • @RobSis I am curious to know how you managed to solve your problem. I have a similar problem to solve and would appreciate it if you could let me know which algorithm is the most suitable for this class of problems based on your experience. I have looked at RPM, ICP and CPD methods but could not produce satisfactory results for my type of data (which is in 3D). – Arash_D_B Feb 19 '15 at 15:35
  • @RobSis, sorry to resurrect such an old thread.. But I am looking to do the same thing, except with translation and rotation. Did you find an accurate way to point match a subset with a set? Thanks! – anti Mar 24 '17 at 19:47

5 Answers5

2

here's some papers probably related to your question:

  • Geometric Pattern Matching under Euclidean Motion (1993) by L. Paul Chew , Michael T. Goodrich , Daniel P. Huttenlocher , Klara Kedem , Jon M. Kleinberg , Dina Kravets.
  • A fast expected time algorithm for the 2-D point pattern (2004) by Wamelena, Iyengarb.
  • Simple algorithms for partial point set pattern matching under rigid motion (2006) by Bishnua, Dasb, Nandyb, Bhattacharyab.
  • Exact and approximate Geometric Pattern Matching for point sets in the plane under similarity transformations (2007) by Aiger and Kedem.

and by the way, your last reference reminded me of:

  • An Application of Point Pattern Matching in Astronautics (1994) by G. Weber, L. Knipping and H. Alt.
mrtubis
  • 170
  • 7
1

I think you should start with a subset of the input points and determine the required transformation to match a subset of the large set. For example:

  • choose any two points of the input, say A and B.
  • map A and B to a pair of the large set. This will determine the scale and two rotation angles (clockwise or counter clockwise)
  • apply the same scaling and transformation to a third input point C and check the large set to see if a point exists there. You'll have to check two positions, one for each of rotation angle. If the point C exists where it should be in the large set, you can check the rest of the points.
  • repeat for each pair of points in the large set

I think you could also try to match a subset of 3 input points, knowing that the angles of a triangle will be invariant under scaling and rotations.

Those are my ideas, I hope they help solve your problem.

RonL
  • 41
  • 4
0

I would try the Iterative Closest Point algorithm. A simple version like the one you need should be easy to implement.

McMa
  • 1,568
  • 7
  • 22
  • 1
    Not sure the ICP would be appropriate, since it must be initialized close to a solution in order to converge. – BConic Jan 07 '15 at 16:19
  • You are completely right! the ICP is extremly sensitive to the initial guesses when it is used to match millons of 3D points, but I assume in this simple scenario it should be able to "brute force" through all the points. Guess he can try it... if worst comes to worst, he can try 1000 random initial positions :D – McMa Jan 07 '15 at 16:49
0

Take a look at geometric hashing. It allows finding geometric patterns under different transformations. If you use only rotation and scale, it will be quite simple.

The main idea is to encode the pattern in "native" coordinates, which is invariant under transformations.

enter image description here

Andrey Rubshtein
  • 20,795
  • 11
  • 69
  • 104
0

You can try a geohash. Translate the points to a binary and interleave it. Measure the distance and compare it with the original. You can also try to rotate the geohash, i.e. z-curve or morton curve.

Micromega
  • 12,486
  • 7
  • 35
  • 72