#imagemagick #gamma
#imagemagick #гамма
Вопрос:
Мне нужно знать уровень гамма-коррекции, который ImageMagick автоматически вычисляет, когда мы используем следующую команду
преобразовать in.jpg -авто-гамма out.jpg
Возможно ли это?
Спасибо
Ответ №1:
Если я правильно помню, -auto-gamma
вызовите AutoGammaImage
метод и примените следующее уравнение.
gamma = log(pixel_mean)/log(0.5)
Итак, чтобы вычислить, какое значение гамма-коррекции будет применено, вы можете сделать что-то вроде…
pixel_mean=$(identify -format '%[mean]' rose:)
echo "l($pixel_mean)/l(0.5)" | bc -l
#=> -14.72189
Как отметил Марк в комментариях, вы также можете использовать язык ImageMagick FX для вычисления.
identify -format '%[fx:ln(mean*QuantumRange)/ln(0.5)]' rose:
#=> -14.7219
Комментарии:
1. Отлично! Или вы можете заставить ImageMagick также выполнять математические вычисления…
identify -format '%[fx:ln(mean*65535)/ln(0.5)]' rose:
2. Странно иметь отрицательную гамму, разве это не просто обратное? гамма = log(0.5) / log(pixel_mean)
3. Я полагаю, что ожидаются отрицательные корректировки гаммы. В конце концов, некоторые изображения будут светлее, а другие — темнее. Проверьте LevelPixel amp; gamma_pow , чтобы увидеть, как будет применено значение.
Ответ №2:
-автоматическая гамма — это экспериментальный вариант. Для каждого цветового канала вычисляется среднее значение всех пикселей, затем применяется
gamma=log(mean)/log(0.5)
для каждого образца. Я никогда не пробовал это до сих пор, но это довольно хорошо работает на сильно недоэкспонированной фотографии в этом вопросе.
Что касается выяснения после преобразования, какая гамма была применена, напрямую об этом не сообщается, но вы можете использовать «идентифицировать» на исходном изображении и посмотреть на «среднее», сообщенное для каждого канала, чтобы определить гаммы, которые будут использоваться, как в ответе emcconville.