отрегулируйте яркость изображения - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь отрегулировать среднюю яркость изображения с помощью imagemagick.Я преобразовал размер и цвет изображений, чтобы они теперь были в оттенках серого, как показано ниже:

body_heavy_female_gray_resize

далее мне нужно настроить яркость каждого изображения, чтобы ониматч (для исследования).Целевое среднее значение яркости равно 189.

Я использовал этот код для получения значения яркости:

$ convert image -colorspace LAB -channel r -separate +channel -format "%[mean]\n" info:  

, что дает значение 65535 ( из этого сообщения )

Я использовал уравнение x / 65535 = 189/255, чтобы понять, какова моя цель для изображений высокого качества: 48 573.

В настоящее время изображение выше 29319.5

Есть лиспособ отрегулировать это значение и установить его на 48573 в командной строке?

Я пытался:

convert image -colorspace LAB -channel r -evaluate set 48573

И

convert image -colorspace LAB -channel r -evaluate set "48573"

И

Я пытался изменить окончательное число на 189, 89 и .89 (в случае, если я был в неправильных измерениях) каждый раз, когда ошибка была в указанном числе.

> convert:  `.89' @ error/convert.c/ConvertImageCommand/3272

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

целевое изображение:

Я запустил следующий скрипт:

target_percent_luminance=74.12
hundred=100
echo "working on ${target_pic}"
gray_mean_val=$(magick identify -verbose      ${target_pic} | grep mean | awk '{print $2}' | sed -n '1p')
percent_gray_mean_val=$(echo     $hundred\*$gray_mean_val/255 | bc)
echo $percent_gray_mean_val 
difference=$(echo 74.12-$percent_gray_mean_val | bc)
echo $difference
magick convert ${target_pic} -modulate ${difference}% ${target_pic}_luminance.jpg

Каждая строка работала - вывод:

casey$ target_percent_luminance=74.12
casey$ hundred=100
casey$ echo "working on ${target_pic}"
working on F201_background_gray_resized.jpg
casey$ gray_mean_val=$(magick identify -verbose  ${target_pic} | grep mean | awk '{print $2}' | sed -n '1p')
casey$ percent_gray_mean_val=$(echo $hundred\*$gray_mean_val/255 | bc)
casey$ echo $percent_gray_mean_val 
40
casey$ difference=$(echo 74.12-$percent_gray_mean_val | bc)
casey$ echo $difference 
34.12
casey$ magick convert ${target_pic} -modulate ${difference}% ${target_pic}_luminance.jpg

Но вот выходное изображение , которое кажется слишком темным.Кто-нибудь может увидеть ошибку?

Используя приведенный ниже ответ GeeMac, я написал:

casey$ input=F201_background_gray_resized.jpg
casey$ magick $input -brightness-contrast "%[fx:${lumin}-(mean*100)]" ${input}_lumintwo.jpg

и получил это изображение , которое выглядит лучше!

1 Ответ

0 голосов
/ 24 октября 2018

Если вы используете IM7, вы можете сделать много вычислений непосредственно в команде "magick ...".Эта команда, например, читает входное изображение и регулирует яркость так, чтобы у выходного изображения было среднее значение 74,12% ...

lumin=74.12

magick input.jpg -brightness-contrast "%[fx:${lumin}-(mean*100)]" output.jpg

Я не знаю, как это сравнить с выполнением настроек с помощью "-модулировать N ", но когда я проверяю вывод с помощью этого ...

magick output.jpg -format "%[fx:mean*100]\n" info:

... результат равен" 74.1219 "или какому-либо значению $ {lumin}.Это может дать вам другой подход к рассмотрению.

...