Tuesday, October 1, 2013

Discussions on FAST Corner Detection...Part 2

source:
http://fastcorner.wordpress.com/2010/09/09/fast-faq/
http://www.edwardrosten.com/work/fast.html


Great many thanks to Edward Rosten for creating a forum to ask questions and promptly answering them.

The below paragraphs are copied from the forum which I thought are helpful :)


Kang-Kook Kong says:
Hi, I am interested in FAST-ER
I run ‘./configure && make’ in fast-er-1.4, but I got the error message:
checking libCVD… yes
checking for dgetri_ in -lcvd… no
configure: error: libCVD must be compiled with lapack support.
Can you help me?
  • edrosten says:
    Do you have the LAPACK development libraries installed on your machine? If so, libCVD should pick them out automatically. Try the following:
    1. Check the configure output from libcvd. If it doesn’t find LAPACK, then install the LAPACK development libraries.
    2. Check the built libcvd using ldd /usr/local/lib/libcvd.so and see if it has a reference to lapack. If it’s not there, then there libCVD has failed to pick up lapack properly. If 1 is OK and 2 isn’t, then let me know.
    3. As a workaround, run export LDFLAGS=-llapack before running ./configure to get LAPACK manually.
    1. Vinny says:
      Hey
      I just wanted to tell you that you are my life saver. I just used your code for my final year project and it works like a charm. Actually I was on the verge of failing my project and was very worried about it until I saw your code. Thanks a lot. :’)
      But the thing is, I do not understand the program at all. At least, could you give me the gist of what the code actually does? Because I have to explain it in my report and also to my professor.
      Your help is greatly appreciated! :)
      Vinny
      • edrosten says:
        I’m glad it was so helpful.
        The code is almost impossible to read because it is machine generated.
        What it does is tell you if there is a contiguous arc of 9 or more pixels which are either all much brighter or all much darker than the centre pixel.
        Instead of looking at pixels in the circle in sequence, the program uses a decision tree in order to reject non-corners as quickly as possible.

      1. Perikles Rammos says:
        Hi, and thanks for this very nice algorithm.
        My questions are mainly on the construction of the decision tree from the training images.
        1. The minimization of the entropy function is used only for creating the decision tree?
        2. Does the training set needs to be annotated? (I guess not, since all 16 pixels are checked)
        3. I assume that with very few training samples (corners), a very simple decision tree will be created. When new corners are trained, how is the tree expanded? (maybe the answer is in the paper, I haven’t been able to figure it out yet)
        Thanks.
        • edrosten says:
          To answer your questions:
          1. yes
          2. The training set does need to be annotated. There are two ways of doing this.
            1. Classify points in an image using a slow, simple algorithm that checks all 16 pixels
            2. Generate all possible corners and non corners. Since each pixel can have 3 states, there are 3^16 ~= 46 million possible corners and non corners.
            I actually use a combination of both methods. I generate all possible corners to get a complete coverage of the data. I then extract corners and non corners from a number of images, so that the pixel statistics are represented in the detector.
            Bear in mind that when it gets as far as training, the pixels are either b (brighter), d (darker) or s (similar) relative to the centre, so corner candidates can be thought of as a list of 16 elements likebsdbbddbsdbsbdsb
            There is program in the FAST-ER distribution to generate exactly one of each type of corner and non-corner, along with the classification.
          3. Yes, if you have too few training samples, then the tree will not be representative of the segment test criterion. The tree is never expanded, because the tree is not trained incrementally. I collect examples of corners first, then train the tree, then emit source code and then use the tree. In principle incremental training could be done however, but I’m not sure how useful that would be.

No comments:

Post a Comment