Вопросы по данным в ICC RGB профиле для печати (XML CN_IJPrinter_Profile2015.icc)

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Здравствуйте.

Пытаюсь понять что-нибудь из ICC профилирования, ищу тех, кто бы мог объяснить "для дураков" на не объёмном примере. Буду писать свои догадки, так возможно будет понятнее в каких заблуждениях прибываю.

Распаковал в XML CN_IJPrinter_Profile2015.icc, который шёл с принтером Canon серии 1410, похоже что для базовой матовой бумаги. Информации для профилия ICC, насколько я понимаю, в нем сравнительно мало и для профессионалов он примитивный (меня результат его работы на неоригинальной бумаге, только которая была, уcтраивает, за исключением большого Нюанса, но сейчас не об этом).

XML CN_IJPrinter_Profile2015.icc:

DataColourSpace: RGB

PCS: XYZ

DeviceAttributes: GlossyOrMatte="matte"

RenderingIntent: Perceptual

PCSIlluminant: X="0.964202880859" Y="1.000000000000" Z="0.824905395508"

mediaWhitePointTag: X="0.950454711914" Y="1.000000000000" Z="1.089050292969"


вопр.) Если выставлено Perceptual в RenderingIntent, то по умолчанию преобразование в (или "связывание c" ) PCS производится по данным AToB0Tag? (здесь данные всех AToB одинаковые - AToB1Tag, AToB2Tag: SameAs="AToB0Tag" )

AToB0Tag/lut16Type:
Channels: InputChannels="3" OutputChannels="3"
InputEntries="1024" OutputEntries="256"

BCurves:
Curve: числа 0..65535 1024 значения
Curve: те же данные
Curve: те же данные

вопр.) Если DataColourSpace: RGB, значит здесь входные данные (три канала по 1024 значений) это данные RGB пространства?
вопр.) Почему эти данные маркируются как "B-кривые", а не просто массивы, если в каждой "кривой" содержится всего 1024 значений? если для точки нужно два значения, значит должно быть 1204x2 значений, или только уже в результате вычислений профиля получают нужную пару значений для кривой?
вопр.) Если в каналах по 1024 значения, 1024 это то количество цветов которое гарантированно поддерживает средний современный монитор и приводятся соответственно числовые RGB значения этих цветов?

CLUT: GridGranularity="2"
TableData: числа 0..27036 6x4

ACurves:
Curve: IdentitySize="256"
Curve: IdentitySize="256"
Curve: IdentitySize="256"

вопр.) Здесь результирующие выходные XYZ каналы?
вопр.) Происходит "интерполяция" каждого из 1024 значений входных каналов на значение 0-255 выходных каналов?
вопр.) Если выходной (256 элементов) канал уже входного (1024 элементов), здесь происходит нежелательная потеря данных при конвертации в PCS XYZ?


Далее спрашивать наверное пока смысла нет..
 

AlexG

15 лет на форуме
Сообщения
702
Реакции
492
Распаковал в XML CN_IJPrinter_Profile2015.icc, который шёл с принтером Canon серии 1410, похоже что для базовой матовой бумаги. Информации для профилия ICC, насколько я понимаю, в нем сравнительно мало и для профессионалов он примитивный (меня результат его работы на неоригинальной бумаге, только которая была, уcтраивает, за исключением большого Нюанса, но сейчас не об этом).

XML CN_IJPrinter_Profile2015.icc:

DataColourSpace: RGB

PCS: XYZ

DeviceAttributes: GlossyOrMatte="matte"

RenderingIntent: Perceptual

PCSIlluminant: X="0.964202880859" Y="1.000000000000" Z="0.824905395508"

mediaWhitePointTag: X="0.950454711914" Y="1.000000000000" Z="1.089050292969"

вопр.) Если выставлено Perceptual в RenderingIntent, то по умолчанию преобразование в (или "связывание c" ) PCS производится по данным AToB0Tag? (здесь данные всех AToB одинаковые - AToB1Tag, AToB2Tag: SameAs="AToB0Tag" )

Да. Хотя не весь софт это умеет делать (ну то есть если поставить Relative по умолчанию, то не факт, что софт будет использовать Relative).
А так как данные всех AToB в этом профиле, действительно, одинаковые, то все равно.

AToB0Tag/lut16Type:
Channels: InputChannels="3" OutputChannels="3"
InputEntries="1024" OutputEntries="256"

BCurves:
Curve: числа 0..65535 1024 значения
Curve: те же данные
Curve: те же данные

