Построение профилей по небольшому количеству измерений

  • Автор темы Автор темы serzin
  • Дата начала Дата начала
Написать код, который будет дергать из большой шкалы нужные 52 поля(если они там есть), нет никаких проблем. Вопрос зачем?
Я посмотрел на эту имеющуюся шкалу - да пусть будет такая. Согласен, незачем. Просто были такие идеи, что может кто-то захочет иное кол-во градаций что-то от себя дошаманить. Но согласен, надо на эти все домыслы забить, оно и как есть хорошо уже сделано.
 
По мне так проще питон поставить.:) Не нейронки чай обучаем.:) Но в общем воткнуть код в колаб тоже дело пары минут.:)
Я попробовал так и эдак - мне показалось удобнее в колаб. Гугл фактически не позволяет на бесплатных аккаунтах запускать нейросети в колабе, уж больно много ресурсов жрут. Но тут не нейросеть на GPU, и все отлично работает, и гугл проект не банит на бесплатном аккаунте. Я там попробовал дописать обработчики ошибок неподгруженных файлов (подумал важно для сетевого размещения), словом интересно, спасибо за конструктор!
Я попробовал все пройти пошагово от начала до самого конца, попробовал построить профиль по небольшому количеству измерений, попробовал с данными более близкими к фогре 39 по кривым. На всех этапах мне результат понравился, в профиле icc генерация черного похожа на есишную по балансу, по кривым TVI похоже на работу Color Tool над фогрой 39 относительно ISO. Тема супер, спасибо. Теперь, когда работающий инструмент есть - воткну в свой ежемесячный тест шкалку в дополнение к калибровочным шкалам, на всякий, вдруг потребуется профиль неожиданно.
 

Вложения

  • 1P_TC52-CMYK_Eye-One_iO_preview.png
    1P_TC52-CMYK_Eye-One_iO_preview.png
    64.5 КБ · Просм.: 144
  • 3D_Neugebauer.png
    3D_Neugebauer.png
    734.5 КБ · Просм.: 149
  • icc_Neugebauer.png
    icc_Neugebauer.png
    32.4 КБ · Просм.: 143
  • icc_Neugebauer_curves.png
    icc_Neugebauer_curves.png
    42.3 КБ · Просм.: 153
  • Neugebauer_colab.png
    Neugebauer_colab.png
    565.7 КБ · Просм.: 144
  • Spectralcalc_PNG_image_2023_03_05_18_28_18_PM.png
    Spectralcalc_PNG_image_2023_03_05_18_28_18_PM.png
    121 КБ · Просм.: 148
  • sRGB_colortable_2023_03_05_18_24_08_PM.png
    sRGB_colortable_2023_03_05_18_24_08_PM.png
    148.4 КБ · Просм.: 161
  • Спасибо
Реакции: splxgf
Поскольку все малозначимые вопросы мы вроде как обсудили в теме, можно перейти к серьезным вещам, к теории и к ее воплощению в готовой технологии.

В оригинальной публикации Expanded Neugebauer model for printer color formation большое внимание уделяется функции Neugebauer's colorimetric quality factor (CQF):

Neugebauers_colorimetric_quality_factor_CQF.png

Функция 2.7 присутствует в коде, однако колориметрической подготовки данных 2.8 по функции CQF я не нашел в коде.
Отсюда как бы вопросы чисто от колориста-разработчика коллеге колористу-разработчику:

• удалось ли найти в табличном виде функцию CQF, или будем трейсить по графику из публикации? Мне найти не удалось пока.

• привязка данных к зрительному восприятию CQF возможно еще повысит точность модели? Или есть соображения, почему в данных условиях CQF можно проигнорировать? CQF явно по CMF стандартного наблюдателя как-то строилась и по идее такие вещи всегда визуально хорошо срабатывают в различных функциях

• интересно проверить результат с учетом CQF или считаете не имеет смысла?
 

Вложения

  • Neugebauers_CQF.png
    Neugebauers_CQF.png
    21.2 КБ · Просм.: 144
  • Спасибо
