Задача фурье-оптика и методы цифровой обработки изображений. Метод квантования изображения

Привлекает внимание

Например, старый добрый формат GIF использует палитру, максимум на 256 цветов. Если вы захотите сохранить серию своих селфи как gif-анимацию (кому бы это надо было), то первое, что вам, а точнее программе, которую вы будете для этого использовать, надо будет сделать – создать палитру. Можно использовать статическую палитру, например web-safe colors , алгоритм квантизации получиться очень простым и быстрым, но результат будет «не очень». Можно создать оптимальную палитру на основе цветов изображения, что даст результат наиболее визуально похожий на оригинал.

Алгоритмов создания оптимальной палитры несколько, каждый имеет свои плюсы и минусы. Я не стану утруждать читателя нудной теорией и формулами, во первых мне лень, во вторых большинству это не интересно – статью просто пролистают, рассматривая картинки.

Далее вас ждёт скучное и непонятное повествование о методе медианного сечения, алгоритму рассеивания ошибок (шума квантизации) по Флойду-Стейнбергу (и не только), особенностях цветового восприятия человеческого глаза, а так же немного говно кода.

Предыстория

Давным-давно, когда Nokia была тёплой и ламповой главенствовала на рынке смартфонов, а владельцы смартфонов гордо звали себя «смартфонщики», в те стародавние времена писал я простенькие программки на python для series60. На одну из них намедни наткнулся копаясь в архивах. GifTool – программка для создания gif-анимации из набора картинок. В ней я реализовал квантизацию методом медианного сечения, алгоритм сжатия LZW, вся структура файла создавалась самостоятельно, для неизменившихся на следующем слайде пикселей использовалась прозрачность, чтобы уменьшить итоговый размер файла. Захотелось мне освежить свою память, посмотреть – как же она работала. Открыл код и … Это чувство, когда ты не можешь разобраться в своём говнокоде десятилетней давности. Про PEP8 я тогда не знал, поэтому читаемость кода была чуть менее чем никакой (тогда мне нравился минимализм, как и многим начинающим программистам). Прослезился, поплевался, отрефакторил в PyCharm, разобрался как реализовал метод медианного сечения, по быстрому накидал «грязный» скрипт. Работает! Палитра создаётся, изображение на выходе получается сносное. И тут меня закусило – смогу ли я добиться лучших результатов, чтобы картинка визуально была как можно ближе к оригиналу.


Итак – метод медианного сечения. Он прост до безобразия. Первым делом надо из всех уникальных цветов изображения составить RGB куб. Далее рассечь его по самой длинной стороне. Например, диапазон красного у нас от 7 до 231 (длина 231-7=224), зелёного от 32 до 170 (длина 170-32=138), синего от 12 до 250 (длина 250-12=238), значит, будем «резать» куб по синей стороне. Получившиеся сегменты так же рассекаем по длинной стороне и т.д. пока не получим 256 сегментов. Для каждого сегмента высчитать средний цвет – так мы и получим палитру.

Пара картинок почти в тему, для наглядности



Что здесь можно улучшить? Первое, что приходит в голову – вычислять средний цвет не тупо сложив все цвета и разделив на их количество [ sum(color) / count(color) ], а с учётом, сколько раз каждый цвет встречается в изображении. То есть каждый цвет умножаем на количество его вхождений в изображении, полученные значения складываем, результат делим на количество вхождений в изображении всех цветов данного сегмента [ sum(color * total) / sum(total) ]. В результате, наиболее часто встречаемые цвета имеют приоритет при вычислении, но и редкие цвета вносят свои корректировки, поэтому палитра получается лучше, визуальное отклонение цветов меньше. Для лучших результатов желательно ещё учитывать гамму, но я оставил это на потом. Второе не так явно – медианное сечение совсем не учитывает особенности восприятия цвета человеческим глазом. Оттенки зелёного мы воспринимаем гораздо лучше оттенков синего. Я решил исправить это недоразумение и «сплющил» куб – длины сторон помножил на коэффициенты из . В результате по зелёной и красной стороне сечений стало больше, по синей меньше. Такого решения я больше нигде не встречал (может плохо искал), но результат на лицо.

Теперь у нас есть оптимальная палитра, не идеальная конечно (я знаю, что её можно ещё улучшить), но достаточно хорошая. Следующий шаг – индексирование цветов изображения. Самый простой вариант – в каком сегменте находится цвет, такой и индекс. Быстро и просто. Но есть одно но, и даже не одно, поэтому к данному шагу мы ещё вернёмся.

Есть ещё один способ улучшить качество получаемого изображения – рассеивание ошибок. Тут тоже всё довольно просто – из индексируемого цвета вычитаем соответствующий цвет палитры, получаем ошибку, рассеиваем её по соседним пикселям в соответствии с определённой формулой (шаблоном), самая известная формула Флойда-Стейнберга, её я и использовал. При рассеивании ошибок размываются резкие переходы между цветами, и визуально кажется, что изображение содержит больше оттенков (цветов). Если интересно – про рассеивание ошибок подробно и интересно можно почитать . Этот алгоритм я так же решил допилить, помножив ошибку на всё те же коэффициенты, как оказалось, это была очень хорошая идея – так как сечений по синему диапазону стало меньше, в нём получалась значительная ошибка, и без корректировки ошибки коэффициентами рассеивание вносило много «шума».

Вот теперь можно снова вернуться к индексированию. Рассеиванием ошибок мы изменяем цвета пикселей и получаем такие, которых нет в нашем RGB-кубе (напомню, он составлен исключительно из цветов изображения). Теперь нельзя просто посмотреть в каком сегменте находится цвет, чтобы назначить индекс. Решение нашлось сразу – поиск ближайшего цвета в палитре . В данную формулу я подставил всё те же коэффициенты. Сравнивая результаты подбора цвета палитры по индексу сегмента в который входит исходный цвет и результаты поиска ближайшего цвета, наглядно увидел, что ближайший цвет часто оказывается в соседнем сегменте. Если исходный цвет находится ближе к центру сегмента – то индекс сегмента соответствует индексу цвета в палитре, но чем ближе исходный цвет к краям сегмента, тем больше вероятность, что ближайший цвет окажется в соседнем сегменте. В общем, единственный правильный путь индексирования – поиск ближайшего цвета в палитре. Но у поиска есть минус – он медленный, очень медленный. Писать числодробилку на python плохая идея.

Ну вот, хотел объяснить в двух словах, а получилась целая куча непонятной писанины. Надеюсь, код я пишу лучше, чем объясняю, поэтому вот ссылочка на github . Код несколько раз переписывался, сначала совершенствовался алгоритм, пока результат меня не устроил, потом оказалось, что он жрёт слишком много оперативы при обработке фотографий (сначала тестировал на небольших картинках), пришлось перенести RGB-куб, медианное сечение и карту пикселей в базу данных (sqlite). Скрипт работает очень медленно, но результат получается лучше, чем квантизация средствами PIL/Pillow и GIMP’ом (в нём эта операция называется индексирование).

Наглядная демонстрация:

Оригинал

Результат квантизации в GIMP, оптимальная палитра на 256 цветов + размывание цвета по Флойду-Стенбергу (нормальное)

Результат квантизации PIL/Pillow image.convert(mode="P", dither=PIL.Image.FLOYDSTEINBERG, palette=PIL.Image.ADAPTIVE, colors=256)

Результат квантизации моим кодом

На что обратить внимание: рассеивание ошибки у GIMP сильно «шумит», PIL/Pillow создает не очень оптимальную палитру и практически не рассеивает ошибки (резкие переходы между цветами).
Если не видите разницу - посмотрите другие примеры на github .


P.S.: есть замечательная программа Color Quantizer , которая справляется с данной задачей лучше и быстрее, поэтому практического смысла мой скрипт не имеет, сделан исключительно из «спортивного» интереса.
UPD: обновил проект на github . Добавил алгоритм квантизации Octree (октодерево), популярные формулы рассеивания ошибок, поиск ближайшего цвета по среднему значению красного.

Привлекает внимание

