В основе метода лежит фильтр Blur -> Average. Тема не новая, описывается во многих статьях: здесь, здесь или например здесь. Кто про неё в курсе, может сразу переходить к части, про то как все это дело можно автоматизировать, если же вы не знаете, я вкратце опишу его впервой части.
Как обычно, для привлечения внимания картинка, было - стало.
Хотелось бы сразу отметить, что метод не является решением всех проблем с балансом белого, но как начальная цветокоррекция вполне сойдет, скрипт же подойдет, если вам надо привести в более-менее адекватное состояние сразу много картинок.
Итак у нас есть снимок, фотография так себе, да еще и сделана в тени и зимой, в кадре много снега и автоматика сходит с ума. Слева вы видите кадр с балансом белого как он был, справа этот же кадр с автоматическим балансом белого из RAW-конверторе, видно, что особо лучше не стало.
Дальше действия довольно просты, делаем дубликат слоя, затем применяем к нему Filter -> Blur -> Average. Получаем паразитный цвет в фотографии. Далее создаем корректирующий слой кривых, выбираем пипетку для точки серого, на картинке я выделил красным, и тыкаем на паразитный цвет.
Дальше отключаем видимость слоя с фильтром, и получаем вот такую картинку. Идеала не получилось, но всё-таки лучше чем было, при желании видимость корректирующего слоя можно уменьшить.
Теперь про автоматизацию, к сожалению фотошоп не записывает в Action пипетку, либо я про это не знаю и шел сложным путем. Я даже задавал вопрос в сообществе ru_photoshop, но никто мне ничем не помог и пришлось искать решение самому. Не то, чтобы очень мне это надо было, но очень хотелось задачу решить. Так как Action тут пасовал, пришлось писать скрипт для фотошопа. Скачать его можно по этой ссылке (8Kb).
Инсталяция довольно простая, достаточно его скопировать по пути C:\Program Files\Adobe\Adobe Photoshop CS(ваша версия)\Presets\Scripts и перезапустить фотошоп. Ссылка на скрипт появится в закладочке File -> Scripts. Я не проверял на совместимость с другими версиями, но на CS5, все работает нормально.
Скрипт работает по той же схеме: делает дубликат активного слоя, применяет фильтр, вычисляет цвет пикселя этого слоя, затем высчитывает среднюю яркость, удаляет слой с фильтром и создает корректирующую кривую с нужными параметрами. Я не совсем понял фотошопный алгоритм выбора серой точки в кривых по цвету, но скрипт выдает результат практически идентичный. Запуск скрипта можно без проблем записать в Action.
Всем спасибо за внимание, надеюсь кому пригодится.
з.ы. Уже после того как я написал скрипт сам, я наткнулся на эту ссылку. Там реализован этот же метод, но на корректирующем слое Levels, ну и точки для коррекции там считаются немного по другому, добавил на случай вдруг кому ссылка пригодится :)