Лучший подход для конкретной задачи распознавания объектов / изображений? - PullRequest
5 голосов
/ 06 октября 2010

Я ищу определенный объект на моей фотографии:

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

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

Есть идеи?Я надеюсь на то, что смогу реализовать довольно легко.

Спасибо всем.

Ответы [ 3 ]

3 голосов
/ 07 октября 2010

Вы можете попробовать использовать детектор углов (например, Харриса), чтобы найти углы коробки, концы и пересечение X. Это упрощает задачу поиска точек в правильной конфигурации.

Править(ответ на комментарий):

Я предполагаю, что вы можете найти угловые точки на вашем изображении, 4 угла прямоугольника, 4 окончания линии X и центр X, а также несколькодругие углы изображения из-за шума или объектов на заднем плане.Это упрощает задачу поиска набора из 9 точек в правильной конфигурации из заданного набора точек.

Моей первой попыткой было бы посмотреть на каждую угловую точку A. Затем я бы перебрал точки B, близкие к A. Теперь, если предположить, что (например) A - это верхний левый угол прямоугольникаB - нижний правый угол, я могу легко вычислить, где я ожидаю, что другие угловые точки будут на изображении.Я бы воспользовался поиском ближайшего соседа (или библиотекой, подобной FLANN), чтобы узнать, есть ли углы, где я их ожидаю.Если я смогу найти набор точек, который соответствует этим ожидаемым позициям, я знаю, где будет находиться символ, если он присутствует на изображении.

Вы должны попробовать, если это достаточно хорошо для вашего приложения.Если у вас слишком много ложных срабатываний (наборы углов других объектов, которые случайно образуют прямоугольник + X), вы можете проверить, есть ли линии (т.е. высокая контрастность в правильном направлении) там, где вы ожидаете их.И вы можете проверить, есть ли низкий контраст, где нет линий в шаблоне.Это должно быть относительно просто, если вы знаете точки на изображении, которые соответствуют углам / концам линий в искомом объекте.

1 голос
/ 21 октября 2010

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

0 голосов
/ 06 октября 2010

Вы можете использовать локальные функции для идентификации объекта на изображении. Функция обнаружения вики

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

Вот хороший ресурс о местных особенностях: Детекторы локальных инвариантных функций: опрос

...