Яндекс.Метрика

Калибровка монитора и Octave

000000

Калибровка монитора в Linux

(опыты в Linux Mint 20.1)

Раньше для Linux не существовало удобного метода визуальной калибровки дисплея. Теперь он есть.



Идея состоит в том, чтобы не корректировать данные таблицы LUT по точкам, а строить кривые цветопередачи с помощью математических функций. При этом для самоконтроля и упрощения работы по калибровке желательно видеть калибровочные кривые, которые использует видеокарта. Вместо того чтобы визуализировать эти кривые из системы, скрипт показывает вычисленные кривые, которые в точности соответствуют кривым видеокарты.

Поэтому на начальном этапе можно не загружать полученную таблицу в видеокарту, а просто поиграть с кривыми. Данные не попадут в LUT видеокарты пока не нажата кнопка To card.

Предупреждение:
Если случайно вы установили некорректные значения переменных, например переменной типа D присвоили значение сравнимое с единицей, а затем прменили эти значения, возможно, что экране монитора "ослепнет". Увидеть кнопки на форме Variables вы не сможете.
В таком случае <Ctrl + Alt + F1>, войдите в систему через терминал и введите dispwin -L.
После этого можно <Ctrl + Alt + F7> и вернуться в графический режим.

Графический интерфейс
Интерфейс
Интерфейс написан на python3.8 с использованием Qt5.

Для работы системы необходимо установить пакеты octave, agrill CMS,  python3.
Octave используется для построения графиков и заполнения таблицы LUT данными.
Из agrill используется компонент dispwin.

Работа с системой калибровки

Короткое видео.
Скачайте архив и распакуйте в любую папку. Интерфейс называется Variables, и архив распаковывается в одноимённую папку. Поместите её в любое удобное место.

Запускаемый файл variables.py. В открывшейся форме уже установлены значения переменных, около которых могут быть ваши значения, полученные в процессе калибровки. Если нажать кнопку From file, то загрузятся значения из файлов таблиц переменных, которые приложены к системе. Это значения полученные при калибровке монитора Dell S2415H.
При нажатии на кнопку To file значения из полей ввода будут записаны в файлы таблиц переменных. Если вам потребуется восстановить значения переменных на исходные, в папке backup находятся копии этих файлов.

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

Разностный график

Когда введены все необходимые значения, можно нажать кнопку To card, и данные будут записаны в таблицу LUT. При этом на экран будет выведено изображение теста, по которому вы сможете оценить результат этого шага калибровки.
Таких шагов придётся выполнить достаточно много. Обычно требуется не меньше двух часов для завершения калибровки.
После завершения калибровки с положительным результатом есть смысл сохранить файлы in1.txt, in2.txt, in3.txt для возможности восстановления результатов этой калибровки, если указанные файлы в папке variables будут перезаписаны при следующих опытах.

Системой создаётся файл таблицы LUT соответствующий по форме таблице, которая создаётся в системе DisplayCAL.

Если вам понадобится срочно сбросить результат работы системы, нажмите кнопку Actuate. При этом будет активирован тот профиль монитора, который был установлен ранее.

Если теперь вам необходимо вернуть экран в состояние после калибровки, нажмите From fileTo file > To card. 

Описание обозначений переменных:

G - Гамма (изгиб кривой) меняется вблизи единицы.
С - Контраст (общий наклон кривой) меняется вблизи единицы.
D - Сдвиг кривой по Y с сохранением неподвижной точки чёрного "0".
F - Вид выводимого графика. Значение 1 - калибровочные кривые, 2 - разностные кривые.
Call - Дополнительный общий контраст для всех кривых. Меняется около нуля. Добавляется (или вычитается при установке знака -) к контрасту каждой кривой.
Dall - Дополнительный общий сдвиг для всех кривых. Добавляется к каждой кривой.
Gall - Общая поправка гаммы для всех кривых. Изменяет гамму каждой кривой.
tk - сдвиг цветовой температуры (числа условные. 100 приблизительно соответствует сдвигу на 300K)
Gt - Компенсация избытка пурпурного или избытка зелёного в освещении.
ConK - изменяет характер сходимости к чёрной точке. Большие значения - более плавная сходимость.

