Previous Entry Share Next Entry
Серый цветовой профиль
ook
nabbla1
Может, заголовок и является оксюмороном, однако вещь реально существующая. В английском название даже более абсурдно: Grayscale color profile.

Основное его применение - калибровка принтеров (скорее даже набора "принтер + краситель + бумага") и более зверских устройств печати (тех, что не пролазят ни в дверь, ни в железнодорожный габарит), чтобы получить качественную продукцию. В фотошопе можно увидеть набор профилей "dot gain", которые учитывают, что при печати серых тонов они несколько размываются и оказываются темнее, чем ожидалось:


Мне пока ни разу не попадались входные серые цветовые профили, т.е сканер, который калибровали в режиме grayscale, хотя никаким стандартам это не противоречит. В итоге я решил попробовать построить свой собственный, руководствуясь этим документом. Как ни странно, получилось, по крайней мере, Фотошоп воспринял профиль ровно так, как я и ожидал. Но вот программы для просмотра изображений эту штуку проигнорировали начисто. "Не выпендривайтесь, серый это и есть серый!"

(на этой демонстрации первое изображение без профиля, остальные преобразованы в sRGB)
NoManagement.pngRelativeColorimetric.png
AbsoluteColorimetricACE.pngAbsoluteColorimetricICM.png

Если Малевич изобрёл пиксельную графику, то Уорхолл первым начал применять цветовые профили, правда, он где-то каналы попутал.


Ссылка на оригинал (пиксели ровно те, что выдал сканер, но внедрён тот самый серый цветовой профиль): https://img-fotki.yandex.ru/get/212758/41043419.80/0_170087_6d0bdc86_orig

А вот ссылка для скачивания моей небольшой программки ICCreader: https://yadi.sk/d/_KA--2y03JN2wQ
скормив ей этот оригинальный файл, получим следующее:

IHDR chunk
size: 25 B
Image Header
Image size: 3542x5444
ColorType: 0 (Grayscale)
Bit depth: 8
Compression method: 0 (Deflate)
Filter method: 0 (Default filter, none/sub/up/ave/paeth)
Interlace method: 0 (None)


pHYs chunk
size: 21 B
Store image physical resolution (pixel size)
Horizontal: 23622 pixels per meter (600,00 dpi)
Vertical: 23622 pixels per meter (600,00 dpi)


gAMA chunk
size: 16 B
gamma=0,49


iCCP chunk
size: 447 B
Contains ICC Profile
name=
size:534
preferred CMM type: 
profile version number: 4.3.0.0.0
profile/device class: scnr
color space of data: GRAY
Profile connection space: XYZ 
Profile creation date: 19.05.2017 17:08:16
profile file signature: acsp
primary platform: 
CMM flags: not embedded; can't be used independently of the embedded colour data
Device manufacturer: 
Device model: 
Device attributes: Reflective, glossy, positive, colour
Rendering intent: Perceptual
Illuminant color:
X=0,964202880859375
Y=1
Z=0,824905395507813
Profile creator: 
Profile ID: 00000000000000000000000000000000
 ---- End of header ---- 

Tag count: 4


cprt
Size=48; offset=180
ScanCombine by nabbla (nabbla@yandex.ru)


desc
Size=52; offset=228
Plustek OpticBook 3800 grayscale 19.05.2017


wtpt
Size=20; offset=280
X=0,714752197265625
Y=0,71710205078125
Z=0,398681640625


kTRC
Size=234; offset=300
Curve with 111 points
78   	78   	78   	78   	78   	85   	105  	136  	
178  	233  	300  	378  	468  	570  	684  	810  	
948  	1097 	1259 	1432 	1617 	1814 	2022 	2243 	
2475 	2719 	2976 	3243 	3523 	3815 	4118 	4434 	
4761 	5100 	5451 	5813 	6188 	6574 	6973 	7383 	
7805 	8239 	8684 	9142 	9611 	10092	10585	11090	
11607	12135	12676	13228	13792	14368	14956	15555	
16167	16790	17425	18072	18731	19402	20085	20779	
21485	22203	22933	23675	24429	25194	25972	26761	
27562	28375	29200	30036	30885	31745	32617	33501	
34397	35304	36224	37155	38098	39053	40020	40999	
41990	42992	44006	45032	46070	47120	48182	49255	
50341	51438	52547	53668	54801	55945	57102	58270	
59450	60642	61846	63062	64289	65528	65535	




IEND chunk
size: 12 B
empty IEND chunk, just shows end of file



Как можно видеть, информативных частей в сером профиле две: кривая отклика (kTRC, K channel Tonal Response Curve) и цвет бумаги (wtpt, media WhiTe PoinT).
Первая позволяет "автоматом" получить правильную яркость, контрастность и гамму. Эта кривая составляется по 24 серым полям в цветовой мишени: мы сопоставляем уровень, выданный сканером с Y-значением, которое замерили спектрофотометром после изготовления мишени.

