|
|
Задание №2, статистическая цветокоррекция
Начало: 7 марта 2005 года
Конец: 23 марта 2005 года
Автор задания:
Масленникова Алла, prozerpina @ newmail.ru
Изучить наиболее употребительные цветовые модели,
реализовать программу, осуществляющую статистическую цветокоррекцию изображения.
Рассмотрим задачу, цель которой придать целевому изображению колорит некоторого другого изображения так,
чтобы целевое изображение выглядело естественным и сохранило свои особенности (композицию, контрастность, светотень).
Пример 1:
Пример 2:
Метод решения поставленной задачи основан на использовании статистических данных.
Суть метода
Итак, заданы целевое изображение и изображение-источник цвета. Метод заключается в том, что прежде всего вычисляются математическое ожидание E и дисперсия цвета D на обоих изображениях для каждого цветового канала
(цветовое пространство, в котором заданы изображения, изначально не уточняется):
где С - данный цветовой канал j-го пиксела в заданном цветовом пространстве;
n - количество пикселов данного изображения;
E - математическое ожидание;
D - дисперсия;
индексы s, t означают принадлежность соответственно изображению-источнику цвета и целевому изображению.
Алгоритм состоит в том, что к каждому каналу каждого пиксела целевого изображения применяется следующее преобразование:
После применения алгоритма матожидание цвета целевого изображения
становится равным матожиданию изображения-источника цвета. Аналогично меняется дисперсия. Или, другими словами, гистограмма целевого
изображения сдвигается и растягивается.
Алгоритм сам по себе прост и может выполняться в любом цветовом пространстве,
но результат его работы достаточно сильно зависит от выбора пространства.
Выбор цветового пространства
Итак, почему не стоит использовать произвольное цветовое пространство и как выбрать подходящее?
Прежде всего хотелось бы определить общие требования к рабочему цветовому пространству.
Следующий список представляется разумным:
- Равномерность - это требование означает, что при одинаковых изменениях численного значения цвета одинаково меняется и зрительное восприяти цвета. Это важно в описываемом методе, т.к. значения цветов меняются пропорционально (см. формулу преобразования каждого канала).
- Низкий уровень корреляции между каналами - обеспечивается максимально малая вероятность возникновения артефактов при изменении значения одного канала.
Авторы метода показывают, что применение алгоритма в часто используемых цветовых пространствах не дает хороших результатов,
т.к. эти пространства не отвечают перечисленным требованиям. Поэтому было предложено цветовое пространство Rudermann et al. lab (l - яркость, a и b - цветовые компоненты) [2].
Пространство Rudermann et al. lab, связь с RGB
Т.к. изображение в подавляющем большинстве случаев хранится в формате RGB, рассмотрим перевод из RGB в lab и обратно.
Переход из RGB в lab:
- Шаг 1. Переход из RGB в вещественной нормировке (т.е. все компоненты меняются от 0 до 1) в коническое пространство LMS,
т.к. lab - его модификация:
- Шаг 2. Перевод LMS в lab:
Переход из lab в RGB:
- Шаг 1. Переход из lab обратно в LMS.
- Шаг 2. Переход из LMS в RGB.
Примеры перекраски:
Замечания:
- Обратите внимание, что в формулах перевода пространство RGB
задано в вещественной нормировке, т.е. каждая компонента меняется от 0 до 1.
- В формулах перевода RGB в lab присутствует логарифмирование, поэтому нужно исключить 0 из области значений компонент,
например, считать минимально допустимым значением 0.01176 (т.е. 3/255).
- Чтобы избежать возникновения нежелательных артефактов (выход из области допустимых значений) при получении
результирующего RGB-изображения, нужно перед переходом из RGB в lab сжать все компоненты так,
чтобы белому соответствовало значение около 0.92157 (235/255), т.е. просто умножить на соответствующее число.
А перейдя из lab в RGB восстановить исходный масштаб.
Оба изображения должны задаваться пользователем и помечаться так, чтобы было видно, где источник, а где целевое изображение.
Должна быть возможность одновременно увидеть источник цвета, целевое изображение и результат перекраски.
Обязательно должны быть учтены особенности, описанные в замечаниях.
- Загрузка и отображение BMP-файлов (достаточно работать с непалитровым форматом).
- Реализация описанного алгоритма в пространстве Rudermann et al. lab.
Оценка за выполнение обязательной части 9 баллов
Пособие по созданию простейшей программы, загружающей, выводящей и сохраняющей изображение в формате BMP, можно посмотреть здесь.
- Применение алгоритма в цветовом пространстве HSL. 2 балла
- Возможность изменять каналы рабочего цветового пространства (lab и/или HSL) как одновременно, так и по отдельности, 2 балла
- Возможность изменять/не изменять контраст при перекраске (т.е. в формуле преобразования цвета каждого пиксела либо умножать отклонение этого пиксела от среднего, либо нет), 2 балла
- Высокая скорость работы алгоритма, удобный и красивый интерфейс, 1-2 балла
Архив исходных картинок для тестирования можно взять здесь.
Архив результирующих картинок для тестирования можно взять здесь.
Архив картинок из исходной статьи об алгоритме здесь. Результат работы программы может не достигать полного сходства с изображениями из архива, но должен быть похож.
- Переход из RGB в HSL и обратно.
- Пособие по созданию простейшей программы, загружающей, выводящей и сохраняющей изображение в формате BMP
- Статья о цветокоррекции в журнале лаборатории
- Исходная статья об алгоритме, pdf
- Описание bmp-файлов: краткое, подробное
Замечание: если ширина bmp-картинки не кратна 4, то в bmp-файле строки дополняются нулевыми элементами до длины, кратной 4.
Оформление не отличается от обычного.
ZIP-архив с исходными текстами и исполняемыми файлами, названный
по схеме GZV_nnnnnnnn.zip (где G - последняя цифра номера группы, Z - номер задания, V - номер версии задания, nnnnnnnn
- номер студенческого билета) присылайте на assign2@graphics.cs.msu.su
Например, студент 206 группы с номером студенческого билета 06529042, сдающий обновленную (вторую) версию программы по
первому заданию, должен прислать архив с именем 612_06529042.zip.
Также смотрите здесь, какие
файлы нам присылать и как их оформить Советуем очень внимательно
прочитать весь FAQ
Не забудьте положить в архив файл readme.txt. В файле описать интерфейс програмы (алгоритм
работы с программой, пункты меню, управляющие клавиши) и указать следующие
подзадания:
Реализация алгоритма: [+/-]
Применение алгоритма в цветовом пространстве HSL: [+/-]
Возможность изменять каналы как одновременно, так и по отдельности: [+/-]
Возможность изменять/не изменять контраст при перекраске: [+/-]
Работа с программой: [алгоритм работы с программой]
Результаты смотрите в интернете и/или на стенде около комнаты 703
Все вопросы и комментарии присылать автору задания (prozerpina @ newmail.ru) или задавать в форуме. Ответы на наиболее часто
задаваемые вопросы будут отражены в разделе ЧаВо по заданию
Примечания
- Задание выполняется строго индивидуально. За совместную работу
или обмен кусками кода ставится ноль баллов всем участникам,
если факт командной работы не был указан в readme.txt заданий.
- Рекомендуется написание программы под семейство ОС Windows.
Написание под другие операционные системы нежелательно и может
вызвать задержки с проверкой таких работ.
Я не умею программировать под ОС Windows, а в задании сказано, что писать нужно под эту операционную систему. Что делать?
Учиться, тем более что к курсу прилагаются материалы по
программироваю под Win32 для начинающих. Также в магазинах очень много книг, а интернете - много информации, а учиться не
составляет большой проблемы. Но не откладывайте это на потом. Первые задания достаточно легкие и предполагают изучение. В
дальнейшем у вас может просто не хватить времени. В библиотеке курса вы можете найти подробное
пособие по программированию под ОС Windows - вот прямая ссылка. К пособию прилагаются примеры
кода простейших программ, написанных в средах Visual C++ 6.0, Delphi 5 и CBuilder 5.
Произведение матриц преобразования lab к L'M'S' должно быть обратным к произведению матриц преобразования L'M'S' к lab. Почему оно так странно выглядит?
Такой неочевидный результат получился после применения к "правильному" матричному произведению некоторой цепочки преобразований.
В ближайшее время эти преобразования будут приложены к ответу на этот вопрос, а пока
будет понятнее, если посмотреть исходную статью и попробовать получить этот результат самостоятельно.
Что будет с теми кто пришлет плагиат?
Будут ставиться отрицательные баллы всем владельцам одинаковых работ.
Берегите ваши работы от нечистоплотных любителей халявы.
А я - чиста реальный пацан (дивчонка). Я типа не учицца сюда пришол (пришла), а чиста
за дипломом. Мне типа ваш машграф савершенна не нужин. Мне тут адин товарищ
за деньги прогу написал, тока я ниче в ней не понимаю. Че будет если меня
вызавут, спросют че там где, а я не отвечу?
Всем, кто не разбирается в том, что он сдал (как в алгоритмах, так и в программе)
будет ставиться -5 баллов. Специально для "реальных людей" часть студентов (случайным образом выбранных)
будет приглашена на собеседование.
Что такое возможность изменять контраст при перекраске?
Под возможностью менять/не менять контраст изображения подразумевается вот что:
исходная формула преобразования выглядит так:
Cnew = Es + (Ct - Et) * K,
где K = Ds / Dt ,
в этом случае контраст меняется.
Чтобы контраст не менялся нужно K = 1.
К каким каналам относится пункт "Возможность изменять каналы как одновременно, так и по отдельности"? RGB или lab?
В этом пункте имеются в виду каналы рабочего цветового пространства, т.е. lab [HSL - хорошо бы =), но необязательно].
|