Поиск карты глубины вебкамерой блоковым алгоритмом с использованием инструкции psadbw

Для ускорения работы будем искать глубину не для отдельной точки, а для целого блока.  Всё изображение поделим на квадраты. В системе команд MMX процессора есть полезная инструкция psadbw. Она позволяет найти сумму модулей разностей сразу нескольких точек. Если точки представлены в формате RGB32, то вычислит сразу две точки (используется в этой программе). А если точки представлены в черно-белом формате разрядностью 8бит, то можно вычислить сразу 8 точек. В программе реализован другой подход к получению карты глубины. Она будет получаться не по соседним кадрам, а по опорному. Карта векторов опорного кадра будет накапливать вектора путём прибавления новых к предыдущим и поиск будет уже осуществляться в окрестности куда указывают вектора блока. Программа успевает в реальном времени обрабатывать изображение разрешением 640*480 с поиском по таймеру 30 раз в секунду.

После запуска программы требуется задать опорный кадр (кнопка снизу слева). Далее, нужно осторожно и медленно везти камеру по салазке. При остановке движения карта остаётся. Можно попробовать уменьшить размер блока. Сразу будет заметно увеличение влияния шумов. Также есть возможность регулирования максимально возможного определяемого движения (окрестность поиска). Нагрузка на процессор заметно возрастает даже при небольшом увеличении окрестности поиска. Максимально возможное определяемое движение можно наблюдать и по поведению бегунка (ползёт снизу карты глубины). Он показывает реальную максимально определяемую скорость по пикселям. Вообщем, программа получилась довольно быстрая по сравнению с предыдущей. Подход поиска карты глубины по соседним кадрам приводит к принципу детектора движения (то, что шевелится, то и выделяется). А при подходе с заданием опорного кадра получается уже нечто другое. Это ближе по названию детектор перемещения. Тоесть строится карта глубины. Осталось только увеличить точность получения.

Сделать бесплатный сайт с uCoz