Баланс белого по математике для карт белого, черного и серого цвета - Фотопедия
2 голосов
/ 16 марта 2016

Этот вопрос очень близко подошел к моему ответу, но мне нужна более точная информация: Какова математика баланса белого и как его выбрать?

У меня есть изображение с белыми, серыми и черными цветными картами на заднем плане, и я хотел бы сбалансировать белое изображение (используя математику, а не кнопку "авто" из программного обеспечения для редактирования фотографий.

На моем изображении белая карта имеет значения RGB (181, 176, 141), а черная карта имеет значения (64, 61, 38).

Если я последую ответу на вопрос, который я связал выше, то я бы отрегулировал пиксели (255/181, 255/176, 255/141), чтобы сделать белую карточку действительно белой (255). Но это превратит черную карту в (90, 88, 69), а не (0, 0, 0).

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

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

squid

Ответы [ 4 ]

3 голосов
/ 16 марта 2016

Указанные вами значения являются значениями sRGB. Вы должны преобразовать обратно в линейное цветовое пространство и убедиться, что компоненты масштабируются линейно (в sRGB они также должны масштабироваться линейно до приемлемого хорошего приближения). В линейном RGB, я считаю, что белая карта (117, 110, 67), черная карта (12, 11, 4.5) и серая карта (50,5, 46,5, 19). Компоненты R и G масштабируются линейно, но не компоненты B.

Это означает, что преобразование в линейный RGB неверно, некоторая кривая тона была применена к компоненту B. Вы можете попытаться решить эту проблему, используя метод из ответа Оливье, но у вас должна получиться возможность правильно выполнить преобразование из необработанного файла в вывод (ы) RGB, в противном случае многие усилия будут направлены на устранение любых нелинейных факторов Кривая тона была применена. Затем можно просто линейно масштабировать компоненты в RGB и преобразовать в sRGB.

3 голосов
/ 16 марта 2016

Почему вы пытаетесь сопоставить 3 значения с линейным отношением?

Рассмотрим только красный канал. У вас есть 3 эталонных значения (взятых из вашей исходной фотографии): Rw для белого цвета, Rg для серого и Rb для черного.

Вы хотите найти функцию, отображающую Rb в 0, Rg в 128 и Rw в 255. С 3 ссылками вы не можете использовать линейную функцию, если вы хотите идеальное совпадение, вы должны использовать полиномиальную функцию с степень, по крайней мере, N-1, где N соответствует количеству ссылок.

Серая ссылка (здесь 128) относится к 18% серой карте (подробнее: Почему 18% серого считается в середине для фотографии? ). Это может отличаться для вашего серого.

Функция ax² + bx + c = v (1) имеет степень 2, именно то, что вы хотите для идеального соответствия («подгонки») с 3 значениями. Теперь вы хотите найти a, b и c, такие как (1), проверено для Rb, Rg и ​​Rw. Другими словами, у вас есть 3 уравнения:

  • a (Rb) ² + b (Rb) + c = 0
  • a (Rg) ² + b (Rg) + c = 128
  • a (Rw) ² + b (Rw) + c = 255

Решение этого уравнения легко (но не связано с фотографией).

Как только вы нашли a, b и c, вы можете отобразить любое красное значение на «калиброванный» красный. У вас могут быть отрицательные значения или значения больше 255. Будьте осторожны.

Пример может быть?

Если Rb = 10, Rg = 100 и Rw = 254, решение для (1) даст a = -0.002449, b = 1.6916 и c = -16.671 (нужна помощь? Wolfram Alpha ), поэтому (1) <=> f (x) = - 0,002449 * x² + 1,6916 * x-16,671.

Your mapping function

На абсциссе (ось X) лежат ваши исходные значения, на ординате (ось Y) "калиброванные" значения.

Как видите, все исходные значения ниже 10 отображаются на отрицательные значения и должны быть установлены на 0 ..., а значения за пределами 254 отображаются на значения, превышающие 255. На самом деле, интервал [0,255] отображается на [f (0), f (255)] = [-16,671,255.44].

Если вы не хотите обрезать свои значения (= потерять информацию), вам следует использовать новую функцию для сопоставления [-16.671,255.44] с [0,255]. Эта функция может быть линейной, например, ax + b.

Вы можете заменить (1) любой полиномиальной функцией степени 2, вы получите разные результаты.

Если вы действительно хотите использовать линейное отношение, скажем, ax + b = v, вам нужно найти a и b, чтобы минимизировать ошибки между ожидаемыми значениями (0, 128 и 255) и «калиброванными».

Для получения дополнительной информации о полиномиальной интерполяции, посмотрите https://math.stackexchange.com/questions/7125/polynomial-fitting-how-to-fit-and-what-is-polynomial-fitting или в Википедии (https://en.wikipedia.org/wiki/Polynomial_interpolation и https://en.wikipedia.org/wiki/Curve_fitting)

2 голосов
/ 17 марта 2016

Правильный способ сделать баланс белого - использовать только одну ссылку (белый). Если вы не можете получить желаемые результаты только с одной ссылкой, вы введете ложный цвет, только если попытаетесь использовать несколько ссылок.

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

Ваш научный способ получить приличный цвет для объекта, лежащего под слоем цветной светящейся воды, будет:

0) установить камеру на запись в формате RAW

