What do you think of this interest point detection algorithm?

algorithm, image-processing

Solution

I'm sorry to say that I don't think this is likely to be very good. Your algorithm looks a bit like a simplistic version of Moravec's algorithm, which is itself one of the simplest corner detection algorithms. The hardcoded limits you test against effectively make your edge test a stepped function, unlike an approach such as summed square differences. This will almost certainly give you discontinuities in your detection function (corners that don't match when they should have), for some values.

You also have the same problem as Moravec, namely that if the edge lies at an angle to the direction of neighbours being considered, then it won't be detected.

Developing algorithms is fun, and if this isn't a business-critical project, then by all means, carry on tinkering and experimenting (and don't be put off by my comments!). But the fact is, for almost any practical problem, a better algorithm for the task you want to solve almost certainly already exists. The real challenge is identifying how you can best model your problem in such a way that you can solve it using an existing, well-understood approach, designed by experts.

In particular, robust identification and analysis of edge-cases and worst-case runtimes is a tricky business; unless you are a professional algorist, you are likely to find the going difficult. But I certainly encourage you to discover this for yourself by trying. nlucaroni mentions some excellent questions to use as starting points for your analysis.

Problem

I've been trying to come up with an interest point detection algorithm and this is what I came up with: You go through the X and the Y axises 3n pixels at a time creating 3n x 3n squares. For the the n x n square in the middle of the 3n x 3n square (let's call it square Z), the R, G, and B values are averaged and rounded to preset values to limit the number of colors, and that is the color that square will be treated as. The same is done for the 8 surrounding n x n squares. After that, the color of square Z is compared to the surrounding squares, if it matches x out of the 8 surrounding squares where x <= 3 or x => 5 then that is an interest point (a corner is detected). And so on till all the image is covered. The bigger n is, the faster the image will be scanned and the the less accurate the detection is, and vice versa. This, supposedly, detects "literal corners", that is corners you can actually SEE on the image. What do you think of this algorithm? Is it efficient? Can it be used on a live video stream (say from the camera) on a hand-held device?

Original source