вопр.) Если DataColourSpace: RGB, значит здесь входные данные (три канала по 1024 значений) это данные RGB пространства?
вопр.) Почему эти данные маркируются как "B-кривые", а не просто массивы, если в каждой "кривой" содержится всего 1024 значений? если для точки нужно два значения, значит должно быть 1204x2 значений, или только уже в результате вычислений профиля получают нужную пару значений для кривой?

Профиль кодируется несколько по другому. Входные значения кривой в него не пишутся, они банально идут с равным шагом 100/1023 (то есть для они равны 100*N/1023, где N -порядковый номер от 0 до 1023). А пишутся только выходные.

вопр.) Если в каналах по 1024 значения, 1024 это то количество цветов которое гарантированно поддерживает средний современный монитор и приводятся соответственно числовые RGB значения этих цветов?

Нет, это никак не связано. 1024 это количество точек, которыми описывается кривая. И все.

CLUT: GridGranularity="2"
TableData: числа 0..27036 6x4

ACurves:
Curve: IdentitySize="256"
Curve: IdentitySize="256"
Curve: IdentitySize="256"

вопр.) Здесь результирующие выходные XYZ каналы?

На выходе кривых - да.

вопр.) Происходит "интерполяция" каждого из 1024 значений входных каналов на значение 0-255 выходных каналов?

Нет. ACurves это опять же описание выходной кривой. Curve: IdentitySize="256" означает, что описание кривой сделано по 256 точкам, причем это прямая y=x (IdentitySize). То есть на самом деле она могла бы быть описана всего лишь двумя точками - 0 и 100.

вопр.) Если выходной (256 элементов) канал уже входного (1024 элементов), здесь происходит нежелательная потеря данных при конвертации в PCS XYZ?

Нет, это работает по другому, по входной кривой движок интерполирует произвольные значения (а не только эти 1024) в выходные значения. Далее после ЛУТ таблицы (отдельная песня, в ней тоже происходит интерполяция) данные через выходную кривую интерполируются в выходные значения (в случае данного профиля это прямая зависимость, то есть что на входе выходной кривой, то и на выходе) .

А вообще профиль интересный. Вы будете смеяться, но это натуральный sRGB, но переделанный в профиль типа output.
(У него даже точка белого синющая - X=0.9505, Y=1.0000, Z=1.0891, это координаты Д65, поэтому использовать его с Absolute Rendering Intent нельзя).
Ну то есть если в Фотошопе преобразовать RGB картинку из профиля sRGB в него (с любым Rendering Intent кроме Absolute), то . ничего не изменится!
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
А вообще профиль интересный. Вы будете смеяться, но это натуральный sRGB, но переделанный в профиль типа output.
(У него даже точка белого синющая - X=0.9505, Y=1.0000, Z=1.0891, это координаты Д65, поэтому использовать его с Absolute Rendering Intent нельзя).
Ну то есть если в Фотошопе преобразовать RGB картинку из профиля sRGB в него (с любым Rendering Intent кроме Absolute), то . ничего не изменится!
Спасибо! Всё доходчиво.


Не по теме:
Дело в том, что этот принтер без профиля печатает просто желтушно, причем объективно, на разной бумаге (простой и фотобумаге). Думал почему, и придумал, что в японии была популярна голубая офисная бумага, а потом так и осталось как базовая норма. Но да, все равно слишком пересинивает.
Драйвером этот профиль опеределяет по умолчанию. В обычном цв. режиме можно печатать даже неплохо, НО для "фоторежимах", в которых он выхватывается по умолчанию (матовая, высокого разрешения), он просто НЕ ПОДХОДИТ для ЭТОГО принтера... потому что это не фотопринтер, и черных чернил в "фоторежимах" просто нет, а только эрзац черный, который "из коробки" АБСОЛЮТНО не проработан, чтоб был более мене сносный результат. Или уже китайцы там занимаются программной комплектацией или чисто японское новое качество.. Я победил, но хотелось бы делать такие вещи более правильно.



еще вопросы по теме:

в.) Можно сказать что здесь в ACurves пустые преобразования, т. е. нет преобразований (обязательно нужно было объявлять ACurves) ?
в.) Когда выходных каналов меньше, когда входных меньше, что это означает?
 

AlexG

15 лет на форуме
Сообщения
702
Реакции
492
в.) Можно сказать что здесь в ACurves пустые преобразования, т. е. нет преобразований (обязательно нужно было объявлять ACurves) ?

В теге AToB0Tag этого профиля (преобразование Device to PCS, т.е. в данном случае RGB > XYZ) ACurves это прямая зависимость, то есть, по сути, нет никакого преобразования.
А в теге BToA0Tag (преобразование XYZ > RGB), наоборот, BCurves это прямая зависимость. Но тут еще матрица преобразования присутствует.

