Что вы думаете об этом алгоритме обнаружения точек интереса? - PullRequest
4 голосов
/ 01 сентября 2009

Я пытался придумать алгоритм обнаружения точек интереса, и вот что я придумал:

Вы проходите оси X и Y по 3n пикселей за раз, создавая квадраты 3n x 3n.

Для квадрата nxn в середине квадрата 3n x 3n (назовем его квадратом Z) значения R, G и B усредняются и округляются до заданных значений, чтобы ограничить количество цветов, и это цвет этого квадрата будет рассматриваться как.

То же самое сделано для 8 окружающих n x n квадратов.

После этого цвет квадрата Z сравнивается с окружающими квадратами, если он совпадает с x из 8 окружающих квадратов, где x <= 3 или x => 5, то это является точкой интереса (обнаружен угол) .

И так до тех пор, пока все изображение не будет покрыто.

Чем больше n, тем быстрее будет отсканировано изображение и тем менее точным будет обнаружение, и наоборот.

Предположительно, он обнаруживает «буквальные углы», то есть углы, которые вы можете видеть на изображении.

Что вы думаете об этом алгоритме? Это эффективно? Можно ли использовать его в прямом эфире (например, с камеры) на портативном устройстве?

Ответы [ 3 ]

10 голосов
/ 01 сентября 2009

Мне жаль говорить, что я не думаю, что это, вероятно, будет очень хорошо. Ваш алгоритм выглядит как упрощенная версия алгоритма Моравека , который сам по себе является одним из самых простых алгоритмов обнаружения углов. Жестко закодированные пределы, по которым вы тестируете, эффективно делают ваше тестирование ребра ступенчатой ​​функцией, в отличие от такого подхода, как суммированные квадратные разности. Это почти наверняка даст вам разрыв в вашей функции обнаружения (углы, которые не совпадают, когда они должны иметь), для некоторых значений.

У вас также есть та же проблема, что и у Моравека, а именно: если ребро находится под углом к ​​рассматриваемому соседу, оно не будет обнаружено.

Разработка алгоритмов - это весело, и если это не бизнес-критичный проект, то непременно продолжайте мастерить и экспериментировать (и не отчаивайтесь моими комментариями!). Но дело в том, что практически для любой практической задачи лучший алгоритм для задачи, которую вы хотите решить, почти наверняка уже существует. Реальная проблема заключается в определении того, как вы можете наилучшим образом смоделировать свою проблему таким образом, чтобы вы могли решить ее, используя существующий, хорошо понятый подход, разработанный экспертами.

В частности, сложная идентификация и анализ пограничных и наихудших вариантов выполнения - сложная задача; если вы не профессиональный алгорист, вам, скорее всего, будет трудно. Но я, конечно, призываю вас открыть это для себя, попробовав. nlucaroni упоминает несколько отличных вопросов, которые можно использовать в качестве отправных точек для вашего анализа.

2 голосов
/ 01 сентября 2009

Почему бы не попробовать и посмотреть, работает ли он так, как вы ожидаете? Звучит так, как должно. Как производительность сравнивается с другими методами? Какова сложность алгоритма? Это эффективно по сравнению с другими? Где это можно улучшить? Какие ложные срабатывания и ложные отрицания ожидаются? Находятся ли они в пределах разумного, основываясь на данных, которые я планирую использовать? Какой порог следует использовать для сравнения окружающих квадратов? ....

это то, что вы должны делать, а не мы.

1 голос
/ 02 сентября 2009

Я бы посоветовал вам взглянуть на алгоритм SIFT. Это стандарт де-факто для точек интереса на изображении. К сожалению, это также запатентовано, потому что это так хорошо.

Если вас интересует версия SIFT в реальном времени, вы можете запустить ее на графическом процессоре, но на данный момент она очень экспериментальна. Обратите внимание: если вы разрабатываете коммерческое приложение, вам сначала нужно приобрести лицензию на использование SIFT или получить одобрение Дэвида Лоу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...