С цветом бумаги всё хитро... Мы должны задать его в абсолютных координатах, в тех же XYZ. Для этого нужно сначала откалибровать сканер в цвете (построить RGB профиль), отсканировать одну из страниц в цвете, вырезать оттуда пустой участок (без текста), внедрить RGB профиль. Теперь мы можем узнать цвет бумаги в XYZ координатах, их-то мы сюда и добавим!

Осталось разобраться, как вся эта информация интерпретируется программами для просмотра. Всё зависит от выбранного Rendering intent (в настройках Windows 10 это перевели как ICC-отрисовка, стало гораздо понятнее, правда?). Самый простой для понимания - Absolute colorimetric - мы пытаемся получить на экране копию, неотличимую от оригинала, хоть прислони рядышком - разницы особой не увидишь. У Microsoft ICM неплохо получилось - именно такие желтые страницы у этой книги 1934 года.

Но этот вариант используется реже всего. Следующая ступень - Relative colorimetric, где используется свойство хроматической адаптации человеческого глаза. Когда на улице начинает вечереть, то глядя в окна, мы видим отчетливо желтый свет. Но стоит нам самим зайти в комнату, и он очень быстро становится белым, и все предметы кажутся тех же самых цветов, каких они были днём, хотя количество коротковолновых компонентов упало очень заметно! Ну а если адаптация наступает так быстро, то вовсе незачем тащить за собой цвет бумаги - к нему мы тоже быстро привыкаем и перестаём обращать внимание. Поэтому теперь он становится по определению белым, (255;255;255), это позволяет более эффективно использовать динамический диапазон и цветовой охват монитора. В случае серого профиля мы ожидаемо получим самые обычные градации серого без цветовой окраски.

По умолчанию в системе задан Rendering intent: Perceptual. Про него в том могучем документе мало чего сказано, только общие слова - "делайте что угодно, но чтоб результат был зашибись!". То есть, каждая реализация управления цветом может поступать по своему разумению, однако пока у меня такое ощущение, что они все пошли по пути наименьшего сопротивления, Perceptual даёт ровно тот же результат, что и relative colorimetric.

Насколько такие профили имеют право на существование - не знаю. Кривая отклика не сильно впечатляет, куда логичнее преобразовать картинку к стандартной гамме = 2,2 и не мучаться. Возможность задать цвет бумаги - забавная опция - для всех "нормальных людей" картинка будет черно-белой, но если кому-то захочется взглянуть, как книжка выглядела в реальности, он может полезть в настройки управления цветом и выбрать там Absolute colorimetric. Понятно, что канал все равно один, так что какие-то цветовые нюансы пропадут, но выглядит все равно очень похоже, и места мало занимает. Правда, остаётся несколько маленьких проблем - "протащить" профиль сквозь FineReader в итоговый PDF и надеяться, что Adobe Acrobat его поймёт...

  • 1
О!
А вот интересный реальный кейс, для чего оно может понадобитсяа, сходу решить не удалось.
Удаленная точка сканит кассовые чеки на термобумаге и присылает их в головной офис, где их печатают.

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

Обрабатывать эти сканы руками - сложно.
Программа сканирования встроенная в драйвер МФУ не позволяет сохранить настройки яркость-контрасность.
Была мысль подсунуть драйверу цветопрофиль серого с задранными значениям, чтоб завалить скан ближе к черному, но знаний, как построить цветопрофиль не хватило.

Мне кажется, что нужно просто в автоматическом режиме превращать в ч/б 1 бит. Сейчас и с этим поигрался немного - довольно простой и быстрый алгоритм, который (упрощенно говоря) находит два пика на гистограмме, соответствующие черному и белому, и проводит линию раздела посередке между ними. Для случаев, когда вся картинка равномерно потускневшая, должно сработать очень здорово, это когда народ книги разворотом на стекло клал, там вечная проблема пропечатки текста у переплета.

А на чём все это крутится и каковая степень автоматизации на данный момент?

Автоматизации к сожалению ноль.
Стоит МФУ HP на ней через прилагающуюся прогу сканят по очереди в папку файлики. Потом все попавшие в папку файлы руками отправляют по е-мыл и перемещают в корзину.
Операция ежедневная, но т.к. страниц обычно от 3 до 15 заморачиваться сложными решениями лень.
Вдобавок это МФУ нормально не захотело дружить с одной внешней прогой, которая делает многостраничные PDF. Прога открывает twain интерфейс сканера на каждую страницу секунд по 20, т.е. потери времени получаются еще больше, чем при использовании родной тупенькой сканировалки.

Под андроид есть крутая прога решающая такую задачу https://play.google.com/store/apps/details?id=com.intsig.camscanner&hl=ru

подумываю на нее перейти. :)

  • 1
?

Log in