Например, старый добрый формат GIF использует палитру, максимум на 256 цветов. Если вы захотите сохранить серию своих селфи как gif-анимацию (кому бы это надо было), то первое, что вам, а точнее программе, которую вы будете для этого использовать, надо будет сделать – создать палитру. Можно использовать статическую палитру, например web-safe colors , алгоритм квантизации получиться очень простым и быстрым, но результат будет «не очень». Можно создать оптимальную палитру на основе цветов изображения, что даст результат наиболее визуально похожий на оригинал.

Алгоритмов создания оптимальной палитры несколько, каждый имеет свои плюсы и минусы. Я не стану утруждать читателя нудной теорией и формулами, во первых мне лень, во вторых большинству это не интересно – статью просто пролистают, рассматривая картинки.

Далее вас ждёт скучное и непонятное повествование о методе медианного сечения, алгоритму рассеивания ошибок (шума квантизации) по Флойду-Стейнбергу (и не только), особенностях цветового восприятия человеческого глаза, а так же немного говно кода.

Предыстория

Давным-давно, когда Nokia была тёплой и ламповой главенствовала на рынке смартфонов, а владельцы смартфонов гордо звали себя «смартфонщики», в те стародавние времена писал я простенькие программки на python для series60. На одну из них намедни наткнулся копаясь в архивах. GifTool – программка для создания gif-анимации из набора картинок. В ней я реализовал квантизацию методом медианного сечения, алгоритм сжатия LZW, вся структура файла создавалась самостоятельно, для неизменившихся на следующем слайде пикселей использовалась прозрачность, чтобы уменьшить итоговый размер файла. Захотелось мне освежить свою память, посмотреть – как же она работала. Открыл код и … Это чувство, когда ты не можешь разобраться в своём говнокоде десятилетней давности. Про PEP8 я тогда не знал, поэтому читаемость кода была чуть менее чем никакой (тогда мне нравился минимализм, как и многим начинающим программистам). Прослезился, поплевался, отрефакторил в PyCharm, разобрался как реализовал метод медианного сечения, по быстрому накидал «грязный» скрипт. Работает! Палитра создаётся, изображение на выходе получается сносное. И тут меня закусило – смогу ли я добиться лучших результатов, чтобы картинка визуально была как можно ближе к оригиналу.


Итак – метод медианного сечения. Он прост до безобразия. Первым делом надо из всех уникальных цветов изображения составить RGB куб. Далее рассечь его по самой длинной стороне. Например, диапазон красного у нас от 7 до 231 (длина 231-7=224), зелёного от 32 до 170 (длина 170-32=138), синего от 12 до 250 (длина 250-12=238), значит, будем «резать» куб по синей стороне. Получившиеся сегменты так же рассекаем по длинной стороне и т.д. пока не получим 256 сегментов. Для каждого сегмента высчитать средний цвет – так мы и получим палитру.

Пара картинок почти в тему, для наглядности



Что здесь можно улучшить? Первое, что приходит в голову – вычислять средний цвет не тупо сложив все цвета и разделив на их количество [ sum(color) / count(color) ], а с учётом, сколько раз каждый цвет встречается в изображении. То есть каждый цвет умножаем на количество его вхождений в изображении, полученные значения складываем, результат делим на количество вхождений в изображении всех цветов данного сегмента [ sum(color * total) / sum(total) ]. В результате, наиболее часто встречаемые цвета имеют приоритет при вычислении, но и редкие цвета вносят свои корректировки, поэтому палитра получается лучше, визуальное отклонение цветов меньше. Для лучших результатов желательно ещё учитывать гамму, но я оставил это на потом. Второе не так явно – медианное сечение совсем не учитывает особенности восприятия цвета человеческим глазом. Оттенки зелёного мы воспринимаем гораздо лучше оттенков синего. Я решил исправить это недоразумение и «сплющил» куб – длины сторон помножил на коэффициенты из этой статьи . В результате по зелёной и красной стороне сечений стало больше, по синей меньше. Такого решения я больше нигде не встречал (может плохо искал), но результат на лицо.

Теперь у нас есть оптимальная палитра, не идеальная конечно (я знаю, что её можно ещё улучшить), но достаточно хорошая. Следующий шаг – индексирование цветов изображения. Самый простой вариант – в каком сегменте находится цвет, такой и индекс. Быстро и просто. Но есть одно но, и даже не одно, поэтому к данному шагу мы ещё вернёмся.

Есть ещё один способ улучшить качество получаемого изображения – рассеивание ошибок. Тут тоже всё довольно просто – из индексируемого цвета вычитаем соответствующий цвет палитры, получаем ошибку, рассеиваем её по соседним пикселям в соответствии с определённой формулой (шаблоном), самая известная формула Флойда-Стейнберга, её я и использовал. При рассеивании ошибок размываются резкие переходы между цветами, и визуально кажется, что изображение содержит больше оттенков (цветов). Если интересно – про рассеивание ошибок подробно и интересно можно почитать . Этот алгоритм я так же решил допилить, помножив ошибку на всё те же коэффициенты, как оказалось, это была очень хорошая идея – так как сечений по синему диапазону стало меньше, в нём получалась значительная ошибка, и без корректировки ошибки коэффициентами рассеивание вносило много «шума».

Вот теперь можно снова вернуться к индексированию. Рассеиванием ошибок мы изменяем цвета пикселей и получаем такие, которых нет в нашем RGB-кубе (напомню, он составлен исключительно из цветов изображения). Теперь нельзя просто посмотреть в каком сегменте находится цвет, чтобы назначить индекс. Решение нашлось сразу – поиск ближайшего цвета в палитре . В данную формулу я подставил всё те же коэффициенты. Сравнивая результаты подбора цвета палитры по индексу сегмента в который входит исходный цвет и результаты поиска ближайшего цвета, наглядно увидел, что ближайший цвет часто оказывается в соседнем сегменте. Если исходный цвет находится ближе к центру сегмента – то индекс сегмента соответствует индексу цвета в палитре, но чем ближе исходный цвет к краям сегмента, тем больше вероятность, что ближайший цвет окажется в соседнем сегменте. В общем, единственный правильный путь индексирования – поиск ближайшего цвета в палитре. Но у поиска есть минус – он медленный, очень медленный. Писать числодробилку на python плохая идея.

Ну вот, хотел объяснить в двух словах, а получилась целая куча непонятной писанины. Надеюсь, код я пишу лучше, чем объясняю, поэтому вот ссылочка на github . Код несколько раз переписывался, сначала совершенствовался алгоритм, пока результат меня не устроил, потом оказалось, что он жрёт слишком много оперативы при обработке фотографий (сначала тестировал на небольших картинках), пришлось перенести RGB-куб, медианное сечение и карту пикселей в базу данных (sqlite). Скрипт работает очень медленно, но результат получается лучше, чем квантизация средствами PIL/Pillow и GIMP’ом (в нём эта операция называется индексирование).

Наглядная демонстрация:

Оригинал

Результат квантизации в GIMP, оптимальная палитра на 256 цветов + размывание цвета по Флойду-Стенбергу (нормальное)

Результат квантизации PIL/Pillow image.convert(mode="P", dither=PIL.Image.FLOYDSTEINBERG, palette=PIL.Image.ADAPTIVE, colors=256)

Результат квантизации моим кодом

На что обратить внимание: рассеивание ошибки у GIMP сильно «шумит», PIL/Pillow создает не очень оптимальную палитру и практически не рассеивает ошибки (резкие переходы между цветами).
Если не видите разницу - посмотрите другие примеры на github .


P.S.: есть замечательная программа Color Quantizer , которая справляется с данной задачей лучше и быстрее, поэтому практического смысла мой скрипт не имеет, сделан исключительно из «спортивного» интереса.
UPD: обновил проект на github . Добавил алгоритм квантизации Octree (октодерево), популярные формулы рассеивания ошибок, поиск ближайшего цвета по среднему значению красного.

Определение глубины цвета

Большинство компьютеров при отображении использует 8, 16 или 24 бит на пиксель. Этим определяется глубина цвета отображаемого изображения.

