Алгоритм создания 3D-анаглифа с использованием изображения карты глубины: где найти? - PullRequest
2 голосов
/ 10 октября 2011

Я ищу общий алгоритм для вычисления красного / синего анаглифа, начиная с исходного изображения и его черно-белой карты глубины (пример: http://www.swell3d.com/2008/07/turn-2d-painting-into-3d-anagl.html)

Этот алгоритм используется, например,в Photoshop, но я не могу найти удобочитаемое объяснение, чтобы воспроизвести его.

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 ноября 2011

После некоторых исследований я нашел то, что искал.Во-первых, я прочитал несколько учебных пособий по Photoshop / Gimp, в которых описано, как создавать анаглифы из двух входных данных: изображения и его карты глубины в оттенках серого.Суть процесса - использование «инструмента смещения» и карты глубины в качестве карты смещения.Одно из нескольких учебных пособий по YouTube: http://www.youtube.com/watch?v=gfYMe_vYhu4

Итак, я взял некоторую документацию о Gimp's Displace Tool, взглянув на этот http://docs.gimp.org/en/plug-in-displace.html и непосредственно на исходный код инструмента (метод оченьаналогично тому, что предложил Асгейр).

Это позволяет нам получать два стереоизображения из входных данных, глядя на карту глубины.Красный и голубой цвета каждого изображения рассчитываются путем чтения этой страницы http://3dtv.at/Knowhow/AnaglyphComparison_en.aspx («Оптимизированные» матрицы являются лучшими). ​​

Тогда сумма двух изображений в одном дастпоследний анаглифСпасибо всем.

3 голосов
/ 10 октября 2011

Здесь задействованы два алгоритма.Первый использует исходное изображение и карту глубины для создания левого и правого изображения.Второй объединяет эти изображения в красно-голубой анаглиф.

Есть несколько способов выполнить первую часть.Один из них - взять исходное изображение и нанести на него текстуру на тонкую сетку, которая лежит в плоскости XY.Затем вы настраиваете значения Z каждой вершины в сетке в соответствии с соответствующим значением в карте глубины.Вы в основном создали текстурированный барельеф.Затем вы используете алгоритм 3D-рендеринга, чтобы визуализировать изображение из двух точек обзора, которые смещены по горизонтали на небольшое количество (по существу, из точки обзора левого и правого глаз человека, когда они будут смотреть на рельеф).

Возможно, существует способ прямого смещения пикселей влево и вправо, что является хорошим быстрым приближением к тому, что я описал выше.

Получив левое и правое изображения, вы пропускаете одно через голубой фильтр, а другое - одно.через красный фильтр.Если у вас есть источники RGB, это так же просто, как взять красный канал из одного изображения и объединить его с зеленым и синим каналами из другого изображения.

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

1 голос
/ 11 октября 2011

Из описания в ссылке, которую вы предоставили, я бы предположил, что это что-то вроде

for each pixel in depthmap
    x_offset = (depthmap[x][y] / 255.0f) * MAX_PIXEL_OFFSET * DIRECTION
    output[x + x_offset][y] = color_buffer[x][y]

blend output with color_buffer

Где MAX_PIXEL_OFFSET - максимальный сдвиг в пикселях, а DIRECTION - -1 для одного цвета и 1 для другого. Это предполагает, что буфер глубины составляет один байт на пиксель, диапазон [0..255] и что 0 в буфере глубины представляет максимальное расстояние.

...