Страница 1 из 2

Карта глубины из стереопары

Добавлено: Вс сен 19, 2010 4:44 am
AnDrian
Допустим, Вы имеете возможность приобрести две фотокамеры и сделать из них спарку для съемки стереопар.
Но для получения хороших результатов, двух кадров явно недостаточно.
Давайте посмотрим, как на практике получают глубину из стереопары.
Изображение
Для двух камер с параллельными осями объективов любой объект в кадре тем сильнее "смещается" на левом и правом снимке пары, чем ближе к камерам он расположен.
На рисунке видно, что на месте персонажа в последних кадрах - темное пятно. Это результат вычитания уровня яркостей левого и правого кадра.

Чтобы понять принцип восстановления глубины, можно сделать следущее:
1. Взять любую стереопару и открыть ее кадры в GIMP или Photoshop как слои.
2. Выровнять стереопару по яркости, контрасту, перекосам и т.п.
3. Преобразовать изображение в градации серого и убрать шумы, "постеризовав" затем, чтобы оставить поменьше уровней яркости. Так проще работать с "математикой" и нагляднее результат.
4. Далее, совместим любой крупный объект на переднем плане, двигая один слой относительно другого.
5. Применив вычитание к слоям, видим, что на месте объекта получилась "дыра", которая легко преобразуется в контур, например.

На практике получить карту высот можно так:
Предварительно выровняв и постеризовав кадры стереопары, сдвигаем один слой (кадр) относительно другого на некоторое количество пикселей.
Затем вычитаем кадры друг из друга.
Результат сохраняем как новый слой.
Снова сдвигаем кадры на то же расстрояние (после вычитания дыры оставлять не надо, двигаем то что было до предыдущего вычитания).
Снова вычитаем, снова сохраняем как новый слой.
В результате нескольких повторов получим стопку слоев, соответствующих разностям сдвигов (параллаксов) для разных расстояний. Чем больше сдвиг, тем ближе к камерам, соответственно.

Эту стопку слоев обрабатываем. Например инвертируем, подчищаем шумы. Получается стопка "силуэтов". Суммируем их между собой и получаем нечто, очень похожее на "карту высот".

Далее, если использовался GIMP, ищем "Фильтры" - "Карта" - "Смещение" и получаем с помощью данного фильтра необходимое количество псевдоракурсов, из которых делаем либо анимированный GIF, например.

Re: Карта глубины из стереопары

Добавлено: Вс сен 19, 2010 12:33 pm
Ledmaster

Re: Карта глубины из стереопары

Добавлено: Вс сен 19, 2010 3:11 pm
AnDrian

Добавлено: Вс сен 19, 2010 4:16 pm
AnDrian
Изображение

Добавлено: Вс сен 19, 2010 4:20 pm
AnDrian
Взял исходное изображение
Изображение
Разрезал на слои.
Постеризовал
Размыл "гауссом"
Совместил "мышей"
Режим "Затемнение" на "верхнем слое" и движек "непрозрачность" довершили начатое.

Добавлено: Вс сен 19, 2010 4:24 pm
AnDrian
Понимаю, что это "эрзац"-способ, и будет работать не всегда. Однако, такие манипуляции позволяют получать карты высот с градиентами, что при ручном "промывании" маски сделать сложнее.
Артефакты, разумеется, придется подчищать руками, но их не столь много, как видно из данного примера.

Re: Карта глубины из стереопары

Добавлено: Вс сен 19, 2010 5:21 pm
AnDrian

Добавлено: Вс сен 19, 2010 6:02 pm
AnDrian
Готовый плагин для GIMP, делающий карту высот по стереопаре:
http://registry.gimp.org/node/10217

Изображение
Изображение

Добавлено: Вс сен 19, 2010 7:20 pm
Ledmaster

Добавлено: Вс сен 19, 2010 7:44 pm
AnDrian

Добавлено: Пн сен 20, 2010 2:19 pm
karelkysino

Добавлено: Пн сен 20, 2010 7:37 pm
AnDrian

Добавлено: Пн сен 20, 2010 10:41 pm
karelkysino

Добавлено: Вт сен 21, 2010 3:02 am
AnDrian

Добавлено: Вт сен 21, 2010 3:49 am
Ledmaster