Независимо от того сколько цветов отображает система, MATLAB может запоминать и обрабатывать изображения с различным числом бит на пиксель: 224 цветов для RGB-изображений в формате uint8, 248 цветов для RGB-изображений в формате uint16 и 2159 цветов для RGB-изображений в формате удвоенной точности. Эти изображения наилучше отображаются в системе с 24-битным представлением цвета, хотя источники формирования изображений не всегда могут обеспечивать такую глубину цвета. В большинстве случаев они обеспечивают 16-битное представление цвета.

  • Описание определения глубины цвета системы
  • Описание выбора глубины цвета

Описание глубины цвета

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

Get(0,"ScreenDepth") ans = 32

MATLAB возвращает число бит на пиксель:

Значение Описание
8 8-битное представление отображается 256 цветами. 8-битные полутоновые изображения являются составной частью 24-битного представления графической информации.
16 16-битное представление обычно использует 5-бит на каждую цветовую компоненту, что равно 32 градациям (т.е. 2 5) на красную, зеленую и синюю составляющие. В результате такое представление поддерживает 32,768 (т.е., 2 15) различных цветов. Некоторые системы используют дополнительный бит для увеличения числа градаций отображаемого цвета. В нашем случае число различных цветов при 16-битном представлении равно 64,536 (т.е. 2 16).
24 24-битная визуализация использует 8 бит на каждую из трех цветовых составляющих, т.е. 256 (2 8) градаций на красную, зеленую и синюю компоненту. В результате получается 16,777,216 (т.е. 2 24) различных цветов.
32 32-битная визуализация использует 24 бита для запоминания цветовой информации а еще 8 бит используется для запоминания насыщенности (прозрачности) данных. Это так называемый альфа канал.

Описание выбора глубины цвета

