Как масштабировать пиксели в изображении, чтобы отрегулировать яркость?
У меня есть изображение в оттенках серого с фотографии. Я определил, что некоторые части изображения недостаточно освещены, и что пиксель с яркостью Y = 0,8 должен быть на самом деле настроен на 90% серого, т. Е. Этому пикселю должна быть присвоена яркость 0,9. У меня вопрос, как мне масштабировать другие пиксели поблизости? Я уверен, что умножать все яркости на 9/8 неправильно, потому что я смутно помню, что слышал, что для того, чтобы выглядеть равномерно, масштабирование должно быть нелинейным. Но у меня проблемы с поиском уравнения, которое позволило бы мне добиться прогресса. (Конечно, я на самом деле пишу программу, чтобы сделать эту настройку для очень многих фотографий.)
Источником моих пикселей является формат pbmplus PGM, о котором на странице руководства написано:
Каждое значение серого - это число, пропорциональное интенсивности пикселя, отрегулированное CIE Rec. 709 функция передачи гамма-излучения. (Эта передаточная функция задает гамма-число 2,2 и имеет линейное сечение для малых интенсивностей). Следовательно, нулевое значение является черным. Значение Maxval представляет CIE D65 белый и самое интенсивное значение в изображении и любом другом изображении, с которым изображение может быть сравнено.
Если бы я понял это лучше, у меня, вероятно, была бы лучшая идея, как поступить.
Я нашел связанный вопрос о создании изображения с одинаковой яркостью.
Спасибо Shmoopty за то, что помог мне. Я принял ваш ответ и добавил к нему некоторую информацию.
1 ответ
Вы, вероятно, захотите гамма-коррекцию, которая сохранит истинный черный и истинный белый правильные, сгибая значения между ними
Формула для настройки гаммы, когда вход находится в диапазоне (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
Если вы применяете этот закон, вы можете определить, что гамма-коррекция коммутирует, так что все в порядке, чтобы применить гамма-коррекцию к уже исправленным значениям. -NR