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

plumbum

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

Пытаюсь понять что-нибудь из 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

Участник
Топикстартер
Сообщения
17
Реакции
2
А вообще профиль интересный. Вы будете смеяться, но это натуральный 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

Участник
Топикстартер
Сообщения
17
Реакции
2
Не очень понятен вопрос. Вопрос в том, может ли быть такое, что в теге 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

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

plumbum

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

AlexeyT

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

Вложения

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

plumbum

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

plumbum

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

Есть изображение в формате 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

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