Anaglyph
Генерация анаглифа
Ана́глиф (от греч. anáglyphos — рельефный) — метод получения стереоэффекта для стереопары обычных изображений при помощи цветового кодирования изображений, предназначенных для левого и правого глаза.
Такое определение дает википедия. Простой способ, но для просмотра требуются очки с светофильтрами. Техническая реализация не сложная. Анаглиф строится комбинированием двух изображений, причем каждый глаз видит только одно из них: красное (для левого глаза, правый не видит это изображения из-за светофильтра) и циановое (для правого глаза, левый не видит из-за светофильтра). Настоящий анаглиф создается из стереопары изображений. Но возможно также создание псевдоанаглифа вручную создав параллакс. Для создания анаглифа можно использовать несколько вариантов цветовых схем:
- Настоящий анаглиф Без цветопередачи; изображение в фиолетовых тонах; низкий уровень раздвоения изображения;
- Оттенки серого Без цветопередачи; большее раздвоение изображения;
- Цветной анаглиф Частичная цветопередача; "конкуренция сетчатки" (высокая контрастность близлежащих пикселей)
- Полу-цветной анаглиф Аналогично предыдущему пункту, но хуже цветопередача, зато меньше конкуренция.
- Примерно так это может выглядеть на Python (hardcode с матрицами конечно некрасив, но формул для их выведения у меня нет)
Image.open('path/to/img.jpg')
method = "color_anaglyph"
parallax = 10
if method == "true_anaglyph":
magic1 = [[0.299, 0.587, 0.114],
[0, 0 ,0],
[0, 0, 0]]
magic2 = [[0, 0 ,0],
[0, 0, 0],
[0.299, 0.587, 0.114]]
elif method == "gray_anaglyph":
magic1 = [[0.299, 0.587, 0.114],
[0, 0 ,0],
[0, 0, 0]]
magic2 = [[0, 0 ,0],
[0.299, 0.587, 0.114],
[0.299, 0.587, 0.114]]
elif method == "color_anaglyph":
magic1 = [[1, 0 ,0],
[0, 0 ,0],
[0, 0, 0]]
magic2 = [[0, 0 ,0],
[0, 1, 0],
[0, 0 ,1]]
elif method == "half-color_anaglyph":
magic1 = [[0.299, 0.587, 0.114],
[0, 0 ,0],
[0, 0, 0]]
magic2 = [[0, 0 ,0],
[0, 1, 0],
[0, 0 ,1]]
else:
magic1 = [[0, 0.7 ,0.3],
[0, 0 ,0],
[0, 0, 0]]
magic2 = [[0, 0 ,0],
[0, 1, 0],
[0, 0 ,1]]
magic1 = numpy.array(magic1)
magic2 = numpy.array(magic2)
matrix = numpy.asarray(img)
left = right = matrix
rs = right.shape
right = numpy.concatenate((numpy.zeros((rs[0], parallax, 3)), right), axis=1)
right = right[:, :-parallax, :]
left = numpy.dot(left, magic1.transpose())
right = numpy.dot(right, magic2.transpose())
res = left + right
res = res[:, parallax:, :]
res = numpy.uint8(res)
Image.fromarray(res).save("output.jpg")
{{ </highlight> }}