Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Обнаружение машин на автостоянке

Добрый день. Пишу программу по обнаружению свободных мест на стоянке с использованием EmguCV. Имеется: изображение с пустой стоянкой, также есть видео-поток с этой же стоянки но с машинами. Вопрос в обнаружении машин, еще лучше с примерами кода (с++ также подойдет, ибо emgucv является оберткой). Каскады Хаара отбросил сразу, так как для данной задачи использовать это слишком "умно". Думаю в сторону "вычитания изображений" (т.к имеется как и пустая, так и заполненная стоянка) или "перепадов" на изображении (асфальт-авто). Так же хотелось бы услышать советы по этому поводу, т.к материалов не так много. Из найденого: Automatic Parking Lot Classification


Ответ

Боюсь, не помогут в решении этой задачи ни детектор движения (BackgroundSubtractorMOG2), ни тем более межкадровая разница.
Стоянка - это как правило улица, а значит погода и перепады освещения. Тени в конце концов, которые запросто делают свою границу с солнечной частью более контрастной по сравнению с цветом автомобиля, близкого к серому. И всё это ещё и меняется во времени. В облачно-солнечную погоду с ветром особенно ощутимо. Не зря по приведённой ссылке автор проекта уточняет, что были подготовлены разные наборы обучающих изображений под различные погодные условия. Ну и конечно нельзя не упомянуть пешеходов, да и самих водителей, снующих вокруг машин по поводу и без, и создающих бесконечные ложные срабатывания.
Алгоритмы, работающие с так называемыми feature points (точки особенностей), имеющиеся в OpenCV, для этой задачи также не работают. Даже те из них, что предназначены для оценки площадей. Вообще с улицей сложно.
На мой взгляд, тут, кроме как машинное обучение на заранее подготовленных образцах и с большим их количеством, ничто не поможет. Всё по принципу того же Хаара, от которого отказались. Необязательно именно этот алгоритм (очень вероятно, что он не подойдёт), но любой другой, который сможет по неким признакам на асфальте уловить, что в конкретно таком-то месте машины нет.
Дополнение
Как вариант, можно попытаться использовать оператор Кэнни. Этот алгоритм имеется в инструментарии OpenCV.
Возьмите два изображения одного и того же парковочного места с автомобилем и без. Попробуйте подобрать коэффициенты Кэнни для обоих изображений таким образом, чтобы на том, где есть автомобиль, было обнаружено существенно больше границ, чем на том, где автомобиля нет (как это ни парадоксально, но на "ровном, чистом, одноцветном" асфальте при определённых условиях можно обнаружить то ещё мессиво из линий/перепадов цвета).
Если сразу не получится, то перед Кэнни вставляйте размытие (этих алгоритмов в OpenCV несколько).
Далее, если получилось, берите другие два изображения с автомобилем и без того же самого парковочного места, но уже сдвинутые во времени. Например, если первая пара была с утренней съёмки, то берите вечернюю. Для второй пары пробуйте те же самые коэффициенты, что получили для первой.
В случае успеха меняйте изображения парковочного места и автомобиля на нём. И точно также пытайтесь применить те же самые коэффициенты, но уже к новым изображениям.
При наличии терпения на всё про всё уйдёт максимум пару часов, но зато будет абсолютно ясно, корректный ли выбран путь в сторону анализа цветовой разницы или следует обратиться к иным инструментам. Этот эксперимент позволит сэкономить время, если что-то пойдёт не так, либо утвердит в правоте первичных рассуждений.

Комментариев нет:

Отправить комментарий