Как оценить оптимальный параметр гаммы для гамма-коррекции? - PullRequest
1 голос
/ 03 августа 2020

Можно ли оценить оптимальный параметр гаммы для гамма-коррекции алгоритмом с использованием некоторой статистики изображения? Под «оптимальным» я подразумеваю, что изображение должно «хорошо выглядеть» для человека в среднем после исправления.

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

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

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

При этом показатель гамма также используется полным эмпирическим способом для усилить или ослабить темные тона, и наоборот. Априори концепция «оптимальной» гамма-экспоненты весьма субъективна и будет различаться в зависимости от атмосферы, которую вы хотите придать своему изображению, и в зависимости от конкретного объекта.

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

Также ознакомьтесь с методом «спецификации гистограммы».

3 голосов
/ 03 августа 2020

Если ваши пиксели изображения масштабируются в диапазоне 0..255, вы можете использовать:

gamma = log(mean)/log(128)

, где mean - среднее значение пикселей вашего изображения. Если они масштабируются в диапазоне 0..1:

gamma = log(mean)/log(0.5)

Обратите внимание, что это метод, который использует ImageMagick , документация здесь , и вы можете протестировать это можно сделать самостоятельно в командной строке, набрав:

magick input.jpg -auto-gamma result.jpg

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

...