1) настроить баланс белого с помощью белой карты, сфотографированной отдельно

2) фотографировать черно-белую карточку отдельно при одинаковом освещении в режиме ручной экспозиции с желаемой экспозицией

3) поместите их в воду и сфотографируйте их там

4) экспортировать изображения с помощью Dcraw без каких-либо изменений с помощью команды dcraw -w -T -4 -o 4 image.raw, где image.raw - фактическое имя изображения. Пример плохого экспорта из Adobe Camera RAW с полностью нейтральными настройками - вот почему вы должны использовать dcraw. (Это кривые тона, которые я ожидал быть прямыми)

dcraw -w -T -4 -o 4 *.raw также действует (все изображения будут преобразованы).

5) вы должны взять значения пикселей черно-белых пятен как отдельно, так и под водой (bS, bW, wS, wW соответственно), используя RawDigger или ImageJ, и решить систему уравнений:

bW=B*bS+T wW=B*wS+T

для каждого компонента (R, G, B)

Это даст вам T (оттенок, постоянное линейное добавление к каждому цвету, яркость воды) и B (мультипликатор баланса белого).

6) Затем, чтобы нормализовать цвет, нужно вычесть T и разделить результат на B для каждого изображения (GIMP имеет аритметические режимы для слоев, версии GIMP для разработки поддерживают 16 бит).

В итоге вы получите изображение с нормализованными цветами. Тем не менее, цвета не будут выглядеть точно так же, как сфотографированные без воды (тем не менее, цифровые камеры никогда не дают точного цвета).

Вы не получите хороших результатов, если не используете изображения RAW.

Подсказка: если ваша черная карта имеет пиксельные значения выше нуля, когда фотографируется отдельно, на самом деле она не черная, и вы не должны делать это (0,0,0).

Я готов вдаваться в подробности, как только вы признаете, что действительно готовы сделать все это.

1 голос
/ 16 марта 2016

Было несколько алгоритмов баланса белого. Философия, конечно, не о цвете предмета, а о цвете света на предмете (который мы, конечно, никогда точно не знаем, возможно, исключая яркое солнце)

Photoshop Auto Levels - более старый распространенный метод, и он выравнивает самое высокое тональное значение в трех каналах гистограммы, выравнивая эти три максимальных значения, чтобы все были одинаковыми максимальными значениями. Он имеет возможность указать границу между сигналом и шумом, по умолчанию 0,1%, что означает, что более слабые тона игнорируются. Это делает предположение, что самые яркие тона должны быть от нейтрального белого, возможно, не часто верно.

Программное обеспечение Raw имеет лучший инструмент WB, в котором мы щелкаем по известному нейтральному пятну (карточке баланса белого или даже серой карточке, включенной в тестовое изображение в том же свете), которая сообщает компьютеру «это пятно нейтрально, сделайте его будь нейтральным. " И это так, нейтральное значение, равное RGB-компонентам, то есть отсутствие цветового оттенка. Результатом является то, что спот будет иметь равные компоненты RGB среднего значения трех. Это так же верно и точно, как наша известная белая карта точно нейтральна.

В вашем примере RGB (181, 176, 141) вы бы сделали это пятно (181 + 176 + 141) / 3 = (166, 166, 166), если хотите сделать это пятно нейтральным ( без цвета). Если это пятно на этом объекте действительно было по-настоящему известным нейтральным цветом, то ваше изображение не будет иметь цветовой оттенок в этом свете.

Серые карты могут работать, даже черные могут работать, но 18% серых карт не имеют спецификации нейтрального цвета. И они довольно темные, чтобы хорошо показать цвет. Белый - хороший выбор, если он на самом деле является точным нейтральным белым. Будьте осторожны, чтобы не переэкспонировать и обрезать его.

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