Реакции: Chiga
интересно проверить результат с учетом CQF или считаете не имеет смысла?
Для того, чтобы развлекаться с CQF нужно научится подбирать коэффициенты Юла и проценты заполнения индивидуально для каждой длины волны. Сейчас они у меня общие для всех длин волн. Я сейчас в этом ковыряюсь, но, как выяснилось, это не такая простая задача. Там достаточно качественные грабли разложены. Если получится это реализовать, то можно будет и CQF попробовать.:)
 
Последнее редактирование:
  • Спасибо
Реакции: mihas
В статье ребята предлагают проценты заполнения делать разными для разной длины волны, но коэффициент Юла при этом у них общий. Этого я совсем не понимаю. На одной длине волны оптического растискивания не будет вообще, на другой оно будет максимальным. Как при этом может быть один и тот же коэффициент Юла?
 
нужно научится подбирать коэффициенты Юла и проценты заполнения индивидуально для каждой длины волны. Сейчас они у меня общие для всех длин волн. Я сейчас в этом ковыряюсь, но, как выяснилось, это не такая простая задача. Там достаточно качественные грабли разложены. Если получится это реализовать, то можно будет и CQF попробовать.
Сергей, у меня также нет ответов готовых на эти все вопросы, тоже ковыряю код понемногу. Просто мне интересно как вариант проверить площади и соответственно растискивания по сумме произведений длины волны на CQF. Может вы там найдете что-то более интересное по ростискам?
Zeng разработал модель для оптимизации площади точек. Используя эту модель, площадь точки в уравнении рассматривается как функция длины волны, как сумма произведений длин волн с CQF.
Я вижу по вашему коду, что вы считаете все до Зенга и CQF, я попробую его проверить, если что выйдет - напишу. Я просто с такой идеей сталкиваюсь впервые, просто пока смотрю, а что вообще получается.
 
Последнее редактирование:
Мне в целом идеи Zeng-а не близки.:) На мой взгляд они противоречат физике и здравому смыслу.:)
Как может площадь заполнения краской на оттиске зависеть от длины волны? Точка на оттиске одинаковая для всех длин волн. От длины волны зависит оптическое растискивание, а следовательно коэффициент Юла. Но он разный не только для каждой длины волны но и для каждого из 16-ти красконаложений. Поэтому шансов его подбирать индивидуально я не вижу.
Идея что-то подбирать по dE мне тоже кажется странной. Свет на оттиске ничего не знает о человеке и его цветовосприятии. И модель Юла-Нильсона и Neugebauer model имеют дело с коэффициентами отражения и ничего про человека не знают. Они пытаются построить модель физического процесса отражения и рассеяния света на оттиске. Подгонка параметров по dE мне напоминает подгонку данных в лабораторной работе по физике. Поскольку мы потом будем оценивать нашу физическую модель в применении к колориметрии, до давайте ее сразу подгонять под желаемый результат.
Я же использую чистую физику. Параметры модели подбираются под максимальное соответствие расчетных коэффициентов отражения экспериментальным данным.
Но при этом, если бы ребята удосужились описать свой алгоритм так, чтобы его можно было бы реализовать, то было бы весьма интересно сравнить результаты.
 
  • Спасибо
Реакции: mihas
Я же использую чистую физику.
Я вчерне себе набросал эту модель на яваскрипте, который мне привычен 20 лет и на котором мне думается хорошо. Я две вещи у вас в коде не осилил и переписал по-своему: это подбор n коэффициента Юла просто с нуля написал иначе, ибо это кажется с питона непереводимо!-) и проще написать заново, и вторая штука, которую начал делать по-своему - это "оптимальные значения площади точки". Не скажу, что сильно продвинулся, но вроде голубая краска выше других уже не торчит, но ковыряться можно много. Честно хотел отдельной простой утилитой создать - какое там, оказалось столь большое кол-во функций у меня завязано на интерфейс, что конструировать куда проще уже в этом интерфейсе, которому уж лет 8. Сейчас бы да, я бы эти 50 тысяч строк кода совсем иначе бы написал как модульный конструктор, но не в силах столько переписать иначе. Так что леплю новое к тому что имею, так хоть быстро выходит.
 
Проценты заполнения краской на бумаге можно извлечь из спектров(см. тут) и подобрать к ним коэффициент Юла. Пока не дошли руки реализовать. Интересно будет ли точнее.
 
