Как масштабировать пиксели в изображении, чтобы отрегулировать яркость? - PullRequest
5 голосов
/ 15 декабря 2009

У меня есть изображение в градациях серого с фотографии. Я определил, что некоторые части изображения недостаточно освещены, и что пиксель с яркостью Y = 0,8 должен быть на самом деле настроен на 90% серого, то есть этому пикселю должна быть присвоена яркость 0,9. У меня вопрос как мне масштабировать остальные пиксели поблизости? Я почти уверен, что умножать все яркости на 9/8 неправильно, потому что я смутно помню, что слышал это, чтобы выглядел равномерное, масштабирование должно быть нелинейным. Но у меня проблемы с поиском уравнения, которое позволило бы мне добиться прогресса. (Конечно, я на самом деле пишу программу, чтобы сделать эту настройку для большого количества фотографий.)

Источником моих пикселей является формат pbmplus PGM, о котором на странице руководства написано:

Каждое значение серого представляет собой число, пропорциональное интенсивности пиксель, отрегулированный CIE Rec. 709 функция передачи гамма-излучения. (Тот передаточная функция задает гамма-число 2,2 и имеет линейный раздел для малых интенсивностей). Следовательно, нулевое значение является черным. Значение Maxval представляет CIE D65 белый и самое интенсивное значение в изображении и любом другом изображении, с которым изображение может сравниваться.

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

Я нашел связанный вопрос о создании изображения с одинаковой яркостью .


Спасибо, Шмоопти, за то, что помог мне. Я принял ваш ответ и добавил к нему некоторую информацию.

1 Ответ

6 голосов
/ 15 декабря 2009

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

Формула для настройки гаммы, когда вход находится в диапазоне (0,0, 1,0):

output = pow( input, gamma )

... где gamma будет светлее, когда меньше 1,0, и темнее, когда выше 1,0.

Чтобы увеличить значение от 0,8 до 0,9, необходимо вычислить log(0.9)/log(0.8), чтобы получить гамму 0,4722 .

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


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

(y**a)**b == y**(a*b) == y**(b*a) == (y**b)**a

Если вы применяете этот закон, вы можете определить, что гамма-коррекция коммутирует, так что все в порядке, чтобы применить гамма-коррекцию к уже исправленным значениям. & Mdash; NR

...