Про стриптизёрш…

Originally published at GORKOFF. You can comment here or there.
Помните когда-то давно я рассказывал вам про задачу выделения контуров на изображении, получаемом с тепловизора? Решение этой задачи довольно простое и элегантное. Сначала надо бинаризовать изображение. Выделить контуры из бинаризованных изображений очень просто: контуром мы будем считать любую белую точку, у которой есть хотя бы есть один чёрный сосед. Собственно вот и всё решение.
Но не так давно нам дали новое задание: теперь необходимо не просто выделять контуры объектов, но находить среди всех контуров девушку и постоянно сопровождать её. Причём всё это без вмешательства человека. Вот о решении этой задачи я и хочу вам рассказать. Условно весь процесс решения можно разбить на 5 этапов.
1. Обрезка краёв
изображения.
Мы предполагаем, что девушка будет
находиться в окрестности шеста и не будет отходить к краям подиума,
поэтому в целях уменьшения вычислений мы будем заливать края кадра
чёрным.
2.
Бинаризация.
Работать с чёрно-белыми изображениями
гораздо проще, чем с изображениями в градациях серого. Поэтому все
пикселы яркость, которых выше заданного значения, мы делаем белыми,
те пикселы яркость которых ниже порога, мы делаем чёрными. В итоге
мы получаем множество связных белых областей.
3. Выделение значимых
областей.
Из всего множества белых областей
выбираем значимые области (т.е. те области с большой площадью) и
заливаем их разными цветами. Незначимые области мы убираем, заливая
их чёрным.
4. Вычисление центров
тяжести значимых областей.
В общем случае для вычисления центра
тяжести необходимо интегрировать, но в нашем случае мы можем
заменить интегрирование вычислением дискретных сумм.
На
изображении центры тяжести фигур отмечены белыми
квадратиками.
5. Поиск
девушки.
Тепловизор установлен так, что
девушка во время танца будет находиться в центре кадра. Поэтому
среди всех значимых областей выбираем одну, центр тяжести которой
ближе всего к центру экрана. Именно эту область мы и будем считать
девушкой. Безусловно, возможны ситуации, когда программа будет
ошибаться и переключать своё внимание на какого-нибудь посетителя
стриптиз-клуба, но особенность алгоритма в том, что рано или поздно
программа вернётся к слежению за девушкой. Даже в такой сложной
ситуации, когда между девушкой и камерой проходит человек, алгоритм
отработает корректно.
Примеры работы алгоритма
На этом видео показана обработка
коллизии «чужеродный объект между камерой и объектом слежения».
После того как чужеродный объект покидает область кадра, алгоритм
автоматически находит девушку и в дальнейшем следит за
ней.
На этом видео показано слежение за
объектом с быстро меняющимся центром тяжести.
P.S. Отдельный и очень интересный вопрос – как сделать так, чтобы девушку не «разрезало» шестом во время вращения. Могу рассказать об этом в другой раз, если вам будет интересно.
P.P.S. Стоит ли мне и дальше писать о том, чем я занимаюсь, или это скучно и путано?
|
</> |