Интересно будет ли точнее.
Меня тоже эта модель увлекала благодаря вашему питону. Мозг прямо радуется этой задачке, она очень любопытная. Я себе для пущего удовольствия набросал все это дело в интефейсе, как я люблю на яваскрипте. Вчерне все работает, теперь можно заняться экспериментами. Давненько в поле моего зрения не попадала задача столь увлекательная, спасибо. Если что замечу любопытного я напишу.

P.S. Забавно, приложил файл всего 260 килобайт, а форум его раздул до мегабайта, причем при этом замылил.
 

Вложения

  • Neugebauer_spectralcalc.png
    Neugebauer_spectralcalc.png
    1.1 МБ · Просм.: 147
Последнее редактирование:
Еще бывают Cellular Yule-Nielsen spectral Neugebauer model и Superposition-dependent ink spreading method(Это если в предсказывающие спектры модели не залезать). И тот и другой существенно сложнее и требуют больше полей. Якобы дают большую точность. По мне так и то, что мы уже получаем, очень неплохо на фоне стабильности офсета в принципе.:)
Но меня сейчас больше интересует как рескейл колоранта работает на файлах, в которых есть не все 16 наложений. На моих 52-х полях, где казалось бы есть все необходимое, он дает немного меньшую точность, чем моя утилита. Но он как-то может рескейлить шкалы где нет всех наложений. Единственная идея, которую я нашел в одной из статей, это на первом этапе фитинг спектров недостающих наложений по всем имеющимся в шкале полям. А если в шкале нет ничего кроме градационных и скажем 14-ти наложений? Если у кого есть еще идеи, буду крайне признателен.:)
 
  • Спасибо
Реакции: mihas
он дает немного меньшую точность, чем моя утилита
Он достаточно странно все делает, спектры корежит очень сильно, при этом дает какую-то точность...
Если у кого есть еще идеи
Спектры наложений можно вычислять. :)
У меня зеленый бинар получился так.
blueMy.JPG
Так сделал Колорант.
blueCA.JPG
Зленая кривая измеренный спектр, пурпурная – вычисленный. Не везде так красиво как в этом примере, но есть о чем задуматься. ;]=
 
  • Спасибо
Реакции: mihas
Попробовал сегодня построить профиль по этой модели. Пользовался коллабом.
Это супер удобно для большого производства. Но. Пара моментов, которыя я попробовал контексте фотопечати на тонерной машине:
1.Профиль построенный по TC1617 имеет лучший серый клин, особенно отрезок первой четверти - там прямо больно.
2.Профиль по TC1617 имеет лучшую проработку глубоких теней

В остальном - это архиудобно для производств у которых вагон бумаг. Прямо супер-возможность.
 
  • Спасибо
Реакции: mihas
Файлами поделюсь, но уже только в субботу. Убежал с производства.
Коллаб: пост №82, от @mihas. Удобный вариант запуска скрипта.
 
Покажите если не сложно как.
Код:
double[] result =  new double [spectrumNmCount];
for (int nm = 0; nm < spectrumNmCount; nm++)
{
     double с1 =  spectrumColor1[nm];
     double с2 =  spectrumColor2[nm];
     double p =  spectrumPaper[nm];
     result[nm] = p / ((p / c1 - 1) + (p / с2 - 1) + 1);
 }
Колорант работает примерно так:
Код:
double[] result =  new double [spectrumNmCount];
for (int nm = 0; nm < spectrumNmCount; nm++)
{
     double с1 =  spectrumColor1[nm];
     double с2 =  spectrumColor2[nm];
     double p =  spectrumPaper[nm];
     result[nm] = (c1 / p) * (c2 / p) * p;
 }
Всё утрировано и просто, чтобы понять механизм расчетов.
Порядок наложения учитывается?
Чтобы учитывать порядок наложения, придется сделать гораздо больше измерений, либо округлить все краски до одинаковых свойств рассеяния, пропускания, отражения...
Пока всё только на начальном уровне, и продвинется ли дальше хз.
 
Последнее редактирование:
  • Спасибо
Реакции: mihas