Y - интервалы дополнительной коррекции, когда плавными кривыми результат получить не удаётся. Всего 12 интервалов.

Можете установить в одном из полей величину 5 и посмотреть на результат в графике.

R - Реперные точки вспомогательной кривой m. На цвет не влияют.
Вспомогательный инструмент для настройки. Реперные точки и вспомогательная кривая m позволяют запоминать точки графиков перед их последующим изменением. Если после применения большого числа интервальных поправок результат ещё не достигнут, то сформировав кривую m в соответствии с ходом кривой цвета, вы получите значения переменных для выглаживания кривой цвета и исключения интервальных поправок.

rgb - красный зелёный синий.
m - вспомогательная кривая.

В интерфейсе доступен параметр цветовой температуры tk и компенсации зелёного Gt. Этими параметрами можно пользоваться при подстройке монитора под изменившиеся условия освещения.
From fileTo file > поправка tk > To card.

После перезагрузки компьютера данные LUT будут потеряны видеокартой. Для их восстановления достаточно запустить интерфейс и нажать To card.

Есть возможность загружать данные LUT автоматически при загрузке компьютера.
Скопируйте удачный файл калибровки LUT_Octave.cal после нажатия на кнопку To card например в каталог ~/bin. Копировать надо именно после нажатия To card, иначе файл будет не полным. Создайте исполняемый (установите в свойствах файла) файл следующего содержания:

#!/bin/sh

dispwin ~/bin/LUT_Octave.cal

В запускаемых программах укажите этот файл для автозагрузки.
- - - - - - - -
Сегодня 16.02.21 в 10:49 загружена последняя версия интерфейса системы.

Внесены незначительные изменениния в  отображение графиков.
Лучше заметна линия чёрнобелой тонопередачи (серая на графике). Параметры этой линии изменяются с изменением параметров цветных линий. Форма линии чёрнобелой тонопередачи может быть ориентиром при калибровке. Обучно эта линия почти линейна в верхней части и имеет небольшой "горб" с приближением к началу координат.

Как это водится в Linux, система использует уже существующие программы, но объединяет их в полезном для решения задачи сочетании.
В комплекте файлов нет бинарных файлов. И скрипты Python, и Octave открыты для самостоятельного редактирования. Вы можете самостоятельно поменять стартовое изображение, изображение теста выводимого интерфейсом. Можете внести другие полезные для вас изменения.
Стартовое изображение нужно положить в папку с программой в формате png и прописать имя файла в строке

888         self.label_img.setPixmap(QtGui.QPixmap("1.png"))

файла interface.py вместо указанного там "1.png". В разделах def файла variables.py можно изменить выполняемые интерфеейсом действия.

Также открыт для изменения файл gamma11.m управляющий программой Octave.

Конечно, перед редактированием файла следует сделать копии файлов.

Файл gamma11.m последней редакции не будет выводить графики, если его запускать из графического интерфейса Octave. Это сделано для того, чтобы во время построения графиков калибровочных кривых на экране не мелькал сгенерированный Octave график, а открывался созданный Octave файл с изображением графика.

Если вам зачем-либо необходимо вернуть обычный функционал Octave, потребуется закомментировать знаком % строки 182, 184 и 185 в файле gamma11.m.

Если что-то не заладилось, (а система должна начать работать сразу после распаковки архива при запуске файла variables.py),  пишите на указанную ниже почту. Важно, чтобы были установлены пакеты octave, agrill CMS,  python3.

Теперь с системой просто интересно поиграть :).
А поскольку все файлы редактируемые, это хорошее пособие по программированию на Python, Octave и bash.

Как посмотреть кривые используемые видеокартой или зашитые в профиль монитора

Средства интерфейса это не делают. Но если у вас установлена системы DisplayCAL, в её составе есть утилита displaycal-curve-viewer. Достаточно запустить эту утилиту, и она покажет кривые из кустановленного профиля (если установлен), отметив чекбокс "Показывать кривые калибровки от видеокарты", вы увидите кривые, которые сами создавали в процессе калибровки.

