Фильтр "Сделайте мне так же"
fotoforge — 03.05.2010 Надеюсь, по теме сообщества...У многих, наверное, бывала такая ситуация: возился с какой-то фотографией, крутил ее, вертел, цвета настраивал, настроил, сохранил... и успешно забыл, что с ней делал. Попытался на следующий день сделать то же самое с другой - не вышло.
Случалось?
Вот у меня случалось, и не раз. Надоело, и решил попробовать немного с сей проблемой побороться. В результате пробы получилась нижепредлагаемая программулька.
Программа восстанавливает преобразование по исходнику и результату и позволяет это преобразование применять к другим картинкам. Пока что реализован только самый примитивный подход: восстанавливаются лишь те пробразования, которые могут быть описаны кривыми RGB. Реализовывать ли дальше - вопрос времени, лени и того, интересно ли это вообще кому-нибудь, кроме меня.
Под катом приводится описание и ссылки на нынешнюю версию, а в результате интересует вопрос: продолжение кому-нибудь нужно?
Или, может, я вообще ломлюсь в открытую дверь, и что-то подобное давно уже существует?
Итак, жила-была фотография...
Допустим, что по некоторой прихоти захотелось мне придать ей следующее цветовое решение. По какой причине могло подобное захотеться - оставим за кадром. Может, головой ударился?
Для этого к картинке был применен набор кривых:
Набор простой, но, допустим, забылся он. А теперь хочется "то же самое" сделать с другими картинками, снятыми в другое время в другой стране, да и вообще, какая разница, где и когда.
Здесь-то и приходит на помощь программка (рабочее название Filter Wand):
Интерфейс, на мой взгляд, более чем очевиден и особых пояснений не требует. Загружаем старую картинку "до" (Load source), загружаем ее же "после" (Load product), запускаем восстановление фильтра (Generate filter). Получив сообщение "Filter generation successfull", либо сохраняем его для будущего использования, либо сразу переходим к обработке новых картинок. Загружаем новую картинку "до" (Select target), применяем сгенеренный фильтр (Apply filter) и получаем новую картинку, обработанную "так же, как старые". Сохраняем результат (Save result as).
Пример использования восстановленного фильтра на основе тех самых приведенных выше картинок (заодно и с перепроверкой на исходнике):
верхний ряд - исходные фотографии;
средний ряд - фотографии, обработанные "восстановленным" фильтром;
нижний ряд - фотографии, обработанные исходно известным набором кривых, т.е. те, которые должны были бы получиться, если бы "позабытое" преобразование не было забыто.
При использовании безпотерьных форматов картинки в двух нижних рядах совпадают полностью.
Для джипегов, естественно, некоторые отличия найти можно, но на глаз они не заметны при всем желании.
Пара замечаний:
1. После того, как фильтр будет сгенерен, программа выдаст статистику. Особого внимания на нее обращать не стоит, но идеально подогнанный фильтр выглядит так: "[Coverage: 100%. Max inconsistance: 0. Max deviation: 0. Mid deviation: 0]". Если Max inconsistance отличен от нуля - значит, преобразование не описываемо полностью кривыми RGB (или был использован формат с потерями).
2. Программа работает только с числовыми значениями RGB, НЕ принимая во внимание профили. Следите, чтобы source и target имели один профиль. В результирующий файл профиль записан не будет, но все числовые значения будут в том же профиле, что имел целевой файл (target).
3. Настройки сохранения результирующего файла не предусмотрены, но для всех форматов, в которых это возможно, используется сохранение с максимальным качеством. Формат определяется расширением (при неуказанном расширении будет сохранен BMP).
4. Поддерживается только 8-битные цветовые каналы. По идее, 16-битные автоматически ужимаются, но реально работу с ними не тестировал особо.
Ссылки для скачивания:
Скачаль целиком программу можно здесь (5 МБ).
Если вдруг у вас уже есть библиотеки от Qt SDK 2010.02.1, можно скачать один EXE-шник - здесь (185 КБ).
UPD: Судя по многочисленным отзывам, программа прекрасно пашет на всех моих домашних компах, но ни на чьих больше :) Сорри, завтра проверю на работе, что за фигня творится, обновлю пост.