В зависимости от используемой системы, можно устанавливать различные значения количества бит на пиксель. (Это может быть также связано с разрешением графических объектов. В большинстве случаев 24-битное представление обеспечивает хорошую визуализацию. Если есть необходимость использовать меньшее число бит на пиксель, то можно использовать 16-битное представление. При обработке полутоновых изображений, в большинстве случаев, достаточно 8 бит на пиксель.

Уменьшение числа цветов на изображении

В этом пункте описано метод уменьшения числа цветов в индексных или RGB изображениях. Рассмотрим также метод диффузионного псевдосмешения цветов (dithering). Этот метод использует визуальное увеличение количества цветов на изображении.

Внизу приведены краткие описания функций уменьшения цветов на изображении в приложении Image Processing Toolbox.

В системах с 24-битным отображением цвета RGB изображения могут отображаться 16,777,216 (т.е. 2 24) цветами. В системах с меньшим количеством отображаемых цветов RGB изображения также будут отображаться хорошо, потому что MATLAB автоматически использует аппроксимацию цветов и диффузионное псевдосмешение цветов.

Индексные изображения могут иметь проблемы с большим числом цветов. В основном, ограничиваются 256 цветами. Это связано со следующими причинами:

  • В системах с 8-битным отображением при визуализации индексных изображений, которые имеют больше, чем 256 цветов, применяется метод диффузионного псевдосмешения цветов (dithering), поскольку не все цвета могут быть представлены системой.
  • В некоторых системах палитра в принципе не может иметь больше, чем 256 позиций.
  • Если индексное изображение содержит больше, чем 256 цветов, MATLAB запоминает данные изображения в массив не в формате uint8, а в формате удвоенной точности. Это приводит к увеличению объема запоминаемых данных, поскольку каждый пиксель занимает 64 бита.
  • Файлы изображений больших размеров желательно записывать в формате, который использует при визуализации 256 цветов. Если при записи (с использованием функции imwrite) в этом же формате изображения имеют больше чем 256 цветов, то в дальнейшем возможны ошибки при визуализации.

Уменьшение числа цветов на индексном изображении

Использование rgb2ind

Функция rgb2ind выполняет преобразование RGB-изображения в индексное изображение, уменьшая количество отображаемых цветов. При обработке исходного изображения функция использует следующие методы аппроксимации цветов:

  • Квантование
    • Равномерное квантование
    • Квантование с наименьшей дисперсией
  • Отображение палитры

Качество результирующего изображения зависит от выбранного метода аппроксимации, диапазона цветов исходного изображения и использования метода диффузионного псевдосмешения цветов (dithering). Отметим, что результат работы методов очень зависит также от конкретного изображения.

Квантование

Квантование приводит к уменьшение количества цветов на изображении. Функция rgb2ind использует квантование как часть алгоритма уменьшения цветов. Функция rgb2ind поддерживает два метода квантования: равномерное квантование и квантование с наименьшей дисперсией.

При рассмотрении этого вопроса применяется понятие куб RGB цветов. Куб RGB цветов представляет собой трехмерный массив всех цветов, которые определены для этого типа данных. Поскольку изображения в MATLAB могут быть представлены в различных форматах (uint8, uint16 или double), то это будет влиять на дискретизацию цветов в кубе RGB.

Равномерное квантование. Для выполнения равномерного квантования используется функция rgb2ind с соответствующими параметрами.

Внизу приведен пример равномерного квантования. Второй аргумент влияет на дискретность квантования.

RGB = imread("peppers.png"); = rgb2ind(RGB, 0.1);

На изображении продемонстрировано равномерное квантование изображения, представленного в формате uint8. Для удобства на изображении показан двухмерный срез цветового куба, где красный цвет равен 0, а диапазон зеленого и голубого равен .

Квантование с наименьшей дисперсией. Для реализации квантования с наименьшей дисперсией используется функция rgb2ind с указанием максимального числа цветов на результирующем изображении. Это число определяет количество ячеек, на которое будет разбит цветовой куб RGB. Рассмотрим пример реализации метода квантования для создания индексного изображения с использованием 185 цветов.

RGB = imread("peppers.png"); = rgb2ind(RGB,185);

В основу метода квантования с наименьшей дисперсией положено объединение пикселей в группы на основании отклонений между их значениями. Т.е. выбранный пиксель должен иметь наименьшее суммарное отклонение от всех пикселей группы.

Уменьшение количества цветов на индексном изображении

Для уменьшения количества цветов на изображении используется также функция imapprox. Функция imapprox использует некоторые методы аппроксимации. По сути, функция imapprox сначала с помощью функции ind2rgb выполняет преобразование изображения в формат RGB, а потом использует функцию rgb2ind для преобразования в индексное изображение с измененным количеством цветов.

Пример.
Рассмотрим пример формирования изображений, которые содержат 128 и 16 цветов с использованием функций rgb2ind и imapprox соответственно.

L=imread("peppers.png"); figure,imshow(L);


Исходное изображение

L=im2double(L); = rgb2ind(L, 128); figure,imshow(x,map);


Изображение со 128 цветами

Imapprox(x,map,16); figure,imshow(Y, newmap);


Изображение с 16 цветами

Качество обработанного изображения зависит от того какой метод аппроксимации используется, от количества цветов на исходном изображении, используется или нет метод диффузионного псевдосмешения цветов (dithering). Отметим, что различные методы дают различный результат для разных изображений.

Сглаживание цветовых переходов

Метод диффузионного псевдосмешения цветов (dithering)

При использовании функций rgb2ind или imapprox для уменьшения количества цветов на изображении, качество результирующего изображения немного ниже. Это связано с уменьшением количества цветов, с помощью которых отображается изображение. Обе функции - rgb2ind и imapprox - применяют метод диффузионного псевдосмешения цветов (dithering). Это приводит к визуальному увеличению количества отображаемых цветов. Метод dithering изменяет цвета пикселей окрестности таким образом, что средний цвет окрестности аппроксимирует исходный RGB-цвет.

Рассмотрим пример работы метода диффузионного псевдосмешения цветов (dithering).

  1. Считывание и визуализация исходного изображения. rgb=imread("onion.png"); imshow(rgb);

  2. Создание индексного изображения с восьмью цветами без применения метода диффузионного псевдосмешения цветов (dithering). =rgb2ind(rgb,8,"nodither"); figure, imshow(X_no_dither,map);

  3. Создание индексного изображения с восьмью цветами с применением метода диффузионного псевдосмешения цветов (dithering). =rgb2ind(rgb,8,"dither"); figure, imshow(X_dither,map);

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

    Выполнение преобразования цветовых пространств

    Преобразование цветовых данных между цветовыми пространствами

    Наиболее часто в Image Processing Toolbox для описания цифровых изображений используется цветовая система RGB. В этом случае столбцы палитры представляют собой интенсивности красной, зеленой и синей составляющих. Палитровые изображения могут иметь произвольную глубину цвета, хотя наиболее широкое распространение получили палитровые изображения, глубина цвета которых составляет соответственно 4 и 8 бит на пиксель.

    Известны два подхода к отображению цветов из большего цветового пространства в меньшем. Один из них заключается в том, что цвета, которые находятся за пределами цветового поля преобразуются в наиболее близкие по тону цвета внутри цветового поля. Этот подход называется отсечением (Clipping). Второй метод - это метод сжатия (Compression). Он заключается в том, что каждый цвет на входе независимо от того, попадает он в цветовое поле выводного устройства или нет, приводится к другому цвету из цветового диапазона выходного устройства (естественно, далеко не случайным образом). Существующие методы преобразования цветовых пространств отличаются друг от друга тремя главными особенностями: сжатием цветовой гаммы, тональной компрессией (приведение динамического диапазона вводного устройства к выводному) и отображением точки белого цвета.

    Преобразования между устройство-зависимыми цветовыми пространствами

    Рассмотрим два цветовых пространства RGB и CMYK. Любой цвет в пространстве RGB формируется как сумма разных количеств красной, зеленой и синей составляющих. Когда значения всех составляющих равны нулю, тогда формируется черный цвет. Если все составляющие принимают максимально возможное значение, тогда формируется белый цвет. Однако понятие "белый цвет" является приближенным. Дело в том, что RGB-составляющие обеспечивают только хорошее приближение, а настоящий белый цвет может быть получен только сложением всех его спектральных составляющих, а не только R,G и B. В CMYK-пространстве белый цвет достигается обнулением всех его составляющих, а Cyan (C, Голубой), Magenta (M, Пурпурный) и Yellow (Y, Желтый) используются в нем для создания прочих цветов. Недостатком этого цветового пространства является то, что устройства, которые его используют, не могут отображать яркие и насыщенные цвета.

    Цветовые пространства RGB и CMYK являются устройство-зависимыми, так как цвет в них привязан к тому или иному устройству, для которого заданы эти значения. "Устройством" может быть принтер, сканер, монитор и пр. Действительно, каждый принтер, сканер или монитор одно и то же изображение будут отображать своими цветами, хотя значения RGB на них подаются одинаковые.

    В общем случае, цвет может быть описан координатами для данного набора основных цветов или координатами цветности и уровнем их яркости. Цвет можно описать с помощью линейной или нелинейной функции координат цвета или координат цветности и яркости. Линейные преобразования координат цвета представляют собой переход к новому набору цветов. Существующие системы координат цвета позволяют количественно описать цвета и формулы их преобразования.

    В таблице приведен список устройство-зависимых цветовых пространств, которые поддерживаются приложением по обработке изображений системы Matlab.

    Функция Назначение Назначение
    XYZ Система координат спектральных основных цветов, которая была разработана в 1931 г. МКО (Международной комиссией по освещению). xyY, uvL, u"v"L и L*a*b*
    xyY Описание получения нормированных хроматических значений. Составляющая Y, как и в системе XYZ, представляет яркость. XYZ
    uvL Равноконтрастная система координат. L представляет яркость и является аналогом Y в XYZ. XYZ
    u"v"L Развитие прежней системы с целью получения цветового пространства, в котором единичные изменения цветности и яркости воспринимаются одинаково. XYZ
    L*a*b* Попытка учесть зависимость восприятия и яркости. L* представляет собой нелинейное масштабирование L , нормированное относительно некоторых точек. XYZ
    L*ch В этой модели c и h представляют соответственно насыщенность и цветность. В полярных координатах эта система преобразуется в L*a*b* . L*a*b*
    sRGB Цветовое пространство, которое соответствует цветовому охвату среднестатистического ЭЛТ-монитора. XYZ и L*a*b*

    Пример: Представление изображений в различных цветовых пространствах

    Считаем изображение в формате RGB в рабочее пространство MATLAB и преобразуем цветовые данные в цветовое пространство XYZ:

Аннотация: Введение. Алгоритм равномерного разбиения цветового пространства. Алгоритм разбиения по частоте вхождения: идея алгоритма, метод разбиения цветового куба - локально отсортированный поиск. Алгоритм медианного сечения. Методы кластеризации для квантования изображений: метод K-средних, метод связности графа, иерархический метод, обобщенный метод K-средних или метод динамических сгущений. Заключение.

12.1. Введение

Процесс преобразования аналогового сигнала в цифровую форму состоит из трех стадий: дискретизации ( "Дискретизация. Антиалиасинг. Геометрические преобразования растровых изображений"), квантования и кодирования. В данной лекции рассматривается вторая стадия. Квантование - это замена величины отсчета ближайшим значением из набора фиксированных величин. Применительно к изображениям это означает уменьшение количества значений атрибутов для каждого пикселя или, проще, уменьшение количества цветов в изображении. При этом требуется, чтобы качество изображения ухудшилось как можно меньше. Операция квантования применяется также на уже оцифрованном материале .

Квантование нужно для:

  • экономии памяти;
  • улучшения свойств последовательностей для сжатия;
  • подготовки для последующей обработки;
  • добавления эффектов.

Прокомментируем эти пункты подробнее применительно к изображениям.

Экономия памяти достигается, очевидно, за счет уменьшения затрат на хранение значений атрибутов. Многие форматы хранения изображений 1например PNG, GIF , вместо хранения значений атрибутов, хранят номера ссылок на строки палитры. Палитра - это таблица , строки которой содержат фиксированное значение атрибута. Раньше механизм палитры использовался для формирования и вывода изображения на дисплей ввиду того, что объем видеопамяти до 1995 года в обычном настольном компьютере не превышал одного мегабайта.

Улучшение свойств последовательностей для сжатия достигается за счет уменьшения количества возможных значений, а значит, увеличения повторений.


Рис. 12.1.

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

Квантование изображений может быть использовано для добавления художественных эффектов и выделения границ.

В этой лекции предполагается, что значения атрибутов пикселей изображения лежат в цветовом пространстве RGB ( "Основные понятия. Представление цвета в машинной графике"). Псевдокоды алгоритмов для простоты изложения приведены для 8-битного полутонового изображения (256 оттенков) (см. рис. 12.1), перевод осуществляется в 4-битное изображение (16 оттенков).


Рис. 12.2.

12.2. Алгоритм равномерного разбиения цветового пространства

Рассмотрим самый простой алгоритм квантования - алгоритм равномерного разбиения цветового пространства , также называемый линейным квантованием . Разобьем цветовое пространство на равные части по каждому из основных направлений (для RGB таких направлений три - по числу компонент ). Например, в направлении синей или зеленой оси (см. рис. 1.5) разобьем куб на 8 частей, а в направлении красной - на 4 . Множество значений, которые образуются на пересечении разбиений, занесем в таблицу. В нашем примере получается 256 значений, равномерно распределенных по RGB -кубу. Далее преобразование изображения сводится к поиску соответствующего номера в таблице так, чтобы расстояние между реальным цветом и замещающим его было минимальным. Это можно сделать быстро с помощью округления.

// из 256 оттенков серого делаем 16 // I(pixel) - атрибут пикселя // Inew(pixel) новый атрибут - номер ссылки в палитре // Palette - палитра // количество оттенков в исходном изображении NOldColors = 256; // количество элементов в палитре NNewColors = 16; // 1. Заполняем палитру for(i = 0; i < NNewColors; i++) { Palette[i] = i * (NOldColors / NNewColors); } // 2. Вычиcляем новые значения атрибутов foreach(pixel in I) // для каждого пикселя { // округляем, отбрасывая дробную часть Inew(pixel) = I(pixel) / (NOldColors / NNewColors); } Листинг 12.1. Алгоритм равномерного разбиения цветового пространства

В результате работы данного алгоритма (см. рис. 12.2) в изображении часто возникают слишком четкие границы, а детали, наоборот, стираются. Однако основные достоинства данного алгоритма - простота и высокая скорость.

4.2.2. Дискретизация и квантование изображений

Сформированное и записанное изображение необходимо преобразовать в форму, пригодную для цифровой обработки. Если изображения записываются фотоэлектронным способом, то это обычно не составляет трудности, так как из сканирующего фотоэлемента поступает электрический ток, пригодный для дискретизации и квантования. Таким образом, данный случай можно рассматривать как распространение соответствующих методов цифровой обработки одномерных сигналов на двумерные сигналы. При этом ошибки квантования можно учесть введением в блок-схему дополнительного.источника шума . Расстояние между отсчетами должно удовлетворять теореме
Найквиста для двумерных колебаний .

Устройства для дискретизации и квантования изображений основаны на технике микроденситометрии. В подобных системах на пленку проектируется луч света с интенсивностью I1. Интенсивность I2 света, прошедшего сквозь пленку
(или отраженного от нее), измеряется фотоумножителем. По коэффициенту пропускания

(4.16) с помощью соотношения (4.5) можно вычислить оптическую плотность. После этого световое пятно на пленке можно сместить скачком и таким образом получить отсчеты изображения. Математически этот процесс описывается соотношением

g1(x, y) = (4.17)

где g - изображение на пленке; ha распределение яркости в сечении луча, освещающего пленку; g1 эквивалентное изображение, из которого берутся отсчеты (т.е. в дискретных точках x = jx, y = ky сканирующий фотоприемник измеряет именно g1). Матрица отсчетов g1 (jx, ky
) представляет собой дискретизованное, или цифровое, изображение.

Из равенства (4.17) (справедливого также для случая дискретизации изображений, полученных фотоэлектронными средствами) видно, что в процессе дискретизации записанное изображение подвергается искажениям. За счет правильного выбора распределения ha и расстояния между отсчетами изображение можно фильтровать в процессе дискретизации. Фильтрацию, связанную с процессом дискретизации [согласно формуле (4.17)], можно использовать для подавления эффектов наложения, возникающих из-за того, что ширина спектра изображения обычно не ограничена (из-за шума зернистости пленки и других высокочастотных составляющих) . Дискретизация коэффициента пропускания эквивалентна дискретизации яркостного изображения, а дискретизация плотности эквивалентна дискретизации плотностного изображения. Часто можно услышать, что предпочтительнее квантовать плотность, так как логарифмическая зависимость приводит к уменьшению динамического диапазона. Однако подобные упрощенные рассуждения могут приводить к ошибкам .

4.2.3. Восстановление и демонстрация цифровых изображений
При цифровой обработке одномерных сигналов восстановление аналогового сигнала из последовательности чисел достигается путем низкочастотной фильтрации, что теоретически обосновывается теоремой об интерполяции колебаниями с ограниченным спектром . В идеальном случае для такой интерполяции следует применять функцию вида sin . Однако данная функция не имеет двумерного варианта, который можно было бы использовать для восстановления аналоговых изображений, так как импульсный отклик идеального фильтра нижних частот, имеющий вид sin, принимает отрицательные значения, а это выдвигает требование получения отрицательного света, невыполнимое при восстановлении изображений.

Аналоговое изображение можно восстановить с помощью устройства, подобного примененному при дискретизации изображения. На чистую пленку проектируется луч света, а интенсивность этого записывающего луча модулируется в соответствии с числовыми значениями изображения. В качестве источника света, а также для непосредственной демонстрации изображений можно также применять электронно-лучевые трубки (ЭЛТ). Световое пятно перемещается по поверхности пленки согласно растровой сетке. Нетрудно увидеть, что процесс восстановления изображения описывается соотношением

g2(x, y) = (4.18)

где hd - распределение яркости записывающего пятна, g1 - матрица отсчетов функции (4.17), представленная здесь набором взвешенных - импульсов, разнесенных на расстояния (x, y) друг от друга, а g2 - восстановленное непрерывное изображение. Распределение яркости записывающего пятна является импульсным откликом интерполирующего фильтра, аналогичного применяемому при восстановлении одномерных аналоговых сигналов. Практически во всех системах восстановления изображений записывающее пятно имеет несложное распределение яркости (например, гауссовское). По этой причине точно восстановить изображение не удается, поскольку простые распределения не дают возможности полностью подавить высокочастотные копии спектра изображения, возникающие при дискретизации. К счастью, обычно это не создает существенных трудностей, и в простых системах получается хорошее изображение.

Из вышеизложенного видно, что при дискретизации и демонстрации изображений возникают искажения спектра. Подобные искажения можно скорректировать в процессе цифровой фильтрации квантованных изображений
.
Восстановление непрерывных изображений связано с другой проблемой, а именно с проблемой верности изображения. Если число, находящееся в памяти машины, представляет значение оптической плотности изображения в конкретной точке, то абсолютно верное воспроизведение получится, если пленка, предназначенная для демонстрации, будет иметь точно такую оптическую плотность, как записано в памяти ЭВМ. (Аналогичные требования можно сформулировать для коэффициента пропускания пленки я для характеристики фотоэлектронной системы). Подобное устройство
Рис. 4.4. а - сквозные характеристики идеальной системы отображения; б - сквозные характеристики типичной реальной системы отображения.

отображения должно иметь сквозные характеристики» совпадающие с приведенными на рис. 4.4, а. Однако такие идеальные характеристики встречаются редко. Характеристики реальных устройств отображения больше напоминают приведенные на рис. 4.4, б, где наблюдается значительное отклонение от идеальной прямой с наклоном 45°. Хорошее приближение к идеальной характеристике можно получить путем линеаризации характеристики устройства отображения. Для этого необходимо выполнить следующие действия:

1. Сформировать набор фиксированных значений коэффициента пропускания или оптической плотности, подать их на устройство отображения и измерить фактический его отклик на каждое из значений коэффициента пропускания или оптической плотности.
2. Измерения, полученные на этапе 1, задают характеристику устройства отображения d0 = f (di). Линеаризованная характеристика описывается соотношением di = f- -1(d0). Это обратное преобразование можно найти эмпирическим путем и представить в виде таблицы или полинома, вычисленного методом наименьших квадратов.

3. Перед демонстрацией изображения числовые данные следует преобразовать согласно функции f -1. В результате в них будут введены предыскажения и значения яркостей, записанные в машине, будут воспроизведены на экране без погрешностей.
Метод линеаризации характеристик устройств отображения успешно применялся во многих исследовательских институтах. Точная линеаризация, конечно, невозможна, так как форма нелинейной характеристики изменяется в зависимости от особенностей проявления пленки, чистоты химикатов, старения
(или повреждения) люминофора ЭЛТ и т.п. Однако, приложив определенные усилия, можно линеаризировать устройство отображения так, что отклонения от линейности не будут превышать ±5% максимального значения. Следует отметить, что линеаризация характеристики устройства отображения является операцией, применяемой при восстановлении аналоговых изображений; при обработке одномерных сигналов линейными электронными схемами она обычно не используется.

4.2.4. Свойства системы зрения человека

Очень часто окончательную оценку изображения делает человек. Если бы человеческое зрение было идеальным и отвечало на световое воздействие с абсолютной точностью и совершенной линейностью, то его можно было бы и не изучать. Однако система зрения человека обладает нелинейной характеристикой, а ее отклик не является абсолютно верным. Важность этих положений.для получения изображений признана довольно давно , однако они не в полной мере использовались при обработке изображений.
Одной из характеристик системы зрения человека является способность восприятия яркости света. Эксперименты по определению восприятия людьми минимально различимых градаций яркости света, поступающего от калиброванного источника, показали, что яркость света воспринимается глазом нелинейно. Если начертить график зависимости величины этой минимально различимой градации яркости от эталонной яркости, то при изменении яркости в пределах нескольких порядком этот график имеет логарифмический характер
. Такие субъективные экспериментальные результаты согласуются с объективными данными, полученными в экспериментах на животных, в которых было показано, что светочувствительные клетки сетчатки и оптический нерв возбуждаются с частотой, пропорциональной логарифму интенсивности подводимого к ним света . По вполне понятным причинам подобные объективные измерения на людях не проводились. Тем не менее объективные данные для животных и субъективные показания для людей более чем убедительно подтверждают вывод о том, что яркость света


Рис. 4.5. a - сечение (осеcимметричной) аппаратной функции глаза человека; б - сечение (осесимметричной) частотной характеристики глаза человека.

воспринимается по логарифмическому закону. Это существенно нелинейный закон.
Другой отличительной характеристикой системы зрения человека является ее пространственночастотный отклик. Импульсный отклик глаза, рассматриваемого в виде двумерной линейной системы (т.е. линейной после начального логарифмического преобразования интенсивности наблюдаемого света), не является - функцией Дирака. Реакция глаза на приходящее световое поле описывается аппаратной функцией, сечение которой показано на рис. 4.5, а
. Острый центральный пик и отрицательные боковые лепестки импульсного отклика глаза показывают, что глаз обрабатывает пространственные частоты так же, как фильтр верхних частот. Точная форма частотной характеристики глаза исследовалась с помощью ряда психовизуальных экспериментов; было показано, что глаз подавляет низкие и ослабляет высокие пространственные частоты. В грубом приближении пространственно-частотный отклик глаза имеет полосовой характер. Подобная характеристика (рис. 4.5,б), например, была получена в ряде экспериментов, проведенных Манносом и Сакрисоном .
Наконец, особенностью зрения человека является способность к насыщению, т.е. к ограничению отклика при очень больших или очень малых интенсивностях наблюдаемого светового потока. Перечисленные свойства системы зрения можно описать моделью, представленной в виде блок - схемы на рис. 4.6. Однако данная модель совершенно не отражает других известных свойств системы зрения. Например, есть сведения, что некоторые стороны процесса восприятия изображения можно объяснить только наличием не одной, как на рис. 4.6, а нескольких линейных систем, включенных параллельно, т.е. в рамках модели с частотными каналами . Другие визуальные явления (такие, как иллюзия одновременного контраста) указывают, что логарифмическое преобразование, введенное в блок-схеме рис. 4.6, является слишком большим упрощением. Но, несмотря на известные недостатки, модель, представленная на рис. 4.6, является полезной, поскольку она


Рис. 4.6. Блок-схема системы зрения человека.

2) указывает, что в системе зрения содержатся некоторые элементы системы обработки информации. В частности система зрения человека, по-видимому, выполняет некоторые операции гомоморфной обработки информации .