в.) Когда выходных каналов меньше, когда входных меньше, что это означает?

Не очень понятен вопрос. Вопрос в том, может ли быть такое, что в теге AToB0Tag количество выходных каналов меньше, чем входных? Может. Любой профиль с количеством каналов больше 3-х, например, CMYK.
 
  • Спасибо
Реакции: plumbum

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Не очень понятен вопрос. Вопрос в том, может ли быть такое, что в теге AToB0Tag количество выходных каналов меньше, чем входных? Может. Любой профиль с количеством каналов больше 3-х, например, CMYK.
Да, в CMYK ISOcoated_v2_300_eci.icc в AToB0Tag: InputChannels="4" OutputChannels="3", про один канал "забывают", в BToA0Tag: InputChannels="3" OutputChannels="4", "вспомнили" про канал. В AToB0Tag данные из отсеченного канала попадают из RGB в XYZ? Обязательно было вспоминать в BToA0Tag про четвертый канал (писать OutputChannels="4"), если он отсечен был в AToB0Tag? Так только крайние каналы отсикаются? Можно отсечь M не отсекая Y ?
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Ошибся в вопросе, получается: В AToB0Tag данные из отсеченного канала попадают из CMYK в XYZ?
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Дошло, что в CMYK профиле в AToB0Tag происходит преобразование в аддитивную трехканальную цветовую модель, но зачем это именно в профиле для печати?
 

AlexeyT

Участник
Сообщения
2
Реакции
0
Происходит преобразование не в аддитивную цветовую модель, а в XYZ, так как в PCS вычисления ведутся в этой системе. Прикладываю перевод старой ICC спецификации, там это всё расписано.
 

Вложения

  • ICC-Specification-v42_rus.pdf
    1.3 МБ · Просм.: 49

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Происходит преобразование не в аддитивную цветовую модель, а в XYZ, так как в PCS вычисления ведутся в этой системе. Прикладываю перевод старой ICC спецификации, там это всё расписано.
Спасибо, читаю его неделю, но понимаю мало что.
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Такой вопрос по профилированию:

Есть изображение в формате RGB (пусть базовый sRGB ), при его печати хочу ТОЛЬКО параметизировать непосредственно CMYK, в которой он фактически будет печататься. Т. е. преобразование CMYK -> PCS (XYZ/Lab), получается, не интересует. А нужно, получается, RGB ->PCS (XYZ/Lab), PCS (XYZ/Lab) -> CMYK, исходя из того что, пусть RGB в PCS "ляжет как ляжет" (понимаю, что надо определить сам PCS как XYZ или Lab). Как вообще скомпоновать такое решение? Это профиль с DataColourSpace: RGB или DataColourSpace:CMYK ? Достаточно только определить теги BToATag: Channels: InputChannels="3" OutputChannels="4", без AToBTag? Это один файл профиля или несколько?
 

AlexeyT

Участник
Сообщения
2
Реакции
0
Думаю вам стоит начать отсюда и посмотреть ролики о CMS и профилировании принтеров (курсы от Алексея Шадрина)
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Думаю вам стоит начать отсюда и посмотреть ролики о CMS и профилировании принтеров (курсы от Алексея Шадрина)
Я думаю, что тому, кто в курсе дела, если он посчитает нужным, будет даже легче ответить на последний вопрос в схематично-тезисной форме (что подразумевает сам вопрос), НЕ АБСТРАКТНО.
 

plumbum

Участник
Топикстартер
Сообщения
52
Реакции
13
Здравствуйте. В продолжение темы, может кто знает:

Если рассматривать тег типа LuT16, По какой рациональной причине входные или выходные каналы соответственно кодируются одинаковым количеством точек, если в соответствующих пакетах каналов (входных или выходных) кривые в принципе могут быть очень разными, и для описания одних желательно больше точек, а для других достаточно меньше?
 

Emergency

15 лет на форуме
Сообщения
162
Реакции
22
По какой рациональной причине входные или выходные каналы соответственно кодируются одинаковым количеством точек
Причина та же, что при округление цен до копеек или до рублей, хотя можно считать и до тысячных долей копейки.
Считается, что человек различает порядка ста оттенков серого и порядка тридцати оттенков чистого цвета. перемножением получается порядка 3000 цветов, причем, данные выше оценки приведены для людей с хорошим цветовым зрением, а не со средним.
 
  • Спасибо
Реакции: plumbum