Message Boards Message Boards

4 Replies
0 Total Likes
View groups...
Share this post:

Unexpected behavior from ImageKeypoints

It seems obvious that the number of keypoints of any image should equal the number of keypoints of the mirror image of that image.  The following is a simple function to test this assumption:?
keypointsanitycheck[arg_Image] := Module[{q1},
  q1 = Image@Transpose@Reverse@Transpose@ImageData@arg;
  q1 = Length /@ ImageKeypoints /@ {arg, q1};
  q1[[1]] == q1[[2]]]
It is very easy to find images that flunk this simple test.  In particular the image of the girl in the hat included in the Mathematica documentation yields False when the above is appled to it.  This example can be found at
Any comments that could help clarify this situation would be appreciated.

Thank you
POSTED BY: David Vasholz
4 Replies

Your assumption is reasonable. But in practice, the implementation may not meet such criterion due to a variety of factors like for example the need for speed and the sampling of the scale space.  The value of ImageKeypoints lies in the many keypoints it returns. A single keypoint may not be found in the mirrored image, but the large set of keypoints will overall.

POSTED BY: Matthias Odisio
From what I've read online, the actual SURF algorithm is supposed to be rotationally invariant, but it seems that different kinds of implementations of it may have limited rotational invariance, although I'm not sure I know what that would mean. If you believe this is an issue, please contact Wolfram technical support ( with a description of the issue.
POSTED BY: Sean Clarke
I am not familiar with the literature on SURF, so it will take some effort to get to the bottom of this.  In the meantime, my guess is that this is definitely a "bug" and not a "feature."
POSTED BY: David Vasholz
Image processing functions in general often do things that would be counter-intuitive if a human did them.

The feature detection is based off of the SURF, so I would look at details and canonical implementations of that algorithm for a more precise idea of what it is doing internally.
POSTED BY: Sean Clarke
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract