[Перевод] Проект «Радуга» – попытка показать цветное изображение на чёрно-белом мониторе

Целью данного проекта было вывести цветное изображение на чёрно-белый монитор путём наложения на экран распечатанного на ацетатной плёнке (на струйном принтере) фильтра Байера. Цветное изображение получается как мозаика.

Я купил на eBay ч/б монитор Eizo для просмотра ч/б фотографий, и мне стало интересно, смогу ли я воспроизвести эффект типа автохрома, в котором цветные фильтры из крупинок крахмала накладываются на ч/б фотопластинку, давая цветное изображение.

На фото ниже дано увеличенное дешёвым USB-микроскопом в 500 раз изображение пикселей, из которых состоит ч/б ЖК-дисплей. Сначала я подумал, что каждый пиксель составлен из 4 субпикселей, но потом пришёл к выводу, что каждый пиксель состоит из трёх групп светодиодов в форме < (см. далее).

96d3cb77d72db483589cca6f0f047794.jpg


Я сделал pdf с узором Байера и размерами 433,1 мм × 324,8 мм. Разрешение монитора равно 2048×1536, и я предположил, что высота и ширина у пикселей одинаковая.

Пример созданного pdf привожу ниже. К примеру, голубой элемент должны представлять 2×2 пикселя ч/б монитора.

6fad298d3829ab4eafe3280c51895c9c.png

Я создал 3 pdf:

  • bayer_1.pdf — каждый элемент обозначен 1 пикселем дисплея.
  • bayer_2.pdf — каждый элемент обозначен 2×2 пикселями дисплея (эта ацетатная плёнка использовалась в видео).
  • bayer_4.pdf — каждый элемент обозначен 4×4 пикселями дисплея.


Вот так выглядит ацетатная плёнка с распечатанным узором Байера:

4aae187eebb0a5fa11c6f11ca7e183b9.jpg

Вот ч/б изображение, разбитое на мозаику, полученное из цветного:

36c4a47d17933dca29b3b01809c4a407.png

Как это работает


e183ebf0eb3ce32fc93705d697d9ce44.png
Берём пиксель с цветного изображения. Синий пиксель превращается в четыре серых элемента. Накладываем на него ацетатную плёнку с узором Байера.

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

xrandr --output HDMI1 --rotate left


Какой получается эффект

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

e8d8cfe27132a8b0dd4b00c798115986.jpg

Видео эффекта применения ацетатной плёнки


Ознакомьтесь с демонстрацией этого эффекта на видеоролике, воспроизведённом со следующими параметрами:

mpv out.mkv --fullscreen --loop --brightness=10 --contrast=20

Изображения фильтра Байера 2×2 под микроскопом


Я попытался сделать такой фильтр, в котором квадратики одного цвета закрывают 2×2 пикселя монитора.

Шахматный порядок


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

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

1×1

1b236b6991f6bf3d98eb55f9ea78b392.jpg

2×2

85d22d16b298798d9c94d2a63d8c2061.jpg

Микроскоп с микрометром


Я использовал шахматный узор 2×2 и микрометр от микроскопа с шагом в 0,01 мм. По первоначальным расчётам я предположил, что размеры каждого белого/чёрного блока должны составить 0,42 мм × 0,42 мм, что примерно совпало с измерениями.

Было тяжело одновременно наводиться на пиксели и фокусировать изображение. Я использовал микрометр, повёрнутый вверх ногами, чтобы распечатка была ближе к пикселям, но у микроскопа получилось очень маленькое фокусное расстояние.

7eac411bc9a01c8bfc352438464212ea.jpg

3c8905bb8134b2da29e7a8ce5f3a393b.jpg

Использование микрометра в вертикальной ориентации, для измерения размера шахматных квадратов.

d2d5374f9fab4b60066c547e95c295f8.jpg

Я обнаружил, что микрометр проще использовать для калибровки микроскопа, а не как направляющую. Я сделал фото микрометра с увеличением в 500 раз, и написал простой скрипт, определяющий местоположение линий и измеряющий общую длину микрометра на 1 мм. Получилось, что на 1 мм умещается 1241,5 пикселей.

201d643969ee7ff2c37fdf710d504143.png

Используя первоначальные вычисления, ширину панели и количество пикселей, я получил размер пикселя в 0,21 мм × 0,21 мм.

0.21147460937×1241.5 = 262.5

= 263 пикселя в высоту и ширину.

7d2d0620b2fb558dc689bc29ab15a874.png

Возможные улучшения


Интересно, можно ли улучшить этот эффект, измерив точную высоту и ширину пикселей под микроскопом, и использовав эту информацию для печати на плёнке.

Также важным моментом является выравнивание, нужно подумать над тем, как это улучшить — возможно, для этого тоже нужно использовать микроскоп.

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

c875e25f5ef6ef4bb6b44e0832f51eb2.jpg

Поэтому я изготовил фильтр при помощи технологии печати на прозрачной плёнке от Kodak под названием Duraclear. И вот результат на видео:

Исходный код


→ Код для создания PDF и мозаичных изображений и видео

© Habrahabr.ru