Полезно связать логарифмическое преобразование изображения, выполняемое глазом, с рассмотренным ранее вопросом о плотностном (и яркостном изображениях. Можно заметить, что поскольку яркость света воздействует на глаз по логарифмическому закону, глаз воспринимает изображение как плотностное, если даже оно представлено (с помощью устройства отображения) в виде яркостного изображения.
Представляется логичным воспользоваться моделями системы зрения человека при анализе возможных применений цифровой обработки изображений. Однако это делать нужно осторожно, так как система зрения человека настолько сложна, что необоснованное применение упрощенных моделей зрения может принести больше вреда, чем пользы. Манное и Сакрисон доказали применимость модели зрения для исследования вопроса о сокращении избыточности изображений. Однако пока еще не определены все области возможного применения моделей зрения.

4. 3. Применение цифровой обработки для сокращения избыточности изображений
Сокращение избыточности изображений является первой областью применения цифровой обработки изображений, которая будет здесь рассмотрена.
Интенсивное развитие цифровых методов повлияло на все отрасли техники передачи и хранения информации в силу присущих цифровым системам преимуществ в помехозащищенности, возможности исправления ошибок, гибкости при коммутации сообщений, постоянно понижающейся стоимости и увеличивающейся надежности. Одновременно с внедрением цифровой техники расширялось использование изображений в различных областях науки и техники, например в медицине, .экспериментальной физике, бесконтактной дефектоскопии, исследовании природных ресурсов. Такая параллельность развития цифровой техники и расширения области применения изображений привела к естественному результату, а именно к интенсивным исследованиям в области передачи;и записи изображений цифровыми методами.

Типичное изображение содержит очень много избыточной информации, что заметно даже при беглом взгляде на большинство изображений. Эта избыточность приводит к экономическим потерям. Ширина полосы частот, необходимая для передачи изображения в цифровой форме, зависит от числа отсчетов изображения, разрядности отсчетов, времени, отведенного на передачу, и от мощности передатчика. С расширением полосы увеличиваются необходимая мощность передатчика и расходы. Деньги и энергия не являются проблемой, но электромагнитный спектр предельно загружен. Поэтому сокращение избыточности при передаче изображений является очень важной задачей. Столь же важно оно и для хранения.изображений в цифровом виде.
Если бы требовалось хранить только одно изображение, то об этом можно было бы не беспокоиться. Однако во многих существующих и проектируемых системах, таких, как геологоразведочный спутник NASA ERTS (Earth Resources Technology
Satellite), получается большое количество изображений, которые целесообразно получать и хранить в цифровой форме. Хотя цифровые запоминающие устройства и становятся все дешевле, число получаемых изображений настолько увеличивается, что сокращение их избыточности является задачей первостепенной важности.

4.3.1. Некоторые замечания о сокращении избыточности изображений

Избыточность видеоинформации может быть описана функцией корреляции между отсчетами изображений; она проявляется в высокой степени взаимной статистической прогнозируемости близколежащих отсчетов, взятых из изображения. Конечной целью операции сжатия видеоинформации является устранение этой статистической прогнозируемости (т.е. необходимо в максимально возможной степени уменьшить коррелированность отсчетов). На блок-схеме рис. 4.7 показаны основные операции, выполняемые системой сжатия видеоинформации. Сначала выполняется операция по максимальному уменьшению коррелированности отсчетов изображения. Затем отсчеты должны быть соответствующим образом квантованы. Квантованные отсчеты кодируются в форму, благоприятную для передачи (при этом, конечно, может быть обеспечена возможность обнаружения или исправления ошибок) .

Квантование и кодирование выполняются с учетом общих правил, не зависящих от особенностей схемы декорреляции, выбранной для первого этапа обработки.
Поэтому системы сжатия видеоинформации различаются видом схемы, выполняющей операции, относящиеся к первому этапу. В силу этого способам реализации первого блока схемы рис. 4.7 здесь будет уделено больше внимания, чем вопросам
Рис. 4.7. Блок-схема системы сокращения избыточности видеоинформации.

построения второго и третьего блоков. Такой подход полностью соответствует замыслу данной книги, посвященной техническим применениям цифровой обработки сигналов, т.е. задачам, в основном относящимся к первому блоку.

При разработке принципов реализаций первого блока схемы рис. 4.7 следует учесть ряд соображений. Рассмотрим сначала статистические свойства изображений. Если отсчеты изображения образуют сетку точек размером NN и каждый отсчет представлен Р - разрядным двойным числом, то при записи и передаче изображения с помощью обычной импульсно-кодовой модуляции (ИКМ) потребуется N2P двоичных разрядов. Однако, как было отмечено выше, типичное изображение имеет большую избыточность. Один из способов, позволяющих измерить эту избыточность и сравнить ее с номинальным числом N2P разрядов, заключается в построении гистограммы яркости изображения и вычислении соответствующей энтропии. С помощью Р- разрядных чисел можно описать квантованяе по 2p уровням. Для этого следует проанализировать все N2 отсчетов и подсчитать, сколько раз встречается каждый уровень квантования.
Затем следует построить гистограмму яркости изображения, т.е. для каждого уровня квантования указать число его появлений в изображения. Разделив эти числа на общее число точек N2 , можно получить аппроксимацию плотности вероятности процесса, порождающего изображение. Если обозначить нормированные частоты через pi (i = 1, 2, ... , 2p), то энтропия по определению выражается суммой h = __ (4.19) и равна средней информации (измеряемой числом бит, приходящихся на элемент изображения), содержащейся в каждом элементе изображения. Анализ изображений показал, что типичное значение h гораздо меньше числа разрядов
Р, необходимого для стандартного представления с помощью ИКМ. В работе отмечалось, что энтропия имеет величину порядка 1 бит/точка. Это означает, что разрядность массива, описывающего изображение, можно (хотя бы теоретически) сократить без потерь информации в среднем до 1 бит/точка.

Энтропия служит мерой статистической избыточности, но не дает сведений о ее происхождении. Источником избыточности, как подсказывает наблюдателю его зрение, является высокая степень однородности изображения на малых участках. Эту пространственную избыточность можно определить с помощью ковариационной матрицы изображения. Сначала лексикотрафически преобразуют матрицу из NN отсчетов изображения в N2 - компонентный вектор [т.е. элементы первой строки (или столбца) матрицы g(j, k) становятся компонентами вектора с номерами от 1 до N, элементы второй строки (столбца)
- компонентами с номерами от N+1 до 2 N и т.д.]. Затем вычисляют ковариационную матрицу изображения

[ Cg ] = E { (g - E(g))(g - E(g))T } ,

(4.20) где Е - среднее значение но ансамблю, a g - вектор, построенный из отсчетов изображения. На практике редко оказывается возможным проводить усреднение по ансамблю и ковариационную матрицу получают с помощью оценки пространственной корреляции .

Ковариационные структуры, такие, как матрица [ Cg ], не имеют взаимно - однозначной связи с исходным изображением. Коул показал, что многие неодинаковые изображения могут оказаться весьма сходными в ковариационном
(или спектральном) смысле. Следовательно, имеются основания для замены сложной матричной структуры типа более простой. В частности, рассматривалось (см., например, работу ) применение модели с авторегрессионным марковским процессом п-го порядка, где п обычно невелико
(например, n = 3). Тот факт, что подобные модели оказываются корректными, и применение их оправдано при анализе методов сжатия информации, таких, как дифференциальная импульсно - кодовая модуляция (ДИКМ), указывает на высокую степень взаимосвязи между соседними участками изображения.
При сжатии видеоинформации кроме статистических свойств изображения весьма важно учитывать и особенности получателя изображений. Зрение человека обладает ограниченными возможностями и характеризуется некоторыми известными (отчасти) отличительными особенностями. Использование, конкретных особенностей зрения для сокращения избыточности изображений называется психофизической обработкой. Известно, например, что при восприятии яркости света, попадающего в глаз, зрительная система ведет себя как нелинейная система с логарифмической характеристикой. Кроме того, система зрения человека не чувствительна к очень высоким или очень низким пространственным частотам, а в области средних частот ведет себя почти как полосовой фильтр, что обусловлено торможением нервных клеток сетчатки глаза. Нелинейность и частотная зависимость чувствительности зрительной системы позволили создать оптимальные системы сжатия видеоинформации. В этих системах для достижения большей устойчивости к ошибкам, появляющимся при кодировании и передаче, изображение обрабатывается примерно так же, как и в зрительной системе человека. Впервые это предложение было сделано
Стокхэмом .
Сокращение избыточности информации математически строго обосновывается положениями теории кодирования при заданном критерии точности . Как отмечали Маннос и Сакрисон , эффективные теоремы теории кодирования при заданном критерии точности в задачах сжатия видеоинформации применить не удалось. Основной причиной этого явилась сложность выбора критерия допустимой величины ошибок, согласующегося со свойствами системы зрения человека. Манное и Сакрисон смогли показать, что можно пользоваться критерием, связанным с нелинейными и пространственно-частотными свойствами зрения. Их работа имеет очень важное значение для дальнейшего развития методов сокращения избыточности изображений. Введение подходящей предварительной обработки во всех схемах, которые будут рассмотрены ниже, может значительно улучшить качество работы систем сжатия видеоинформации.

4.3.2. Схемы сокращения избыточности изображений с обработкой в пространственной области
В одном из возможных вариантов схемы сокращения избыточности видеоинформации в первом блоке (схема рис. 4.7) выполняется операция тождественности, т.е. исходная картинка никак не изменяется, а все сжатие достигается за счет квантования и кодирования. Однако сжатие информации невозможно выполнять без использования критериев, учитывающих особенности наблюдателя и свойства передаваемых данных. Если, например, наблюдателю нужна точность 1/1000 , то необходимое число уровней квантования получается при использовании 10-разрядных двоичных чисел; если же допустима точность
1/8 , то достаточно взять 3-разрядные числа. Следовательно, квантование при сжатии информации играет ограниченную роль. Однако сокращения избыточности можно добиться при кодировании, и одной из основных задач после создания
Шенноном теории информации было построение кодов, оптимальных с точки зрения сокращения избыточности информации. Шеннон доказал, что существует код, для которого скорость передачи совпадает со скоростью создания информации источником. Таким образом, для изображений с энтропией порядка 1 бит/точка существуют схемы кодирования, позволяющие построить коды со средней длиной в 1 бит/точка. К сожалению, само по себе существование таких кодов бесполезно, если отсутствуют алгоритмы их построения. Известны алгоритмы построения кодов, приближающихся к оптимальным. Например, кодирование по Хаффмену является эффективной процедурой для согласования кода со статистикой источника информации и позволяет сократить длину сигнала по сравнению со стандартной ИКМ. Однако подобные коды имеют переменное число сим1волов (т.е. при передаче сообщений кодовые слова состоят из различного числа символов); при кодировании и декодировании требуются сложные алгоритмы, связанные с записью, синхронизацией и вспомогательным накоплениям информации. Кроме того, вид подобных кодов очень сильно зависит от вероятности создания символов источником, и любые изменения вероятности могут привести к ухудшению характеристик кода (очень значительному в некоторых случаях). Следовательно, кодирование с квантованием может служить основным средством сжатия видеоинформации лишь в ограниченном числе случаев, так что необходимо искать другие методы.

В качестве метода сжатия видеоинформации в плоскости пространственных координат, выполняемого)в первом блоке схемы рис. 4.7, наиболее широко применяется дифференциальная импульсно-кодовая модуляция (ДИКМ). По своей структуре схемы ДИКМ совпадают со схемами кодирования методом линейного предсказания (КЛП), применяемым при сжатии полосы речевых сигналов, и поэтому схемы ДИКМ изображений иногда называют схемами сжатия методом предсказания. Блок-схема ДИКМ приведена на рис. 4.8. В этом методе используется статистическая взаимосвязь яркостей отдельных точек изображения и для каждой точки формируется оценка яркости в виде линейной комбинации яркостей предшествующих точек. Под предшествующими точками подразумеваются точки, расположенные перед рассматриваемой точкой при развертке изображения сверху вниз и слева направо (как в телевидении), благодаря чему создается вполне определенный порядок следования точек изображения. Подобная схема, конечно, будет применима и тогда, когда изображение уже «развернуто» методом сканирования. Затем вычисляется и квантуется разность между фактическим значением яркости и ее оценкой.
Квантованная разность подвергается кодированию и передается по каналу. На приемном конце символы декодируются, а информация восстанавливается с помощью схемы линейного предсказания n-го порядка (конечно, идентичной соответствующей схеме на передатчике), в которой формируются оценки яркости, добавляемые к разностям, полученным по каналу.

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


