Выведите вычисленную гамму в ImageMagick -опция автоматической настройки

#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.