Я надеялся, что смогу получить некоторые рекомендации от сообщества stackoverflow относительно дилеммы, с которой я столкнулся в своем старшем проекте. Прежде всего, я хочу заявить, что я начинающий программист, и я уверен, что некоторые из вас быстро скажут мне, что этот проект был выше моего понимания. Я быстро осознал, что это, вероятно, правда.
Теперь, когда это не так, позвольте мне дать некоторые определения:
Цель проекта: цель проекта, как и многие другие, которые пытались достичь в различных вопросах SO (многие из которых были очень полезны для меня в ходе этой работы), состоит в том, чтобы определить, является ли место для парковки заполнено или доступно, в конечном итоге сообщая об этом пользователю (в идеале через iPhone, Droid или другое мобильное приложение для простоты использования — этот аспект был быстро признан выходящим за рамки моих усилий из-за нехватки времени).
Используемые инструменты: я интенсивно использовал ресурсы библиотеки AForge.Net, которая предоставила мне все строительные блоки для объединения проекта с точки зрения захвата видео с IP-камеры. , применяя фильтры к изображениям и в конечном итоге достигая цели обнаружения. В результате вы узнаете, что я решил программировать на C#, в основном из-за простоты использования для начинающих. Другие варианты включали MATLAB/C++, C++ с OpenCV и другие альтернативы.
Проблема
Вот тут я столкнулся с проблемами. Ниже приведена ссылка на изображение, которое было предварительно обработано в лаборатории обработки изображений AForge. Последовательность используемых фильтров и процессов была следующей: оттенки серого, выравнивание гистограммы, обнаружение краев Собеля и, наконец, пороговое значение Оцу (хотя я не уверен, что последний шаг необходим).
http://i.stack.imgur.com/u6eqk.jpg
Как вы, конечно, можете сказать по изображению невооруженным глазом, есть последовательности обнаруженных краев, которые явно являются припаркованными автомобилями в местах, которые я слежу за камерой. Эти автомобили четко определяются рисунком просветленных колес, своего рода рисунком «двойной железной дороги», который, по сути, представляет собой внешнюю окантовку боковых окон, и даже контур номерного знака в этом случае. В частности, в продолжении проекта выбранная камера будет PTZ, чтобы охватить как можно большую часть квартала, и поэтому я просто хотел бы сосредоточиться на боковых особенностях автомобиля (исключив такие факторы, как номерной знак) . Такие элементы, как прямоугольник для люка, также могут быть рассмотрены, но очевидно, что это не универсальная особенность автомобилей, в отличие от общего контура окна.
Мы все видим, что в этих шаблонах есть различия, которые, конечно, зависят от марки и модели автомобиля. Но, как правило, эта последовательность не только приводит к успешному извлечению желаемых функций, но также исключает дорогу из поля зрения (важно, поскольку я намерен использовать цвет дороги в качестве «первой лакмусовой бумажки», если хотите, для обнаружения пустого места... если я обнаруживаю уровень серого, соответствующий данным для дороги, особенно если в регионе не обнаружено краев, я чувствую, что могу с уверенностью предположить пустое пространство). Мой вопрос таков, и, надеюсь, он достаточно общий, чтобы быть практически полезным для других на сайте:
Целевой вопрос:
Есть ли способ взять сегмент изображения (посредством обрезки), а затем сравнить обнаруженную последовательность краев с будущими новыми кадрами с камеры? В частности, есть ли способ сделать это, допуская свободу действий/по сути, создавая порог допуска для незначительных различий в краях?
Личные мысли/Мозговой штурм по этому вопросу:
-- Я уверен, что есть способ буквально сравнить попиксельно -- обрезать только прямоугольник по краям, а затем сдвинуть обрезанный изображения через новый обработанный кадр для сравнения по пикселям, но это не особенно поможет, если у вас нет точного совпадения с обнаруженными краями.
Любая помощь приветствуется, и я более чем счастлив уточнить, если это необходимо.