Рис. 4.8. Блок-схема системы сжатия методом ДИКМ с предсказывающим устройством n-го порядка.

происходит внутри петли обратной связи, а при восстановлении сигнала предсказанное значение подается по схеме назад. Можно спроектировать схемы
ДИКМ, в которых предсказанные значения сигнала подаются вперед, а также создать схемы ДИКМ, где блок квантования расположен вне петли обратной связи. Однако такие системы дают восстановленное изображение с большими ошибками. Схема с предсказанием назад необходима в приемнике потому, что символы поступают последовательно. При использовании в передатчике аналогичной схемы предсказания назад в случае отсутствия ошибок, связанных с квантованием, можно было бы восстановить изображение с абсолютной точностью. Если схему квантования включить в петлю предсказывающей схемы передатчика, то и в приемнике, и в передатчике предсказание будет осуществляться на основе одинаковых квантованных отсчетов, что позволит уменьшить ошибки восстановления.

Сжатие в схемах ДИКМ достигается за счет вычитания сигналов, поскольку разности имеют значительно меньший динамический диапазон. Предположим, например, что исходное изображение передается методом ИКМ и для представления яркостей его точек нужны числа от 0 до 255. Тогда, если допустимая ошибка равна единице младшего разряда, то необходимо квантование в 8-разрядные числа. Однако значения разностей яркостей соседних точек будут гораздо меньшими; если разности (в том же масштабе) будут изменяться от 0 до 7, то для получения ошибки, равной единице младшего разряда, достаточно квантования в 3-разрядные числа.