Запуск утилиты возможен из меню и из терминала.

Обнаружена не очень приятная вещь


Интерфейс калибровки открывает тесты в том просмотрщике, который установлен по умолчанию.
Не все просмотрщики изображений правильно передают цвета. Небольшой поиск и тестирование показали, что верно передают цвета по крайней мере эти программы: gpicview и ristretto.

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

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

Как проверить цветопередачу просмотрщиком

Это не сложно. Установите пипетку для снятия цвета Gpick. С её помощью измерьте цвета на тесте, открыв его в просмотрщике (GIMP и Krita передают цвета верно).
Внизу теста есть цифры, которые обозначают количество цвета в системе RGB в процентах. Если в тёмной части теста величины для всех цветов одинаковы и соответствуют цифрам, то просмотрщик работает правильно. Если есть разница в показаниях пипетки для полей лежащих друг под другом, или пипетка показывает, что цвет не чистый, а составной, просмотрщик надо менять.

Если вы хотите чтобы таблица LUT была включена в профиль вашего монитора

Производитель монитора обычно прилагает к нему профиль созданный для этого устройства. Таблица цветопередачи может быть уже записана в него, но вас она не удовлетворяет.
Чтобы записать в профиль созданную вами таблицу её следует переформатировать из 1025 строчной в 256 строчную. 
Это может выполнить и Variables. Замените файл gamma11.m на скачанный по ссылке gamma11.m.
Теперь вместе с 1025 строчной таблицей LUT_Octave.cal будет формироваться и 256 строчная 256.txt эта таблица читается Калибриллой.
Скачайте программу Калибрилла (ссылка в конце статьи). Программа разработана для Windows, но работает и в Linux через Wine.
С помощью этой прогрпммы запишите вашу таблицу в профиль.
Если профиль ещё не установлен в системе, выполните действия по статье из второй ссылки под статьёй.
Если профиля нет, то можно его создать с помощью displaycal-synthprofile или Калибриллы. В качестве цветового пространства необходимо использовать sRGB (Калибрилла его применяет самостоятельно).
Цветовое пространство и цветовой охват sRGB применяется для изображений в интернете. Фотографии для печати также обычно готовят в этом цветовом пространстве.

Для тех, кому интересна математика метода


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

В формулы включены переменные в том виде, в котором они показаны на форме интерфейса.
Все видимые переменные выделены. Формула применяется отдельно к каждой цветовой кривой и показывает зависимость y=f(x), которую и видим на графике в форме интерфейса.

Y=C*f(tk)*f(Gt)*CD*((X^(G+Gall)+D+Dall)

В формуле присутствуют три функции:

CD=(1-exp(-1*ConK*X));

f(tk) f(Gt)
if(tk <= 0))
fr(tk) = 1;
fg(tk) = exp(0.0003*tk);
fb(tk) = exp(0.00063*tk);

else
fr(tk) = exp(-0.0006*tk);
fg(tk) = exp(-0.0003*tk);
fb(tk) = 1;
end
if(Gt<=0)
fr(Gt)=1;
fg(Gt)=1;
fb(Gt)=exp(0.0006*Gt);

else
fr(Gt) = exp(-0.0006*Gt);
fg(Gt) =1;
fb(Gt) = exp(-0.0006*Gt);
end

Реальные физические величины возникают когда на основе этих формул формируется матрица значений 4x1024, а значения из матрицы попадают в файл LUT_Octave.cal, данные из которого попадают в видеокарту.

На последок "художественная" композиция созданная посредством интерфейса
Композиция
Новая версия интерфейса без применения Octave описана здесь.

Полезные ссылки:

1. Сайт программы Калибрилла

2. Об управлении цветом в Linux (с описанием правильного подключения принтера)

3. Сайт системы DisplayCal.

4. Сайт программы AgrillCMS.

5. Описание dispwin

6. Сайт программы Octave

000000

Вопросы принимаются по Email:
tx-mm@mail.ru 


Фотокружок