Генератор точечных стереограмм на ПЛИС

062214_1810_4.jpg

Идея для проекта на базе учебной платы DE2:

Генератор точечных стереограмм в реальном времени

 

Введение

Задачей проекта является разработка платформы на базе учебного кита Altera DE2 генерирующей стереограммы. Платформа генерирует трехмерную стереокартинку по карте дальностей (глубин), в которой хранится расстояние до каждого пикселя в картинке. Карта глубины может быть динамической сценой с изменяемой во времени значениями глубины. Каждая горизонтальная линия стереогаммы генерируется на лету из соответствующих линий карты глубины. Изображение отображается на VGA экране с разрешением 640х480 пикселей. Пользователь может переключатся между отображением карты глубины и стереограммы, а также взаимодействовать с картой глубины с помощью переключателей на плате DE-2.

 

Высокоуровневое проектирование генератора стереограмм

 

Основной смысл проекта – развлекательная программа. Техническая часть является самой важной частью проекта, но хотелось, чтобы проект был также интересен.

Основной идеей стереограмм является то, что изображение объекта для каждого глаза – разное. Если глаза сохраняют определенную глубину резкости они не могут отличить одну точку на этой глубине или две точки по пути к этой глубине. Стереограммы обманывают глаз благодаря расположению пикселей по этим путям и заставляют мозг поверить, что глаза сфокусированы на конкретной глубине, хотя, на самом деле это не так.

Рис. 1 Сехма расположения 3D изображения

 

Глубина фона (BKDEPTH) – обозначает воспринимаемое расстояние между виртуальной нулевой высотой и поверхностью экрана в пикселях. Расстояние до наблюдателя (OBSERVER) – расстояние от экрана до наблюдателя. Расстояние между глаз (EYESEP) – обозначает ожидаемое число пикселей между центрами зрачков зрителя. Эти параметры определяют, как пиксели будут связаны вместе для 3D отображения.

Следующее уравнение может быть использовано для подсчета расстояния (SEP) двух связанных пикселей на поверхности экрана:

 

 

 

Процесс генерации стереограммы

 

Процесс генерации стереограммы разделяется на несколько шагов. Начинается он с карты глубины. Нужная сцена представляется полем величин высоты. Темные области расположенные далеко и черный цвет представляют собой фон. Светлые области расположены ближе к зрителю, а полностью белые обозначают наиболее близкую точку.

Рис 2. Пример карты глубины стереограммы

Когда карта глубины известна, нужно создать буфер связей для хранения информации о связях между пикселями. Для каждой точки карты глубины считается расстояние (SEP). Процесс состоит из задания правому связанному пикселю ссылки на левый.

Когда пиксели связаны, последним шагом является определение их значений. Если буфер связей элемента содержит свой собственный индекс, значит он не ассоциирован с другим элементом. Этот пиксель получает случайное число. Если буфер связи элемента содержит другой индекс, значит он был ассоциирован с пикселем слева. Соответствующий правый пиксель тогда получает значение левого пикселя. Процедура проходит с левой стороны буфера связей до правого, назначая либо случайное значение либо значение связанного элемента каждому пикселю.

Каждая горизонтальная линия стереограммы генерируется на лету. Что бы сгенерировать полную картинку, процесс должен быть повторен для каждой линии. Если карта глубины статична – нет нужды делать что-то еще, но если она динамична, каждый новый кадр должен быть создан для каждого изменения карты.

 

Результаты работы проекта генератора стереокартинки с помощью ПЛИС

 

Результатом работы является платформа генерирующая стереограммы. Пример на рисунке 3 содержит два больших квадрата в центре экрана, маленький квадрат в нижнем правом углу и длинный прямоугольник сверху.

Рис. 3 Результат работы

Результат работы также показан на видео:

Программный код проекта

 

Больше информации о проекте и ссылки на исходные файлы можно найти на сайте Корнелловского университета.

  

Автор дайджеста:

Шевченко И.О., группа ДК-21, , КЭВА, НТУУ «КПИ»