Хромакей с зеленым экраном с использованием ImageMagick

Я искал хороший алгоритм для хроматического ключа зеленого экрана, используя ImageMagick, но пока не получил удовлетворительного ответа.

Я хотел бы изучить простой метод использования выбора диапазона по цветовому пространству HSV/HSB (аналогично -fuzz), чтобы выбрать нужный зеленый цвет и сделать его прозрачным. Кажется, что -fuzz применяется только в пространстве RGB, что нежелательно.

Может ли кто-нибудь научить меня, как выбирать цвет с отдельным диапазоном для компонентов H, S, V, например, оттенок 115-125 градусов, насыщенность 40%-60% и значение 30-80%.

Если есть другой лучший алгоритм хроматического ключа, ваш совет также высоко ценится.

Заранее спасибо.

1 ответ

FX от Imagemagick может быть использован для генерации альфа-канала. hue, saturation, lightness& luma ключевые слова существуют, но вам нужно рассчитать цвет value по максимуму (r, g, b).

hueMin=115/360;
hueMax=125/360;
saturationMin=0.40;
saturationMax=0.60;
valueMin=0.30;
valueMax=0.80;
value = max( r, max( g, b ) );
(
  ( hue > hueMin && hue < hueMax ) && (
  ( saturation > saturationMin && saturation < saturationMax ) || 
  ( value > valueMin && value < valueMax ))) ? 0.0 : 1.0

Сохранение вышеупомянутого в файл с именем hsl-greenscreen.fx и выполнить его для изображения с помощью:

convert source.png -channel alpha -fx @hsl-greenscreen.fx out.png

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

Другим вариантом будет применить тот же -fuzz варианты, но на каждом канале HSV. Просто разделите и клонируйте каждый канал, примените -fuzz против целевого серого и составьте маску изображения.

convert source.png -colorspace HSV -separate +channel \
  \( -clone 0 -background none -fuzz 5% +transparent grey32 \) \
  \( -clone 1 -background none -fuzz 10% -transparent grey50 \) \
  \( -clone 2 -background none -fuzz 20% -transparent grey60 \) \
  -delete 0,1,2 -alpha extract -compose Multiply -composite \
  -negate mask.png

Затем назначьте маску в качестве альфа-канала изображения

convert source.png mask.png -alpha Off -compose CopyOpacity -composite out.png
Другие вопросы по тегам