Думал справится с вашей проблемой за пару часов, а провозился почти целый день.
Видимо я еще не совсем знаток IM.
Вот рецепт:
convert -contrast-stretch 21 -quality 100 sample_src.jpg sample_contrast.jpg
convert -modulate 100,111,95 sample_contrast.jpg sample_hue_sat.jpg
convert sample_hue_sat.jpg -channel red -separate sample_red.jpg
convert sample_hue_sat.jpg -channel green -separate sample_green.jpg
convert sample_hue_sat.jpg -channel blue -separate sample_blue.jpg
#в преобразовании цветовых каналов используеться полиномная кривая в интервале от 0 до 1
convert sample_red.jpg -function Polynomial '-2.63585, 3.49452, 0.14132, 0' sample_red_level.jpg
convert sample_green.jpg -function Polynomial '-0.4, 0.3, 1, 0' sample_green_level.jpg
convert sample_blue.jpg -function Polynomial '0.72549, 0.13725' sample_blue_level.jpg
convert sample_red_level.jpg sample_green_level.jpg sample_blue_level.jpg -channel RGB -combine sample_level_result.jpg
convert -modulate 100,68,91 sample_level_result.jpg sample_level_result_hue_sat.jpg
convert sample_level_result_hue_sat.jpg -background black -vignette 0x5 sample__happy_end.jpg
Единственное, что я не успел доделать, это затемнение по краям.
Если надо будет, то завтра допишу и отвечу на возникшие вопросы.