Первыми для
Одна из серьезных проблем машинной графики заключается в том, что до сих пор не найден адекватный критерий оценки потерь качества изображения. А теряется оно постоянно - при оцифровке, при переводе в ограниченную палитру цветов, при переводе в другую систему цветопредставления для печати, и, что для нас особенно важно, при root mean ):
По нему изображение будет сильно испорчено при понижении яркости всего на 5% (глаз этого не заметит - у разных мониторов настройка яркости варьируется гораздо сильнее). В то же время изображения со "снегом" - резким изменением цвета отдельных точек, слабыми полосами или "муаром" будут признаны "почти не изменившимися" (Объясните, почему?). Свои неприятные стороны есть и у других критериев.
Рассмотрим, например, максимальное отклонение:
$$d(x,y) = \mathop {\max }\limits_{i,j} \left| {x_{ij} - y_{ij} } \right|$$Эта мера, как можно догадаться, крайне чувствительна к биению отдельных пикселов. Т.е. во всем изображении может существенно измениться только значение одного пиксела (что практически незаметно для глаза), однако согласно этой мере изображение будет сильно испорчено.
Мера, которую сейчас используют на практике, называется мерой отношения сигнала к peak-to-peak ).
Данная мера, по сути, аналогична среднеквадратичному отклонению, однако пользоваться ей несколько удобнее за счет логарифмического масштаба
Лучше всего потери качества изображений оценивают наши глаза. Отличной считается архивация, при которой невозможно на глаз различить первоначальное и разархивированное изображения. Хорошей - когда сказать, какое из изображений подвергалось
- один из самых новых и достаточно мощных алгоритмов. Практически он является стандартом де-факто для полноцветных изображений [6.1]. Оперирует алгоритм областями 8х8, на которых яркость и цвет меняются сравнительно плавно. Вследствие этого, при разложении матрицы такой области в двойной ряд по косинусам (см. формулы ниже) значимыми оказываются только первые коэффициенты. Таким образом, сжатие в осуществляется за счет плавности изменения цветов в изображении.
Алгоритм разработан группой экспертов в области фотографии специально для сжатия 24-битных изображений. -
ДКП раскладывает изображение по амплитудам некоторых частотных компонент. Таким образом, при преобразовании мы получаем матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать коэффициенты более грубо без заметной потери качества изображения.
Для этого используется ). В самом простом случае - это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но может достигаться большая степень сжатия.
Итак, рассмотрим алгоритм подробнее. Пусть мы сжимаем 24-битное изображение.
Шаг 1.
Переводим изображение из цветового пространства , с компонентами, отвечающими за красную (Red), зеленую (YCrCb (иногда называют ).
В нем Y - яркостная составляющая, а Cr, Cb - компоненты, отвечающие за цвет (хроматический красный и хроматический синий). За счет того, что человеческий глаз менее чувствителен к цвету, чем к яркости, появляется возможность архивировать массивы для Cr и Cb компонент с большими потерями и, соответственно, большими степенями сжатия. Подобное преобразование уже давно используется в телевидении. На сигналы, отвечающие за цвет, там выделяется более узкая полоса частот.
Упрощенно перевод из цветового пространства в цветовое пространство YCrCb можно представить с помощью
на обратную матрицу.
Шаг 2.
Разбиваем исходное изображение на матрицы 8х8. Формируем из каждой три рабочие матрицы ДКП - по 8 бит отдельно для каждой компоненты. При больших степенях сжатия этот шаг может выполняться чуть сложнее. Изображение делится по компоненте Y - как и в первом случае, а для компонент Cr и Cb матрицы набираются через строчку и через столбец. Т.е. из исходной матрицы размером 16x16 получается только одна рабочая матрица ДКП. При этом, как нетрудно заметить, мы теряем 3/4 полезной информации о цветовых составляющих изображения и получаем сразу сжатие в два раза. Мы можем поступать так благодаря работе в пространстве YCrCb. На результирующем изображении, как показала практика, это сказывается несильно.
Шаг 3.
В упрощенном виде ДКП при n=8 можно представить так:
где
$$C(i,u) = \matrix{ {A(u) \times } {\cos \left( {{\textstyle{{(2 \times i + 1) \times u \times \pi } \over {2 \cdot n}}}} \right)} \cr } $$ $$A(u) = \left\{ {\matrix{ {{\textstyle{1 \over {\sqrt 2 }}}\matrix{ , {\matrix{ {{\rm{for}}} {\matrix{ {\matrix{ {\rm{u}} \equiv \cr } } 0 \cr } } \cr } } \cr } } \hfill \cr {\matrix{ {{\rm{1}}{\rm{,}}} \hfill {{\rm{ for}}} \hfill {{\rm{u}} \ne {\rm{0}}} \hfill \cr } } \hfill \cr } } \right.$$Применяем ДКП к каждой рабочей матрице. При этом мы получаем матрицу, в которой коэффициенты в левом верхнем углу соответствуют низкочастотной составляющей изображения, а в правом нижнем - высокочастотной. Понятие частоты следует из рассмотрения изображения как двумерного сигнала (аналогично рассмотрению звука как сигнала). Плавное изменение цвета соответствует низкочастотной составляющей, а резкие скачки - высокочастотной.
Шаг 4.
Производим Y, U и V ), в общем случае, задается своя матрица q[u,v] (далее МК).
На этом шаге осуществляется управление степенью сжатия, и происходят самые большие потери. Понятно, что, задавая МК с большими коэффициентами, мы получим больше нулей и, следовательно, большую степень сжатия.
В стандарт включены рекомендованные МК, построенные опытным путем. Матрицы для большей или меньшей степени сжатия получают путем умножения исходной матрицы на некоторое число .
С квантованием связаны и специфические эффекты алгоритма. При больших значениях коэффициента
Шаг 5.
Переводим матрицу 8x8 в 64-элементный вектор при помощи "зигзаг"-сканирования, т.е. берем элементы с индексами (0,0), (0,1), (1,0), (2,0)... (рис. 6.1)
(рис 6.1) Таким образом, в начале
Шаг 6.
Свертываем вектор с помощью алгоритма группового кодирования. При этом получаем пары типа (пропустить, число), где "пропустить" является счетчиком пропускаемых нулей, а "число" - значение, которое необходимо поставить в следующую ячейку. Так, вектор 42 3 0 0 0 -2 0 0 0 0 1 ... будет свернут в пары (0,42) (0,3) (3,-2) (4,1) ....
Шаг 7.
Свертываем получившиеся пары кодированием по Хаффману с фиксированной таблицей.
Процесс восстановления изображения в этом алгоритме полностью симметричен. Метод позволяет сжимать некоторые изображения в 10-15 раз без серьезных потерь. (рис. 6.2)
(рис 6.2) Конвейер операций, используемый в алгоритме JPEGСущественными положительными сторонами алгоритма является то, что:
Отрицательными сторонами алгоритма является то, что:
Как уже говорилось, стандартизован относительно недавно - в 1991 году. Но уже тогда существовали алгоритмы, сжимающие сильнее при меньших потерях качества. Дело в том, что действия разработчиков стандарта были ограничены
Выполнение последнего требования сделало возможным появление таких устройств, как
Не очень приятным свойством является также то, что нередко горизонтальные и вертикальные полосы на не рекомендуется активно использовать в
Широкое применение долгое время сдерживалось, пожалуй, лишь тем, что он оперирует 24-битными изображениями. Поэтому для того, чтобы с приемлемым качеством посмотреть картинку на обычном мониторе в 256-цветной палитре, требовалось применение соответствующих алгоритмов и, следовательно, определенное время. В приложениях, ориентированных на придирчивого пользователя, таких, например, как игры, подобные задержки неприемлемы. Кроме того, если имеющиеся у вас изображения, допустим, в 8-битном формате перевести в 24-битный , а потом обратно в оказывается очень эффективным.
Несколько слов необходимо сказать о модификациях этого алгоритма. Хотя и является стандартом , формат его файлов не был зафиксирован. Пользуясь этим, производители создают свои, несовместимые между собой форматы, и, следовательно, могут изменить алгоритм. Так, внутренние таблицы алгоритма, рекомендованные , заменяются ими на свои собственные. Кроме того, легкая неразбериха присутствует при задании степени потерь. Например, при тестировании выясняется, что "отличное" качество, "100%" и "10 баллов" дают существенно различающиеся картинки. При этом, кстати, "100%" качества не означают сжатие без потерь. Встречаются также варианты
Как стандарт начинает все шире использоваться при обмене изображениями в в форматах Quick Time, и, на данный момент, занимает видное место в системах
Степень сжатия: 2-200 (Задается пользователем).
Класс изображений: Полноцветные 24 битные изображения или изображения в градациях серого без резких переходов цветов (фотографии).
Симметричность: 1
Характерные особенности: В некоторых случаях, алгоритм создает "ореол" вокруг резких горизонтальных и вертикальных границ в изображении (эффект Гиббса). Кроме того, при высокой степени сжатия изображение распадается на блоки 8х8 пикселов.
Фрактальная архивация основана на том, что мы представляем изображение в более компактной форме - с помощью - далее по тексту как IFS ). Прежде, чем рассматривать сам процесс IFS строит изображение, т.е. процесс декомпрессии.
Строго говоря, IFS представляет собой набор трехмерных аффинных преобразований, в нашем случае переводящих одно изображение в другое. Преобразованию подвергаются точки в трехмерном пространстве (х_координата, у_координата, яркость).
Наиболее наглядно этот процесс продемонстрировал Барнсли в своей книге " ". Там введено понятие Фотокопировальной Машины, состоящей из экрана, на котором изображена исходная картинка, и системы линз, проецирующих изображение на другой экран: (рис. 6.3)
(рис 6.3) Машина БарнслиРасставляя линзы и меняя их характеристики, мы можем управлять получаемым изображением. Одна итерация работы Машины заключается в том, что по исходному изображению с помощью проектирования строится новое, после чего новое берется в качестве исходного. Утверждается, что в процессе IFS. Соответствующая теория гарантирует наличие ровно одной неподвижной точки для каждой IFS.
Поскольку отображение линз является сжимающим, каждая линза в явном виде задает самоподобные области в нашем изображении. Благодаря
Наиболее известны два изображения, полученных с помощью IFS: "треугольник Серпинского" (рис. 6.4) и "папоротник Барнсли" рис. 6.5.
(рис 6.4) Треугольник Серпинского. Задается 3 преобразованиями"Треугольник Серпинского" задается тремя, а "папоротник Барнсли" четырьмя аффинными преобразованиями (или, в нашей терминологии, "линзами"). Каждое преобразование кодируется буквально считанными байтами, в то время как изображение, построенное с их помощью, может занимать и несколько
(рис 6.5) Папоротник Барнсли. Задается 4 преобразованиямиИз вышесказанного становится понятно, как работает
(рис 6.6) В худшем случае, если не будет применяться оптимизирующий алгоритм, потребуется перебор и сравнение всех возможных фрагментов изображения разного размера. Даже для небольших изображений при учете дискретности мы получим астрономическое число перебираемых вариантов. Причем, даже резкое сужение классов преобразований, например, за счет масштабирования только в определенное количество раз, не дает заметного выигрыша во времени. Кроме того, при этом теряется качество изображения. Подавляющее большинство исследований в области фрактальной компрессии сейчас направлены на уменьшение времени
Далее приводятся основные определения и теоремы, на которых базируется фрактальная компрессия. Этот материал более детально и с
Определение. Преобразование $$w:R^2 \to R^2$$, представимое в виде
$$w(\bar \rangle ) = w \left( \begin{array}{c} x \\ y \\ \end{array} \right) = \left( \begin{array}{cc} a b \\ c b \\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ \end{array} \right) $$где a, b, c, d, e, f
Определение. Преобразование , представимое в виде
$$w(\bar \rangle ) = w \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) = \left( \begin{array}{ccc} a b t\\ c d u\\ r s p\\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ q \\ \end{array} \right) $$где a, b, c, d, e, f, p, q, r, s, t, u
Определение. Пусть $$f:{\rm X} \to {\rm X} $$
- преобразование в пространстве Х. Точка $$x_f \in {\rm X}
$$
такая, что $$f(x_f ) = x_f
$$
называется неподвижной точкой (аттрактором) преобразования.
Определение. Преобразование $$f:{\rm X} \to {\rm X}$$
в (Х, d) называется сжимающим, если существует число s: $$0 \le s < 1 $$, такое, что
Замечание: Формально мы можем использовать любое сжимающее отображение при фрактальной компрессии, но реально используются лишь трехмерные аффинные преобразования с достаточно сильными ограничениями на коэффициенты.
Теорема. (О сжимающем преобразовании)
Пусть $$f:{\rm X} \to {\rm X}
$$
- сжимающее преобразование в полном (Х, d). Тогда существует в точности одна неподвижная точка $$x_f \in {\rm X}$$ этого преобразования, и для любой точки $$x \in {\rm X}$$ последовательность $$\left\{ {\left. {f^n (x)\matrix{
: {n = } \cr
} \matrix{
{0,1,2...} {} \cr
} } \right\}} \right$$.
сходится к $$x_f
$$.
Более общая формулировка этой теоремы гарантирует нам
Определение. Изображением называется функция S, определенная на единичном квадрате и принимающая значения от 0 до 1 или $$S(x,y) \in \left[ {0...1} \right]\matrix{
{} {\forall x,y} \cr
} \in \left[ {0...1} \right]
$$
Пусть трехмерное аффинное преобразование $$w_i :R^3 \to R^3$$, записано в виде
$$w_i(\bar \rangle ) = w_i \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) = \left( \begin{array}{ccc} a b 0\\ c d 0\\ 0 0 p\\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ q \\ \end{array} \right) $$
и определено на компактном [0..1]x[0..1] (мы пользуемся особым видом матрицы преобразования, чтобы уменьшить S в область $$R_i,$$ расположенную со сдвигом (e,f) и поворотом, заданным матрицей
$$\left( \begin{array}{ccc} a b 0\\ c d 0\\ 0 0 0\\ \end{array} \right) .$$
При этом, если интерпретировать p раз (преобразование обязано быть сжимающим) и изменится на сдвиг q.
Определение. Конечная совокупность W сжимающих трехмерных аффинных преобразований $$w_i$$, определенных на областях $$D_i$$, таких, что $$w_i (D_i ) = R_i$$
и $$R_i \cap R_j = \matrix{
{\not o} {\forall i \ne j} \cr
}
$$, называется системой итерируемых функций (IFS).
Системе итерируемых функций однозначно сопоставляется неподвижная точка - изображение. Таким образом, процесс компрессии заключается в поиске
Как уже стало очевидным из изложенного выше, основной задачей при компрессии фрактальным алгоритмом является нахождение соответствующих аффинных преобразований. В самом общем случае мы можем переводить любые по размеру и форме области изображения, однако в этом случае получается астрономическое число перебираемых вариантов разных фрагментов, которое невозможно обработать на текущий момент даже на
В учебном варианте алгоритма рис. 6.7, изложенном далее, сделаны следующие ограничения на области:
Х, и по Y, что сразу уменьшает перебор в 4 раза.0, 90, 180 градусов или 270 градусов. Также допускается зеркальное отражение. Общее число возможных преобразований (считая пустое) - 8.0,75.
(рис 6.7) Эти ограничения позволяют:
IFS:Информацию о размере блоков можно хранить в заголовке файла. Таким образом, мы затратили менее 4 байт на одно аффинное преобразование. В зависимости от того, каков размер блока, можно высчитать, сколько блоков будет в изображении. Таким образом, мы можем получить оценку степени компрессии.
Например, для файла в градациях серого 256 цветов 512х512 пикселов при размере блока 8 пикселов аффинных преобразований будет 4096 (512/8 512/8). На каждое потребуется 3.5 байта. Следовательно, если исходный файл занимал 262144 (512 512) байт (без учета заголовка), то файл с коэффициентами будет занимать 14336 байт. Степень сжатия - 18 раз. При этом мы не учитываем, что файл с коэффициентами тоже может обладать избыточностью и архивироваться методом .
Отрицательные стороны предложенных ограничений:
Такова плата за скорость компрессии и за простоту упаковки коэффициентов в файл.
Сам алгоритм упаковки сводится к перебору всех доменных блоков и подбору для каждого соответствующего ему рангового блока. Ниже приводится схема этого алгоритма.
for (all range blocks) {
min_distance = MaximumDistance;
Rij = image->CopyBlock(i,j);
for (all domain blocks) { // С поворотами и отр.
current=Координаты тек. преобразования;
D=image->CopyBlock(current);
current_distance = Rij.L2distance(D);
if(current_distance < min_distance) {
// Если коэффициенты best хуже:
min_distance = current_distance;
best = current;
}
} // Next range block
Save_Coefficients_to_file(best);
} // Next domain block
Как видно из приведенного алгоритма, для каждого рангового блока делаем его проверку со всеми возможными доменными блоками (в том числе с прошедшими преобразование
$$q = \left[ {\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {d_{ij} } } } \right. - \left. {\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {r_{ij} } } } \right]/n^2 $$
где $$r_{ij}$$ - значения пикселов рангового блока (R), а $$d_{ij}$$ - значения пикселов доменного блока (D). При этом мера считается как:
$$d(R,D) = \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {(0.75r_{ij} + q - d_{ij} )^2 } }$$
Мы не вычисляем квадратного корня из $${\rm{l}}_{\rm{2}}$$ меры и не делим ее на n, поскольку данные преобразования монотонны и не помешают нам найти
Посчитаем количество операций, необходимых нам для сжатия изображения в градациях серого 256 цветов 512х512 пикселов при размере блока 8 пикселов (табл. 6.1):
| Часть программы | Число операций |
|---|---|
for (all |
4096 (=512/8 512/8) |
for (all |
492032 (=(512/2-8)* (512/2-8)*8) |
Вычисление q и d(R,D) |
> 3*64 операций "+" > 2*64 операций " " |
| Итог: | > 3* 128.983.236.608 операций "+"> |
Таким образом, нам удалось уменьшить число операций алгоритма компрессии до вполне вычисляемых (пусть и за несколько часов) величин.
Декомпрессия алгоритма фрактального сжатия чрезвычайно проста. Необходимо провести несколько
В качестве начального может быть взято абсолютно любое изображение (например, абсолютно черное), поскольку соответствующий математический аппарат гарантирует нам IFS, к неподвижному изображению (близкому к исходному). Обычно для этого достаточно 16
Прочитаем из файла коэффициенты всех блоков;
Создадим черное изображение нужного размера;
Until(изображение не станет неподвижным){
For(every range (R)){
D=image->CopyBlock(D_coord_for_R);
For(every pixel(i,j) in the block{
Rij = 0.75Dij + oR;
} //Next pixel
} //Next block
}//Until end
Поскольку мы записывали коэффициенты для блоков $$r_{ij}$$ (которые, как мы оговорили, в нашем частном случае являются
Как можно подсчитать, количество операций на один пиксел изображения в градациях серого при восстановлении необычайно мало ( N операций сложения "+" и N операций умножения "*", где N - количество . В простой реализации на точку приходится 64 операции сложения "+" и 64 операции умножения "*". При реализации быстрого ДКП можно получить, 7 сложений и 5 умножений на точку, но это без учета шагов RLE,
При кратком изложении упрощенного варианта алгоритма были пропущены многие важные вопросы. Например, что делать, если алгоритм не может подобрать для какого-либо фрагмента изображения подобный ему? Достаточно очевидное решение - разбить этот фрагмент на более мелкие, и попытаться поискать для них. В то же время понятно, что эту процедуру нельзя повторять до бесконечности, иначе количество необходимых преобразований станет так велико, что алгоритм перестанет быть алгоритмом компрессии. Следовательно, мы допускаем потери в какой-то части изображения.
Для фрактального алгоритма компрессии, как и для других алгоритмов сжатия с потерями, очень важны механизмы, с помощью которых можно будет регулировать степень сжатия и степень потерь. К настоящему времени разработан достаточно большой набор таких методов. Во-первых, можно ограничить количество аффинных преобразований, заведомо обеспечив степень сжатия не ниже фиксированной величины. Во-вторых, можно потребовать, чтобы в ситуации, когда разница между обрабатываемым фрагментом и наилучшим его приближением будет выше определенного порогового значения, этот фрагмент дробился обязательно (для него обязательно заводится несколько "линз"). В-третьих, можно запретить дробить фрагменты размером меньше, допустим, четырех точек. Изменяя пороговые значения и приоритет этих условий, мы будем очень гибко управлять коэффициентом компрессии изображения в диапазоне от побитового соответствия до любой степени сжатия. Заметим, что эта гибкость будет гораздо выше, чем у ближайшего "конкурента" - алгоритма .
Степень сжатия: 2-2000 (Задается пользователем).
Класс изображений: Полноцветные 24 битные изображения или изображения в градациях серого без резких переходов цветов (фотографии). Желательно, чтобы области большей значимости (для восприятия) были более контрастными и резкими, а области меньшей значимости - неконтрастными и размытыми.
Симметричность: 100-100000
Характерные особенности: Может свободно масштабировать изображение при разархивации, увеличивая его в 2-4 раза без появления "лестничного эффекта". При увеличении степени компрессии появляется "блочный" эффект на границах блоков в изображении.
Первыми для
Одна из серьезных проблем машинной графики заключается в том, что до сих пор не найден адекватный критерий оценки потерь качества изображения. А теряется оно постоянно - при оцифровке, при переводе в ограниченную палитру цветов, при переводе в другую систему цветопредставления для печати, и, что для нас особенно важно, при root mean ):
По нему изображение будет сильно испорчено при понижении яркости всего на 5% (глаз этого не заметит - у разных мониторов настройка яркости варьируется гораздо сильнее). В то же время изображения со "снегом" - резким изменением цвета отдельных точек, слабыми полосами или "муаром" будут признаны "почти не изменившимися" (Объясните, почему?). Свои неприятные стороны есть и у других критериев.
Рассмотрим, например, максимальное отклонение:
$$d(x,y) = \mathop {\max }\limits_{i,j} \left| {x_{ij} - y_{ij} } \right|$$Эта мера, как можно догадаться, крайне чувствительна к биению отдельных пикселов. Т.е. во всем изображении может существенно измениться только значение одного пиксела (что практически незаметно для глаза), однако согласно этой мере изображение будет сильно испорчено.
Мера, которую сейчас используют на практике, называется мерой отношения сигнала к peak-to-peak ).
Данная мера, по сути, аналогична среднеквадратичному отклонению, однако пользоваться ей несколько удобнее за счет логарифмического масштаба
Лучше всего потери качества изображений оценивают наши глаза. Отличной считается архивация, при которой невозможно на глаз различить первоначальное и разархивированное изображения. Хорошей - когда сказать, какое из изображений подвергалось
- один из самых новых и достаточно мощных алгоритмов. Практически он является стандартом де-факто для полноцветных изображений [6.1]. Оперирует алгоритм областями 8х8, на которых яркость и цвет меняются сравнительно плавно. Вследствие этого, при разложении матрицы такой области в двойной ряд по косинусам (см. формулы ниже) значимыми оказываются только первые коэффициенты. Таким образом, сжатие в осуществляется за счет плавности изменения цветов в изображении.
Алгоритм разработан группой экспертов в области фотографии специально для сжатия 24-битных изображений. -
ДКП раскладывает изображение по амплитудам некоторых частотных компонент. Таким образом, при преобразовании мы получаем матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать коэффициенты более грубо без заметной потери качества изображения.
Для этого используется ). В самом простом случае - это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но может достигаться большая степень сжатия.
Итак, рассмотрим алгоритм подробнее. Пусть мы сжимаем 24-битное изображение.
Шаг 1.
Переводим изображение из цветового пространства , с компонентами, отвечающими за красную (Red), зеленую (YCrCb (иногда называют ).
В нем Y - яркостная составляющая, а Cr, Cb - компоненты, отвечающие за цвет (хроматический красный и хроматический синий). За счет того, что человеческий глаз менее чувствителен к цвету, чем к яркости, появляется возможность архивировать массивы для Cr и Cb компонент с большими потерями и, соответственно, большими степенями сжатия. Подобное преобразование уже давно используется в телевидении. На сигналы, отвечающие за цвет, там выделяется более узкая полоса частот.
Упрощенно перевод из цветового пространства в цветовое пространство YCrCb можно представить с помощью
на обратную матрицу.
Шаг 2.
Разбиваем исходное изображение на матрицы 8х8. Формируем из каждой три рабочие матрицы ДКП - по 8 бит отдельно для каждой компоненты. При больших степенях сжатия этот шаг может выполняться чуть сложнее. Изображение делится по компоненте Y - как и в первом случае, а для компонент Cr и Cb матрицы набираются через строчку и через столбец. Т.е. из исходной матрицы размером 16x16 получается только одна рабочая матрица ДКП. При этом, как нетрудно заметить, мы теряем 3/4 полезной информации о цветовых составляющих изображения и получаем сразу сжатие в два раза. Мы можем поступать так благодаря работе в пространстве YCrCb. На результирующем изображении, как показала практика, это сказывается несильно.
Шаг 3.
В упрощенном виде ДКП при n=8 можно представить так:
где
$$C(i,u) = \matrix{ {A(u) \times } {\cos \left( {{\textstyle{{(2 \times i + 1) \times u \times \pi } \over {2 \cdot n}}}} \right)} \cr } $$ $$A(u) = \left\{ {\matrix{ {{\textstyle{1 \over {\sqrt 2 }}}\matrix{ , {\matrix{ {{\rm{for}}} {\matrix{ {\matrix{ {\rm{u}} \equiv \cr } } 0 \cr } } \cr } } \cr } } \hfill \cr {\matrix{ {{\rm{1}}{\rm{,}}} \hfill {{\rm{ for}}} \hfill {{\rm{u}} \ne {\rm{0}}} \hfill \cr } } \hfill \cr } } \right.$$Применяем ДКП к каждой рабочей матрице. При этом мы получаем матрицу, в которой коэффициенты в левом верхнем углу соответствуют низкочастотной составляющей изображения, а в правом нижнем - высокочастотной. Понятие частоты следует из рассмотрения изображения как двумерного сигнала (аналогично рассмотрению звука как сигнала). Плавное изменение цвета соответствует низкочастотной составляющей, а резкие скачки - высокочастотной.
Шаг 4.
Производим Y, U и V ), в общем случае, задается своя матрица q[u,v] (далее МК).
На этом шаге осуществляется управление степенью сжатия, и происходят самые большие потери. Понятно, что, задавая МК с большими коэффициентами, мы получим больше нулей и, следовательно, большую степень сжатия.
В стандарт включены рекомендованные МК, построенные опытным путем. Матрицы для большей или меньшей степени сжатия получают путем умножения исходной матрицы на некоторое число .
С квантованием связаны и специфические эффекты алгоритма. При больших значениях коэффициента
Шаг 5.
Переводим матрицу 8x8 в 64-элементный вектор при помощи "зигзаг"-сканирования, т.е. берем элементы с индексами (0,0), (0,1), (1,0), (2,0)... (рис. 6.1)
(рис 6.1) Таким образом, в начале
Шаг 6.
Свертываем вектор с помощью алгоритма группового кодирования. При этом получаем пары типа (пропустить, число), где "пропустить" является счетчиком пропускаемых нулей, а "число" - значение, которое необходимо поставить в следующую ячейку. Так, вектор 42 3 0 0 0 -2 0 0 0 0 1 ... будет свернут в пары (0,42) (0,3) (3,-2) (4,1) ....
Шаг 7.
Свертываем получившиеся пары кодированием по Хаффману с фиксированной таблицей.
Процесс восстановления изображения в этом алгоритме полностью симметричен. Метод позволяет сжимать некоторые изображения в 10-15 раз без серьезных потерь. (рис. 6.2)
(рис 6.2) Конвейер операций, используемый в алгоритме JPEGСущественными положительными сторонами алгоритма является то, что:
Отрицательными сторонами алгоритма является то, что:
Как уже говорилось, стандартизован относительно недавно - в 1991 году. Но уже тогда существовали алгоритмы, сжимающие сильнее при меньших потерях качества. Дело в том, что действия разработчиков стандарта были ограничены
Выполнение последнего требования сделало возможным появление таких устройств, как
Не очень приятным свойством является также то, что нередко горизонтальные и вертикальные полосы на не рекомендуется активно использовать в
Широкое применение долгое время сдерживалось, пожалуй, лишь тем, что он оперирует 24-битными изображениями. Поэтому для того, чтобы с приемлемым качеством посмотреть картинку на обычном мониторе в 256-цветной палитре, требовалось применение соответствующих алгоритмов и, следовательно, определенное время. В приложениях, ориентированных на придирчивого пользователя, таких, например, как игры, подобные задержки неприемлемы. Кроме того, если имеющиеся у вас изображения, допустим, в 8-битном формате перевести в 24-битный , а потом обратно в оказывается очень эффективным.
Несколько слов необходимо сказать о модификациях этого алгоритма. Хотя и является стандартом , формат его файлов не был зафиксирован. Пользуясь этим, производители создают свои, несовместимые между собой форматы, и, следовательно, могут изменить алгоритм. Так, внутренние таблицы алгоритма, рекомендованные , заменяются ими на свои собственные. Кроме того, легкая неразбериха присутствует при задании степени потерь. Например, при тестировании выясняется, что "отличное" качество, "100%" и "10 баллов" дают существенно различающиеся картинки. При этом, кстати, "100%" качества не означают сжатие без потерь. Встречаются также варианты
Как стандарт начинает все шире использоваться при обмене изображениями в в форматах Quick Time, и, на данный момент, занимает видное место в системах
Степень сжатия: 2-200 (Задается пользователем).
Класс изображений: Полноцветные 24 битные изображения или изображения в градациях серого без резких переходов цветов (фотографии).
Симметричность: 1
Характерные особенности: В некоторых случаях, алгоритм создает "ореол" вокруг резких горизонтальных и вертикальных границ в изображении (эффект Гиббса). Кроме того, при высокой степени сжатия изображение распадается на блоки 8х8 пикселов.
Фрактальная архивация основана на том, что мы представляем изображение в более компактной форме - с помощью - далее по тексту как IFS ). Прежде, чем рассматривать сам процесс IFS строит изображение, т.е. процесс декомпрессии.
Строго говоря, IFS представляет собой набор трехмерных аффинных преобразований, в нашем случае переводящих одно изображение в другое. Преобразованию подвергаются точки в трехмерном пространстве (х_координата, у_координата, яркость).
Наиболее наглядно этот процесс продемонстрировал Барнсли в своей книге " ". Там введено понятие Фотокопировальной Машины, состоящей из экрана, на котором изображена исходная картинка, и системы линз, проецирующих изображение на другой экран: (рис. 6.3)
(рис 6.3) Машина БарнслиРасставляя линзы и меняя их характеристики, мы можем управлять получаемым изображением. Одна итерация работы Машины заключается в том, что по исходному изображению с помощью проектирования строится новое, после чего новое берется в качестве исходного. Утверждается, что в процессе IFS. Соответствующая теория гарантирует наличие ровно одной неподвижной точки для каждой IFS.
Поскольку отображение линз является сжимающим, каждая линза в явном виде задает самоподобные области в нашем изображении. Благодаря
Наиболее известны два изображения, полученных с помощью IFS: "треугольник Серпинского" (рис. 6.4) и "папоротник Барнсли" рис. 6.5.
(рис 6.4) Треугольник Серпинского. Задается 3 преобразованиями"Треугольник Серпинского" задается тремя, а "папоротник Барнсли" четырьмя аффинными преобразованиями (или, в нашей терминологии, "линзами"). Каждое преобразование кодируется буквально считанными байтами, в то время как изображение, построенное с их помощью, может занимать и несколько
(рис 6.5) Папоротник Барнсли. Задается 4 преобразованиямиИз вышесказанного становится понятно, как работает
(рис 6.6) В худшем случае, если не будет применяться оптимизирующий алгоритм, потребуется перебор и сравнение всех возможных фрагментов изображения разного размера. Даже для небольших изображений при учете дискретности мы получим астрономическое число перебираемых вариантов. Причем, даже резкое сужение классов преобразований, например, за счет масштабирования только в определенное количество раз, не дает заметного выигрыша во времени. Кроме того, при этом теряется качество изображения. Подавляющее большинство исследований в области фрактальной компрессии сейчас направлены на уменьшение времени
Далее приводятся основные определения и теоремы, на которых базируется фрактальная компрессия. Этот материал более детально и с
Определение. Преобразование $$w:R^2 \to R^2$$, представимое в виде
$$w(\bar \rangle ) = w \left( \begin{array}{c} x \\ y \\ \end{array} \right) = \left( \begin{array}{cc} a b \\ c b \\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ \end{array} \right) $$где a, b, c, d, e, f
Определение. Преобразование , представимое в виде
$$w(\bar \rangle ) = w \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) = \left( \begin{array}{ccc} a b t\\ c d u\\ r s p\\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ q \\ \end{array} \right) $$где a, b, c, d, e, f, p, q, r, s, t, u
Определение. Пусть $$f:{\rm X} \to {\rm X} $$
- преобразование в пространстве Х. Точка $$x_f \in {\rm X}
$$
такая, что $$f(x_f ) = x_f
$$
называется неподвижной точкой (аттрактором) преобразования.
Определение. Преобразование $$f:{\rm X} \to {\rm X}$$
в (Х, d) называется сжимающим, если существует число s: $$0 \le s < 1 $$, такое, что
Замечание: Формально мы можем использовать любое сжимающее отображение при фрактальной компрессии, но реально используются лишь трехмерные аффинные преобразования с достаточно сильными ограничениями на коэффициенты.
Теорема. (О сжимающем преобразовании)
Пусть $$f:{\rm X} \to {\rm X}
$$
- сжимающее преобразование в полном (Х, d). Тогда существует в точности одна неподвижная точка $$x_f \in {\rm X}$$ этого преобразования, и для любой точки $$x \in {\rm X}$$ последовательность $$\left\{ {\left. {f^n (x)\matrix{
: {n = } \cr
} \matrix{
{0,1,2...} {} \cr
} } \right\}} \right$$.
сходится к $$x_f
$$.
Более общая формулировка этой теоремы гарантирует нам
Определение. Изображением называется функция S, определенная на единичном квадрате и принимающая значения от 0 до 1 или $$S(x,y) \in \left[ {0...1} \right]\matrix{
{} {\forall x,y} \cr
} \in \left[ {0...1} \right]
$$
Пусть трехмерное аффинное преобразование $$w_i :R^3 \to R^3$$, записано в виде
$$w_i(\bar \rangle ) = w_i \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) = \left( \begin{array}{ccc} a b 0\\ c d 0\\ 0 0 p\\ \end{array} \right) \left( \begin{array}{c} x \\ y \\ z \\ \end{array} \right) + \left( \begin{array}{c} e \\ f \\ q \\ \end{array} \right) $$
и определено на компактном [0..1]x[0..1] (мы пользуемся особым видом матрицы преобразования, чтобы уменьшить S в область $$R_i,$$ расположенную со сдвигом (e,f) и поворотом, заданным матрицей
$$\left( \begin{array}{ccc} a b 0\\ c d 0\\ 0 0 0\\ \end{array} \right) .$$
При этом, если интерпретировать p раз (преобразование обязано быть сжимающим) и изменится на сдвиг q.
Определение. Конечная совокупность W сжимающих трехмерных аффинных преобразований $$w_i$$, определенных на областях $$D_i$$, таких, что $$w_i (D_i ) = R_i$$
и $$R_i \cap R_j = \matrix{
{\not o} {\forall i \ne j} \cr
}
$$, называется системой итерируемых функций (IFS).
Системе итерируемых функций однозначно сопоставляется неподвижная точка - изображение. Таким образом, процесс компрессии заключается в поиске
Как уже стало очевидным из изложенного выше, основной задачей при компрессии фрактальным алгоритмом является нахождение соответствующих аффинных преобразований. В самом общем случае мы можем переводить любые по размеру и форме области изображения, однако в этом случае получается астрономическое число перебираемых вариантов разных фрагментов, которое невозможно обработать на текущий момент даже на
В учебном варианте алгоритма рис. 6.7, изложенном далее, сделаны следующие ограничения на области:
Х, и по Y, что сразу уменьшает перебор в 4 раза.0, 90, 180 градусов или 270 градусов. Также допускается зеркальное отражение. Общее число возможных преобразований (считая пустое) - 8.0,75.
(рис 6.7) Эти ограничения позволяют:
IFS:Информацию о размере блоков можно хранить в заголовке файла. Таким образом, мы затратили менее 4 байт на одно аффинное преобразование. В зависимости от того, каков размер блока, можно высчитать, сколько блоков будет в изображении. Таким образом, мы можем получить оценку степени компрессии.
Например, для файла в градациях серого 256 цветов 512х512 пикселов при размере блока 8 пикселов аффинных преобразований будет 4096 (512/8 512/8). На каждое потребуется 3.5 байта. Следовательно, если исходный файл занимал 262144 (512 512) байт (без учета заголовка), то файл с коэффициентами будет занимать 14336 байт. Степень сжатия - 18 раз. При этом мы не учитываем, что файл с коэффициентами тоже может обладать избыточностью и архивироваться методом .
Отрицательные стороны предложенных ограничений:
Такова плата за скорость компрессии и за простоту упаковки коэффициентов в файл.
Сам алгоритм упаковки сводится к перебору всех доменных блоков и подбору для каждого соответствующего ему рангового блока. Ниже приводится схема этого алгоритма.
for (all range blocks) {
min_distance = MaximumDistance;
Rij = image->CopyBlock(i,j);
for (all domain blocks) { // С поворотами и отр.
current=Координаты тек. преобразования;
D=image->CopyBlock(current);
current_distance = Rij.L2distance(D);
if(current_distance < min_distance) {
// Если коэффициенты best хуже:
min_distance = current_distance;
best = current;
}
} // Next range block
Save_Coefficients_to_file(best);
} // Next domain block
Как видно из приведенного алгоритма, для каждого рангового блока делаем его проверку со всеми возможными доменными блоками (в том числе с прошедшими преобразование
$$q = \left[ {\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {d_{ij} } } } \right. - \left. {\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {r_{ij} } } } \right]/n^2 $$
где $$r_{ij}$$ - значения пикселов рангового блока (R), а $$d_{ij}$$ - значения пикселов доменного блока (D). При этом мера считается как:
$$d(R,D) = \sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {(0.75r_{ij} + q - d_{ij} )^2 } }$$
Мы не вычисляем квадратного корня из $${\rm{l}}_{\rm{2}}$$ меры и не делим ее на n, поскольку данные преобразования монотонны и не помешают нам найти
Посчитаем количество операций, необходимых нам для сжатия изображения в градациях серого 256 цветов 512х512 пикселов при размере блока 8 пикселов (табл. 6.1):
| Часть программы | Число операций |
|---|---|
for (all |
4096 (=512/8 512/8) |
for (all |
492032 (=(512/2-8)* (512/2-8)*8) |
Вычисление q и d(R,D) |
> 3*64 операций "+" > 2*64 операций " " |
| Итог: | > 3* 128.983.236.608 операций "+"> |
Таким образом, нам удалось уменьшить число операций алгоритма компрессии до вполне вычисляемых (пусть и за несколько часов) величин.
Декомпрессия алгоритма фрактального сжатия чрезвычайно проста. Необходимо провести несколько
В качестве начального может быть взято абсолютно любое изображение (например, абсолютно черное), поскольку соответствующий математический аппарат гарантирует нам IFS, к неподвижному изображению (близкому к исходному). Обычно для этого достаточно 16
Прочитаем из файла коэффициенты всех блоков;
Создадим черное изображение нужного размера;
Until(изображение не станет неподвижным){
For(every range (R)){
D=image->CopyBlock(D_coord_for_R);
For(every pixel(i,j) in the block{
Rij = 0.75Dij + oR;
} //Next pixel
} //Next block
}//Until end
Поскольку мы записывали коэффициенты для блоков $$r_{ij}$$ (которые, как мы оговорили, в нашем частном случае являются
Как можно подсчитать, количество операций на один пиксел изображения в градациях серого при восстановлении необычайно мало ( N операций сложения "+" и N операций умножения "*", где N - количество . В простой реализации на точку приходится 64 операции сложения "+" и 64 операции умножения "*". При реализации быстрого ДКП можно получить, 7 сложений и 5 умножений на точку, но это без учета шагов RLE,
При кратком изложении упрощенного варианта алгоритма были пропущены многие важные вопросы. Например, что делать, если алгоритм не может подобрать для какого-либо фрагмента изображения подобный ему? Достаточно очевидное решение - разбить этот фрагмент на более мелкие, и попытаться поискать для них. В то же время понятно, что эту процедуру нельзя повторять до бесконечности, иначе количество необходимых преобразований станет так велико, что алгоритм перестанет быть алгоритмом компрессии. Следовательно, мы допускаем потери в какой-то части изображения.
Для фрактального алгоритма компрессии, как и для других алгоритмов сжатия с потерями, очень важны механизмы, с помощью которых можно будет регулировать степень сжатия и степень потерь. К настоящему времени разработан достаточно большой набор таких методов. Во-первых, можно ограничить количество аффинных преобразований, заведомо обеспечив степень сжатия не ниже фиксированной величины. Во-вторых, можно потребовать, чтобы в ситуации, когда разница между обрабатываемым фрагментом и наилучшим его приближением будет выше определенного порогового значения, этот фрагмент дробился обязательно (для него обязательно заводится несколько "линз"). В-третьих, можно запретить дробить фрагменты размером меньше, допустим, четырех точек. Изменяя пороговые значения и приоритет этих условий, мы будем очень гибко управлять коэффициентом компрессии изображения в диапазоне от побитового соответствия до любой степени сжатия. Заметим, что эта гибкость будет гораздо выше, чем у ближайшего "конкурента" - алгоритма .
Степень сжатия: 2-2000 (Задается пользователем).
Класс изображений: Полноцветные 24 битные изображения или изображения в градациях серого без резких переходов цветов (фотографии). Желательно, чтобы области большей значимости (для восприятия) были более контрастными и резкими, а области меньшей значимости - неконтрастными и размытыми.
Симметричность: 100-100000
Характерные особенности: Может свободно масштабировать изображение при разархивации, увеличивая его в 2-4 раза без появления "лестничного эффекта". При увеличении степени компрессии появляется "блочный" эффект на границах блоков в изображении.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.