2016-10-05 3 views

ответ

2

Если я правильно помню, -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 language для вычислить.

identify -format '%[fx:ln(mean*QuantumRange)/ln(0.5)]' rose: 
#=> -14.7219 
+1

Nice one! Или вы можете сделать ** ImageMagick ** делать математику тоже ... 'ident -format '% [fx: ln (mean * 65535)/ln (0.5)]' rose:' –

+0

Это швы странные с отрицательным gamme, разве это не просто обратное? gamma = log (0,5)/log (pixel_mean) –

+0

Я считаю, что негативные корректировки гаммы ожидаются. В конце концов, некоторые изображения будут светлее, а другие будут затемнены. Оформить заказ [LevelPixel] (https://github.com/ImageMagick/ImageMagick/blob/master/MagickCore/enhance.c#L2369) & [gamma_pow] (https://github.com/ImageMagick/ImageMagick/blob/master/ MagickCore/enhance.C# L1777), чтобы узнать, как будет применяться значение. – emcconville

2

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

gamma=log(mean)/log(0.5) 

к каждому образцу. Я никогда не пробовал это только сейчас, но он очень хорошо работает на сильно недоэкспонированной фотографии в этом question.

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

Смежные вопросы