Как стать автором
Обновить

Комментарии 7

У FAST есть проблема., точность локализации не субпиксельная. В большинстве приложений как раз требуется субпиксельная точность. Например DoG или Hessian и быстрее и точнее. Кроме того узкое место место-это вычисление дескриптора, а не нахождение особых точек.впрочем для некоторых приложений fast- вполне себе, когда смещение(парралакс например) не слишком велико. Получилось немного однобоко, стоило упомянуть и другие методы. Получилось что специалистам это не интересно, а не специалистам не нужно
Спасибо, как-то проглядел этот момент. Получается, что ORB можно сделать быстрее, если детектировать точки с помощью HOG, а не FAST? Кроме того, уточнить точку до субпиксельного уровня можно уже после работы основго метода, того же FAST. В любом случае, целью статьи было пояснить суть ORB, а то на русском как-то мало инфы.
Кроме того, уточнить точку до субпиксельного уровня можно уже после работы основго метода, того же FAST

Не совсем так. Сам FAST именно попиксельный, а точки разных методов не всегда совпадают.
Да и методы построения дескриптора лучше комбинировать с походящими к ним детекторами. ORB неплохо подходит к FAST, однако эта комбинация годится не для всех целей.
а чем определяется «подходит/не подходит»?
Ну например, в окрестности локального максимума DOG, быстро меняются градиенты, поэтому SIFT дескриптор базируется на гистограмме градиентов. Если Вы возьмете детектор BLOB (их несколько), то гистограмма градиентов не самый лучший дескриптор для них. Можно и комбинировать, но некоторые работают лучше в определенных сочетаниях. Ну и так далее. Лучше или хуже определяется на основе стандартных тестов. (процент связанных точек versus процент связанных верно)
и подобная простыня с goto занимает почти весь файл c treeFAST o__O

if( p[pixel[0]] > cb)
         if( p[pixel[1]] > cb)
          if( p[pixel[2]] > cb)
           if( p[pixel[3]] > cb)
            if( p[pixel[4]] > cb)
             if( p[pixel[5]] > cb)
              if( p[pixel[6]] > cb)
               if( p[pixel[7]] > cb)
                if( p[pixel[8]] > cb)
                 goto is_a_corner;
                else
                 if( p[pixel[15]] > cb)
                  goto is_a_corner;
                 else
                  goto is_not_a_corner;
else if( p[pixel[7]] < c_b)
Код взят из библиотеки OpenCV, я просто избавил его от зависимостей библиотечных. Главное, не какая простыня, а как быстро работает.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории