Как нарисовать прямоугольник вокруг объекта с помощью функций (ORB)

Привет всем :) Я только новичок в openCV.

Я пытался разработать программу отслеживания с помощью ORB. Я просто хочу нарисовать прямоугольник вокруг обнаруженного объекта.

Это часть результата программы отслеживания. «Черная машина» — это то, что я хочу отслеживать (интересующий объект). Как видите, вокруг «Черной машины» много ненужных и обнаруженных функций.

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

1) Найдите плотность признаков: Как видите, признаки вокруг «Черной машины» более плотные, чем другие. Итак... Если я смогу рассчитать, насколько они плотны (вероятно, область вокруг "Черной машины" имеет наибольшую плотность..?), тогда мне будет легче нарисовать прямоугольник.

2) Удалите ненужные функции: если останутся только необходимые функции, я могу вычислить их центр.

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

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

Заранее спасибо и надеюсь, что у вас, ребята, отличного дня :)


person Dasom Heo    schedule 17.03.2017    source источник


Ответы (2)


Если вы хотите придерживаться ключевых точек, вы можете сделать следующее:

  1. обнаружить и описать все ключевые точки на обоих изображениях
  2. вычислить соответствие ключевых точек
  3. вычислить лучшую гомографию RANSAC
  4. выберите все inlier как один объект, который может быть фоном
  5. из всех невключенных ключевых точек вычислить следующую лучшую гомографию RANSAC
  6. выбрать все inlier, чтобы быть другим объектом
  7. ... и так далее
  8. до тех пор, пока не останется слишком мало ключевых точек или не удастся вычислить хорошую гомографию.

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

person Micka    schedule 17.03.2017
comment
Я не понимаю, как это отвечает на вопрос. Он не упомянул функцию соответствия между двумя изображениями. Он говорит о черной машине как об обнаружении всего, что напоминает черную машину. Я не думаю, что у него есть какие-либо тренировочные данные или что-то еще, что можно было бы использовать в качестве исходной истины, с которой он пытается сопоставить данные испытаний. - person m3h0w; 19.03.2017
comment
все же это отвечает на вопрос. Вы по-прежнему можете сопоставлять ключевые точки между двумя изображениями. В основном подумайте о мозаике изображений с возможностью фильтрации движущихся объектов (которые будут видны дважды в панораме), но вместо удаления этих объектов просто извлеките их, потому что они являются желаемыми результатами. - person Micka; 19.03.2017

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

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

Прежде всего: соберите реальные данные как можно скорее. Нет смысла разрабатывать алгоритмы с поддельным изображением, как вы предоставили, тем более что у вас нет опыта работы с OpenCV и вы не можете предвидеть проблемы в будущем.

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

Самый простой конвейер для вашей проблемы будет выглядеть примерно так:

perform some preprocessing (blurring for example)
calculate difference between 2 consecutive frames, to obtain the moving objects; 
perform some filtering and binarization; 
find contours of the objects; 
decide if any of them is a car based on shape and size; 
find out it's color; 
draw a rectangle around it if it's black.

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

person m3h0w    schedule 17.03.2017