(4.21) по всем k, аi

Это известная задача, и если процесс g(k) стационарен, то ее решение имеет вид

, (4.22) где r (j - i) = E [ g (k - j) g (k -i) ]

обычно называется автокорреляционной функцией процесса g. Коэффициенты ai получаются решением системы уравнений (4.22).

Оптимальные значения коэффициентов предсказания зависят от взаимосвязей точек изображения, описываемых автокорреляционной функцией. Из определения
(4.20) видно, что в случае стационарных данных автокорреляционная функция отличается от вышерассмотренной функции на постоянную величину. При нестационарных данных функция r (в уравнении (4.23) зависит от пространственных переменных и оптимальные коэффициенты предсказания должны изменяться в зависимости от пространственных координат. Это характерно для изображений. К счастью, нестационарные статистические характеристики изображений обычно можно достаточно хорошо аппроксимировать стационарными функциями, так что неперестраивающееся линейное устройство предсказания дает вполне хорошие результаты. При сжатии видеоинформации методом ДИКМ ошибки обычно появляются на границах изображаемых предметов, где предположение о стационарности удовлетворяется в наименьшей степени, и на восстановленном изображении воспринимаются визуально как аномально - светлые или темные точки.

Выбор числа уровней квантования и расположения порогов квантования является задачей отчасти количественной и отчасти качественной.
Расположение порогов квантования можно найти количественными расчетами. В работе Макса впервые было рассмотрено неравномерное квантование, зависящее от функции распределения квантуемого сигнала и сводящее к минимуму среднее квадратическое значение ошибки, вызванной ограниченностью числа уровней квантования. Алгоритм Макса позволяет найти оптимальное расположение точек перехода для заданного числа уровней квантования. Однако число уровней квантования выбирается исходя из субъективных качественных соображений.

Минимальное число уровней квантования paвно двум (одноразрядные числа) и соответствует такому квантованию изображений, при котором разность яркостей принимает фиксированное (положительное или отрицательное) значение. Этот способ обычно называют дельта - модуляцией, схему ДИКМ (рис. 4.8) можно упростить заменой квантователя на ограничитель, а предсказывающего устройства n-го порядка на интегратор. При сокращении избыточности изображений методом дельта-модуляции наблюдаются те же недостатки, что и при дельта-модуляции других сигналов, например речевых , а именно затягивание фронтов и искажения дробления. Однако если частота дискретизации изображения выбрана намного больше частоты Найквиста, то сжатие методом дельта - модуляции приводит к малым (субъективно замечаемым) ошибкам. Если частота дискретизации приближается к частоте Найквиста, то на изображении в большей степени будут проявляться затягивания фронтов (на контурах изображений) и искажения дробления (на участках с постоянной яркостью). Как и при сжатии речи , адаптивная дельта-модуляция позволяет уменьшить эти ошибки. Однако в целом при передаче изображений дельта - модуляция оказалась менее эффективной, что при передаче речи.

Квантование с числом уровней, большим двух, позволяет при сокращении избыточности получить изображения более высокого качества. Система сжатия методом ДИКМ с 8-уровневым (З-разрядным) квантованием при оптимальном размещении порогов дает изображения, качество которых такое же, как в системе с ИКМ, имеющей разрядность от 6 до 8. Исключение составляют ошибки вблизи линий резкого изменения яркости.

Сигнал с выхода устройства квантования, конечно, следует кодировать, поскольку распределение вероятностей «квантованных разностей не является равномерным. При удачном выборе кода (например, кода Шеннона - Фано или
Хаффмена) удается дополнительно понизить общую скорость создания информации. Прэтт указывает, что при использовании кода Хаффмена в пределе удается понизить скорость создания информации до 2,5 бит/точка. Это дополнительное понижение скорости требуется сопоставить с увеличением стоимости и сложности запоминающего устройства, синхронизаторов и вспомогательных регистров памяти, необходимых для работы с кодами Хаффмена.

Выше обсуждались вопросы сжатия изображений с помощью ДИКМ при выборе элементов по строке (т.е. для прогноза брались точки, лежащие на текущей строке развертки). В силу двумерного характера изображений возможно (и целесообразно) расширить метод ДИКМ так, чтобы при прогнозе учитывались яркости в точках, лежащих не только на текущей, но и на предшествующих строках развертки. Схемы сжатия методом ДИКМ с таким двумерным предсказанием основаны на тех же принципах, что при одномерном предсказании. Поскольку для изображений характерно наличие двумерных статистических взаимосвязей, можно надеяться, что двумерное предсказание даст лучшие результаты по сжатию изображений, так как декорреляция изображений с помощью операций предсказания и вычитания будет производиться по двум координатам. Действительно, устройства с пространственным предсказанием дают более качественные изображения. Хабиби показал, что с помощью двумерного предсказывающего устройства третьего порядка при 8 - уровневом (3 - разрядном) квантовании получались изображения, которые визуально не удавалось отличить от исходных фотографий, обработанных методом ИКМ с 11- разрядными числами.

Для изображений, состоящих из последовательных кадров, например телевизионных, идеи предсказания и вычитания, связанные с ДИКМ, можно распространить на временную область. В подобных изображениях яркость многих точек от кадра к кадру не изменяется или изменяется медленно.
Следовательно, можно построить систему сжатия методом ДИКМ, в которой яркость очередной точки прогнозируется на основе яркостей двумерного набора точек текущего кадра и соответствующих точек предшествующих кадров. На практике порядок временного предсказания не может быть высоким, так как для каждого временного слагаемого необходимо иметь запоминающее устройство, где сохранялся бы весь кадр. Моделирование с предсказывающим устройством третьего порядка, в котором для предсказания использовались точки, расположенные в данном (и предшествующем кадрах слева от рассматриваемой точки и вверх от нее, показало, что можно получить очень хорошие изображения при средней разрядности 1 бит/точка .

4.3.3. Схемы сокращения избыточности изображений с обработкой в области преобразований

Для пояснения основных операций, выполняемых системой сжатия видеоинформации с обработкой в области преобразований, обратимся к ковариационной матрице, определяемой соотношением (4.20). Матрица описывает корреляцию отсчетов изображения в плоскости (х, у), являющейся координатной плоскостью изображения. Важным методом многомерного статистического анализа служит исследование массива данных не только в их естественных координатах, но и в системах координат с более удобными свойствами. В частности, весьма полезными оказались системы координат, основанные на собственных значениях и собственных векторах ковариационной матрицы

[ Cg ] = [ Ф ] [ ] [ Ф ]T = ,

(4.24) где [Ф] - матрица, составленная из ортогональных собственных вектор - столбцов Фi а [] - диагональная матрица собственных значений.

Преобразование координат, определяемое матрицей собственных векторов [Ф], обладает тем свойством, что оно производит преобразование заданного массива чисел в другой с некоррелированными элементами, причем получающиеся компоненты имеют убывающие дисперсии. Пусть собственные значения матрицы
расставлены в убывающем порядке и пронумерованы так, что

, (4.25) и пусть собственные векторы, связанные с ними, расставлены в том же порядке. Тогда матрица собственных векторов [Ф] обладает тем свойством, что умножение ее на вектор-изображение g (образованный лексикографической расстановкой) дает вектор

(4.26) имеющий некоррелированные компоненты, причем компоненты вектора G оказываются расставленными в порядке убывания их дисперсий , что является свойством дискретного варианта разложения Карунена - Лоэва, фактически описанного соотношениями (4.24) - (4.26).
Полезность преобразования Карунена - Лоэва (КЛ, или ковариационного) для сокращения избыточности изображений очевидна. Массив отсчетов изображения заменяется набором переменных, имеющих различные статистические веса).
Сжатие можно получить, отбрасывая переменные с малым статистическим весом и сохраняя остальные. Если, например, оставить M