Курсы лаборатории компьютерной графики
Обязательный полугодовой курс ВМиК МГУ
     

Задание №2, статистическая цветокоррекция

Начало: 30 марта 2005 года
Конец: 13 апреля 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 восстановить исходный масштаб.
  • Если после преобразования какой-либо канал результирующего пиксела в цветовом пространстве RGB принимает значение большее 255 или меньшее 0, то рекомендуется просто "обрезать" его по соответствующей границе. Например, если получился цвет (134, 358, -56), то заменяем его на (134, 255, 0).


Требования к программе

Оба изображения должны задаваться пользователем и помечаться так, чтобы было видно, где источник, а где целевое изображение. Должна быть возможность одновременно увидеть источник цвета, целевое изображение и результат перекраски. Обязательно должны быть учтены особенности, описанные в замечаниях.

Обязательная часть:

  • Загрузка и отображение BMP-файлов (достаточно работать с непалитровым форматом).
  • Реализация описанного алгоритма в пространстве Rudermann et al. lab.
Оценка за выполнение обязательной части 9 баллов
Пособие по созданию простейшей программы, загружающей, выводящей и сохраняющей изображение в формате BMP, можно посмотреть здесь.

Дополнительные возможности:

  • Применение алгоритма в цветовом пространстве HSL. 2 балла
  • Возможность изменять каналы рабочего цветового пространства (lab и/или HSL) как одновременно, так и по отдельности, 2 балла
  • Возможность изменять/не изменять контраст при перекраске (т.е. в формуле преобразования цвета каждого пиксела либо умножать отклонение этого пиксела от среднего, либо нет), 2 балла
  • Удобный и красивый интерфейс, 1-2 балла

Изображения для обработки

Архив исходных картинок для тестирования можно взять здесь.
Архив результирующих картинок для тестирования можно взять здесь.
Архив картинок из исходной статьи об алгоритме здесь. Результат работы программы может не достигать полного сходства с изображениями из архива, но должен быть похож.

Ссылки:

  1. Переход из RGB в HSL и обратно.
  2. Пособие по созданию простейшей программы, загружающей, выводящей и сохраняющей изображение в формате BMP
  3. Статья о цветокоррекции в журнале лаборатории. Внимание! Формулы в статье по этой ссылке содержат опечатки. Правильные формулы приведены в описании алгоритма на этой странице, см. выше раздел "Теория".
  4. Исходная статья об алгоритме, pdf
  5. Описание bmp-файлов: краткое, подробное
    Замечание: если ширина bmp-картинки не кратна 4, то в bmp-файле строки дополняются нулевыми элементами до длины, кратной 4.

Оформление

Оформление не отличается от обычного.

ZIP-архив с исходными текстами и исполняемыми файлами, названный по схеме aZV_nnnnnnnn.zip (где Z - номер задания, V - номер версии задания, nnnnnnnn - номер студенческого билета, a - буква "a" (латинским шрифтом)) присылайте на assign2@graphics.cs.msu.su

Например, студент с номером студенческого билета 06529042, сдающий обновленную (вторую) версию программы по первому заданию, должен прислать архив с именем a12_06529042.zip.

Также смотрите здесь, какие файлы нам присылать и как их оформить Советуем очень внимательно прочитать весь FAQ

Не забудьте положить в архив файл readme.txt. В файле описать интерфейс програмы (алгоритм работы с программой, пункты меню, управляющие клавиши) и указать следующие подзадания:

Реализация алгоритма: [+/-]
Применение алгоритма в цветовом пространстве HSL: [+/-]
Возможность изменять каналы как одновременно, так и по отдельности: [+/-]
Возможность изменять/не изменять контраст при перекраске: [+/-]
Работа с программой: [алгоритм работы с программой]

!Внимание: обратите внимание на правильное именование и структуру архива с работой, а также на содержание файла readme.txt. Если ваша работа не будет соответствовать требованиям, баллы могут быть снижены.

Результаты работы

Результаты смотрите в интернете
Все вопросы и комментарии присылать автору задания (prozerpina @ newmail.ru) или задавать в форуме. Ответы на наиболее часто задаваемые вопросы будут отражены в разделе ЧаВо по заданию

Примечания

  1. Задание выполняется строго индивидуально. За совместную работу или обмен кусками кода ставится ноль баллов всем участникам, если факт командной работы не был указан в readme.txt заданий.
  2. Рекомендуется написание программы под семейство ОС 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 - хорошо бы =), но необязательно].
Главная | О курсе | Лекции | Библиотека | Задания | Оценки | FAQs | Форум
  (с) Лаборатория компьютерной графики, 1997-2005
Дизайн: Алексей Игнатенко