Как масштабировать пиксели на изображении для регулировки яркости?

StackOverflow https://stackoverflow.com/questions/1904865

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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


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

Это было полезно?

Решение

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

Формула для настройки гаммы, когда входные данные находятся в диапазоне (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.

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


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

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

Если вы примените этот закон, вы можете определить, что гамма-коррекция изменяется, поэтому можно применять гамма-коррекцию к уже скорректированным значениям.—НР

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top