Вопрос

Я надеюсь получить некоторую помощь с обнаружением 2D-объектов.Я дам краткий обзор контекста, в котором это будет реализовано.

Будет сделан снимок потолка.На потолке будут размещены маркеры, позволяющие определить ориентацию камеры.Снимки всегда будут сделаны лицом вверх.Моя цель — обнаружить один из этих маркеров на изображении и определить его вращение.Таким образом, вращение и масштабирование (в меньшей степени) будут двумя основными факторами, используемыми при обнаружении изображения.Я буду писать программное обеспечение либо на C#, либо на Matlab (пока не совсем уверен).

Например, маркером может быть такая стрелка:

Reference Arrow

Изображение потолка будет содержать маркеры.Программному обеспечению необходимо обнаружить одиночный маркер и определить, что он повернут на 170 градусов.

Ceiling Arrows

У меня нет опыта анализа изображений.Я знаю, что обработка изображений — довольно обширная тема, и надеялся получить совет о том, в каком направлении мне следует двигаться и какие методы лучше всего подходят для моего приложения.Спасибо!

Это было полезно?

Решение

Я бы порекомендовал MATLAB или, если вы собираетесь использовать C#, Эмгу резюме это довольно хорошо.

Хаф трансформируется это отличная идея.Как только вы обнаружите края изображения, используя, скажем, Детектор края Канни, вы получаете краевое изображение (которое представляет собой двоичное изображение со значениями только 1 или 0).

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

альтернативный текст http://upload.wikimedia.org/wikipedia/en/a/af/Hough_space_plot_example.png

В приведенном выше примере параметрическая форма линии следующая:

rho = x*cos(theta) + y*sin(theta)

где Rho - это расстояние, а тета - угол

Итак, как вы можете видеть, если вы посмотрите на корзину в определенной ориентации, вы можете узнать, сколько линий ориентировано под этим углом.Конечно, вам придется проделать дополнительную работу, чтобы выяснить, какие линии ориентированы под этим углом, поскольку у вас есть еще 5 линий на каждую стрелку, но это не должно быть слишком сложно.

Другие советы

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

Кажется, это натолкнуло на некоторые идеи:http://www.cfar.umd.edu/~fer/cmsc426/lectures/edge1.ppt

как всегда в компьютерном зрении, ваша первая проблема — освещение и получение изображения.прежде чем идти дальше, определите, как ваши маркеры будут напечатаны на потолке, какова будет их форма, какой свет вы будете использовать, чтобы их увидеть, и какую настройку камеры вы выберете для просмотра маркеров.

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

Если у вас есть простые стрелки, простой анализ BLOB-объектов (который состоит из вычисления статистических моментов объектов на изображении) даст вам много информации:каждая стрелка должна иметь значения, почти равные для моментов 7 hu, что позволяет эффективно фильтровать объекты, а также ориентация, рассчитанная на основе центральных моментов, даст вам угол стрелки.Поскольку анализ BLOB-объектов является только статистическим, он выполняется чрезвычайно быстро.

Для надежного обнаружения маркеров и их ориентации было разработано несколько систем:

Если ваша основная цель — не учиться, а заставить приложение работать, я бы посоветовал вам использовать один из них.Для новичка непросто определить положение и ориентацию случайного маркера на изображении.

С другой стороны, если ты по-мужски заинтересован в обучении, я бы также посоветовал вам ARToolKit и его публикации (и ссылки на них) которые объясняют, как надежно реализовать обнаружение маркеров.

Вам нужно будет изучить обнаружение краев, поэтому обратите внимание на фильтры Хафа.После этого вам нужно будет изучить классификаторы шаблонов и извлечение признаков.

Эта бумага имеет алгоритм, который работает без обнаружения краев.Отрывок из этой книги больше ориентирован на тот тип обнаружения символов, который вы планируете, после того, как вы выполнили обнаружение края.

Строгий способ определения ориентации изображения, полученного в соответствии с проекционной геометрией (большинство камер), заключается в использовании точки схода и исчезающие линии.Хорошие новости для вас:ваш маркер можно использовать для поиска этой информации!Еще хорошие новости: ваше изображение может быть исправленный, поэтому столбцы изображения (ось Y) будут соответствовать направлению вверх-вниз.Вы найдете больше об этом в главе 8 книги Хартли и Зиссермана. Геометрия с несколькими представлениями в компьютерном зрении.

Также помните, что, вероятно, вам придется поработать над проблема с радиальными искажениями, искажение, вызванное объективом камеры.Другие ребята правы насчет проблемы обнаружения стрел:ты должен использовать обнаружение края и после этого, Преобразование Хафа или соответствие шаблону.Обратитесь к книге Гонсалеса и Вудса. Цифровая обработка изображений для получения подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top