МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Цифровая обработка графики

    недостаток - большой занимаемый объем, проблемы с масштабированием. У

    векторных наоборот, преимущество - небольшой занимаемый объем, легкость

    масштабирования, недостаток - необходимость предварительной обработки перед

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

    сцены вынесены в отдельный класс, так как в процессе их создания (например,

    прямой или обратной трассировкой луча, методом излучательности) можно

    получить дополнительные данные (характеристики прямого и диффузного

    отражения света, преломления ... объектов сцены) и использовать их при

    дальнейшей обработке. Изображения, как результат опыта и т.п. необходимо

    обработать, с целью выявить его особые характеристики, например, выделить

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

    рассматривать в основном растровые изображения.

    Форматирование и индексирование изображения.

    В данном разделе будем рассматривать изображение как прямоугольную матрицу

    A={ai,j} с N столбцами и M строками, где N - ширина изображения в пикселях,

    M - высота изображения в пикселях. Рассмотрим основные форматы, применяемые

    в компьютерной обработке изображений:

    Черно-белый. Каждый элемент матрицы представлен одним битом. Если он равен

    единице, то он отождествляется с черным цветом, если равен нулю - с белым.

    Это самый простой формат, он применяется при печати газет, распознавании

    текстов и подписей.

    Grayscale(градации серого).Отличие данного формата от предыдущего в том,

    что для каждого элемента матрицы отводится 8 битов (байт). Это позволит нам

    использовать 28=256 уровней серого цвета. Если ai,j=0, то имеем белый цвет,

    с возрастанием до 255 мы будем терять яркость и при ai,j=255 получим черный

    цвет. В промежутке от 0 до 255 будут располагаться серые цвета по правилу:

    чем ближе значение к 255, тем чернее будет серый. Данный формат позволяет

    получать довольно качественные черно-белые изображения. Значения ai,j

    содержат обратную яркость, т.е. значение (1 - L)*255, где L - яркость,

    которая может быть получена, например из RGB цветовых изображений по

    формуле:

    L = aR + bG + cG,

    где R,G,B лежат в интервале [0;1], а веса a, b, c в сумме дают единицу.

    Иногда, для хранения grayscale изображений используют на точку 4-7 и 16

    битов. В таком случае мы имеем 16-128 или 65536 оттенков серого цвета.

    Многоканальные. В данном случае ai,j представлен в виде вектора с

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

    как природа глаза реагирует на три различных цветовых составляющих. Каждый

    компонент вектора чаще всего занимает байт. Рассмотрим наиболее

    распространенные многоканальные форматы:

    |Название |Соотношен|1-ый |2-ой |3-ий |

    | |ие бит |компонент |компонент |компонент |

    |RGB - |8:8:8 |Красный0-255|Зеленый0..25|Синий0-255 |

    |Truecolor | | |5 | |

    |RGB - |5:6:5/5:5|Красный0-31 |Зеленый0.63/|Синий0-31 |

    |Highcolor |:5 | |31 | |

    |RGB - |12:12:12/|Красный |Зеленый |Синий0-4095 |

    |Extended |16:16:16 |0-4095/0-655|0-4095/0-655|/0-65535 |

    | | |35 |35 | |

    |CMY |8:8:8 |Голубой0-255|Пурпур0-255 |Желтый0-255 |

    |LAB |8:8:8 |Яркость0-255|Канал A |Канал B |

    | | | |0-100% |0-100% |

    |YIQ |8:8:8 |Яркость0-255|Синфазный |Интегрирован|

    | | | |0-255 |ный 0-255 |

    |HLS |8:8:8 |Тон 0-3600 |Яркость0-100|Насыщенность|

    | | | |% |0-100% |

    |HSB |8:8:8 |Тон 0-3600 |Насыщенность|Яркость0-100|

    | | | |0-100% |% |

    Встречаются четырех и более мерные вектора, например, модель CMYK, она

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

    модели называют дуплексами. Их применяют в полиграфии, например, при печати

    стандартного grayscale изображения, реально в промышленности оно будет

    выполнено лишь в ~50 градациях серого, и для повышения числа градаций

    вводят вторую краску.

    Индексированный. Для уменьшения объемов изображения или для использования

    определенных цветов используют данный формат. Элемент матрицы ai,j является

    указателем на таблицу цветов. Число используемых цветов равно 2K, где K -

    количество бит, используемый для хранения элемента матрицы. Цвета в

    указываемой таблице могут кодироваться другим числом бит. Например, в 256

    цветовых режимах видеоадаптеров выбирается 256 цветов из 262144 возможных,

    так как выбираемые цвета представляются в RGB формате и для каждой цветовой

    компоненты кодируется 6-ю битами. Существует много методов преобразования

    многоканальных изображения в индексированные (Error diffusion, ближайшего

    цвета ...).

    Фильтрация изображения.

    Понятие фильтрации в данном случае весьма обширно, и включает в себя любое

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

    только в виде формулы, но и в виде алгоритма, его реализующая. Человек

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

    1. Низкочастотные составляющие изображения. Они несут информацию о

    локализации объектов, составляющих изображения. Эта составляющая наиболее

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

    2. Высокочастотные составляющие изображения. Они отвечают за цветовые

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

    изображения.

    3. Текстуры изображения. Чтобы понятно объяснить, что это такое проведем

    небольшой эксперимент. Расслабьтесь, вспомните интерьер вашего дома,

    например, письменный стол. Вы знаете его очертания, местоположение, цвет

    - это низкочастотные характеристики, вспомнили его заостренные углы,

    небольшую царапину где-нибудь ближе к его кромке - это высокочастотные

    составляющие. Также Вы знаете, что стол деревянный, но не можете в

    точности рассказать обо всех мельчайших деталях его поверхности, хотя

    общие характеристики (коричневый с темными впадинами, две области

    расхождения концентрических эллипсов от сучков) - наверняка. В данном

    случае в скобках - описание текстуры. Можно трактовать текстуру как

    характеристику участков в контурах изображения.

    Будем рассматривать фильтры в виде квадратной матрицы A. Пусть

    исходное изображение X, а получаемое как результат фильтрации - Y. Для

    простоты будем использовать матрицы 3x3:

    [pic]

    Рекурсивными фильтрами первого рода будут такие фильтры, выход Y

    которых формируется перемножением весовых множителей A с элементами

    изображения X. Для примера рассмотрим фильтры низких частот:

    [pic].

    Фильтром низких частот пользуются часто для того, чтобы подавить шум в

    изображении, сделать его менее резким. Используя фильтр A3 , будем получать

    изображение Y следующим образом:

    [pic]Выход фильтра второго рода формируется аналогично первому, плюс

    фильтра B:

    [pic]

    Для простоты рассмотрим одномерный фильтр вида:[pic]:

    [pic]Рассмотрим и другие фильтры:

    1. Высокочастотные (для подчеркивания резкости изображения):

    [pic]

    2. Для подчеркивания ориентации:

    [pic]

    3. Подчеркивание без учета ориентации (фильтры Лапласа):

    [pic].

    4. Корреляционный:

    [pic],где

    [pic]- коэффициенты корреляции между соседними элементами по строке

    (столбцу). Если они равны нулю то отфильтрованное изображение будет

    совпадать с исходным, если они равны единице, то фильтр будет эквивалентен

    лапласиану. При обработке изображений очень часто используют

    последовательность фильтров: низкочастотный + Лапласа. Часто используют и

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

    используют градиентный фильтр:

    [pic], или его упрощенный вид:

    [pic].

    Еще один часто используемый нелинейный фильтр - Собела:

    A0 ... A7 - входы, yi,j - результат фильтрации.

    [pic] [pic]

    Рекурсивная версия :

    [pic]где B0 ... B7 - выход отфильтрованного изображения.

    Нелинейная фильтрация - достаточно загадочная область цифровой обработки

    сигналов, многое еще в ней пока не изучено. Важность же ее не вызывает

    сомнений, потому, что окружающий нас мир по своей сути не так линеен, как

    порою хочется его нам интерпретировать.

    3.Сжатие.

    Изображения, в машинном представлении, - двумерная матрица N на M, где

    N - его ширина, M - высота. При сканировании обычно используют разрешение

    от 72 до 2400 dpi (dots per inch - точек на дюйм). Наиболее часто - 300

    dpi. Если взять лист бумаги 21/29 см с изображением и отсканировать его в

    RGB Truecolor, то несжатое изображение будет занимать ~27300000 байтов или

    26 Мбайт. Обычно в базах данных применяют изображения порядка от 320x240 до

    640x480. Но и они занимают 76 до 900 Кбайт. А что, если таких изображений

    сотни, тысячи? В данном разделе рассмотрим методы сжатия. Они применительны

    для любых массивов данных, а не только для изображений. О методах сжатия,

    характерных только для изображений узнаем немного позже. Будем

    рассматривать статическое сжатие, то есть массив данных для сжатия целиком

    сформирован. Методы сжатия статического часто подразделяют на

    последовательное и энтропийное. Последовательное сжатие использует в работе

    наличие повторяющихся участков. Энтропийное используется с целью сокращения

    к минимуму избыточности информации. Последовательное применение этих

    методов позволяет получить хороший результат.

    Последовательное сжатие.

    Наиболее часто применяют метод RLE, суть которого рассмотрим на

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

    встречаются последовательности одинаковых байтов. Например, в участке

    изображения, в котором нарисована часть неба, идут подряд несколько

    значений голубого цвета. Для участка вида: ККККККККЗЗЗЗСЗССССССССС , где К-

    красный, З - зеленый, С - синий цвета, будет закодирован как

    (8,К),(4,З),С,З,(10,С). В скобках - пары количество повторений, значение

    байта. Вот как данный метод применяется в формате PCX. Декодирование: если

    код принадлежит множеству [192..255], то вычитаем из него 192 и получаем

    количество повторений следующего байта. Если же он меньше 192, то помещаем

    его в декодируемый поток без изменений. Оригинально кодируются единичные

    байты в диапазоне [192..255] - двумя байтами, например, чтобы закодировать

    210 необходимо, представить его как (193, 210). Данный метод дает выигрыш в

    среднем в 2 раза. Однако для отсканированных изображений, содержащих

    плавные цветовые переходы (то есть повторяющиеся цепочки почти не

    встречаются), данный метод может преподнести сюрприз - размер массива с

    закодированным изображением будет больше исходного.

    Наиболее распространены в настоящее время модификации алгоритма LZ (по

    имени их авторов - Лемпела и Зива). По сравнению с RLE сделан шаг вперед -

    будем искать в исходном материале не последовательности одинаковых видов, а

    повторяющихся цепочек символов. Повторяющие цепочки в кодированном

    сообщении хранятся как ссылка на первое появление данной цепочки. Например,

    в цепочке КЗСЗБСКЗСЗБ начиная с 7 символа, идет цепочка КЗСЗ, которую мы

    можем заменить ссылкой на 1-ый символ. Рассмотрим наиболее распространенные

    реализации алгоритма LZ:

    1. LZ77 - при работе выдает тройки вида (A, B, C), где A - смещение (адрес

    предыдущей цепочки B байтов которой совпадают с кодируемой цепочкой), B -

    длина цепочки, C - первый символ в кодируемом массиве, следующий за

    цепочкой. Если совпадение не обнаружено то создается тройка вида (0, 0, С),

    где C - первый символ кодируемой цепочки. Недостаток такого подхода

    очевиден - при кодировании «редких» байтов мы «сжимаем» один байт в три.

    Преимущество - простота реализации, большая скорость декодирования.

    2. LZSS - создает при работе вектора вида (флаг, C) и (флаг, A, B). Если

    битовый флаг=0, то следующий за ним C трактуется, как единичный байт и

    выдается в декодируемый массив. Иначе, когда флаг=1, то в декодируемый

    массив выдается цепочка длиною B по смещению A. LZSS кодирует намного более

    эффективно, по сравнению с LZ77, так как использует битовые флаги и мало

    проигрывает при кодировании одиночных символов. При кодировании строится

    словарь встречающихся цепочек в виде двоичного упорядоченного дерева.

    Скорость и простота алгоритма декодирования массива у LZSS также высока.

    3. LZMX (упрощенный LZM) - данный алгоритм предназначен для скоростного

    кодирования и по эффективности уступает LZSS, заметно обгоняя его по

    скорости работы. При работе кодер LZMX формирует несколько векторов вида:

    4. (0, A, несжатый поток) - где 00 -2х битовый флаг признака

    данного блока, A (7 битов с диапазоном в [1..127]) - длина

    следующего за ним несжатого потока в байтах..

    5. (0, 0000000, A, B) - где, A - количество повторяющего байта B.

    То есть код RLE.

    6. (1, A, B) - где A(7 битов с диапазоном в [1..127]) - длина

    декодируемой цепочки, B - ее смещение.

    Для быстрого поиска повторяющихся цепочек используется хеш. Индекс - 12

    битовый, вычисляется как [ (a*4) xor (b*2) ] xor c, где a, b, c - первые

    символы цепочки. Индекс дает смещение в массиве ранее встреченной цепочки с

    теми же первыми символами. Использование хеша и дает высокую скорость

    кодирования.

    Декодирование также имеет большую скорость - читается бит - флаг, если он

    есть 0 и следующие за ним 7 битов также ноль, читаем следующие два байта -

    A и B и копируем в выходной массив байт B A - раз: если при флаге=0

    следующие 7 битов=A больше нуля, то в выходной массив копируем A байтов

    следующих за A. И, наконец, если флаг установлен в единицу, то читаем A и

    следующий за ним байт B и копируем в выходной массив цепочку длиною A байт

    со смещения B.

    Существуют и другие модификации алгоритма LZ (LZW, LZS, LZ78 ...).

    Общее свойство LZ - высокая скорость декодирования. Общая проблема -

    эффективность поиска кодируемых цепочек. Модификация данного алгоритма

    используется в графическом формате GIF.

    Энтропийное сжатие.

    Энтропийное сжатие в отличие от последовательного, в качестве информации о

    входном массиве использует только частоты встречаемости в нем отдельных

    байтов. Эту информацию он использует как при кодировании, так и при

    декодировании массива. Ее представляют в виде 256 компонентного вектора,

    координата i которого представляет собой сколько раз байт со значением i

    встречается в исходном массиве. Данный вектор занимает небольшое

    пространство и почти не влияет на степень компрессии. Многие методы

    энтропийного кодирования видоизменяют данный вектор в соответствии с

    используемым алгоритмом. Рассмотрим два наиболее часто используемых

    методов:

    Метод Хаффмана. Данный метод сокращает избыточность массива, создавая

    при кодировании переменную битовую длину его элементов. Основной принцип

    таков: наиболее часто встречающемуся байту - наименьшую длину, самому

    редкому - наибольшую. Рассмотрим простейший пример кодирования методом

    Хаффмана - способ конечного нуля. Любой элемент кодируется цепочкой битов,

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

    закодируем одним битом - 0, следующий за ним по частоте как 10, далее -

    110, 1110, 11110 и т.д. Процедура декодирования также очевидна.

    Рассмотрим вышесказанное на примере. Пусть дана часть изображения

    длиной 80 бит - десять цветов и каждый из них закодирован одним байтом

    (индексированное 256 цветами изображение): КЗСГКСКБСК (где К - красный, З -

    зеленый и т.д.). Закодируем его. Построим таблицу частоты встречаемости

    цвета и кода ему соответствующего:

    |Цвет |Частота |Код |

    |К |4 |0 |

    |З |1 |110 |

    |С |3 |10 |

    |Г |1 |1110 |

    |Б |1 |11110|

    Таким образом, мы закодировали исходный массив как 0 110 10 1110 0 10 0

    11110 10 0. Итого: длина выходного сообщения - 22 бита. Степень компрессии

    ~4.

    Метод арифметического кодирования. Данный метод появился позднее. Его

    принцип - кодирование исходного массива одним числом. Часто входной массив

    разбивают на одинаковые небольшие участки и кодируют их по отдельности,

    получая в результате последовательность кодовых чисел. Закодируем

    предыдущий пример числом, лежащим в единичном диапазоне. Схема кодировки

    следующая. Строим таблицу частот, каждому элементу таблицы ставим в

    соответствие диапазон, равный его частоте поделенной на длину входного

    массива. Устанавливаем верхнюю границу ВГ в 1, нижнюю НГ в 1. Далее N раз

    выполняем следующую последовательность действий (где N - длина кодируемого

    участка или всего массива):

    1. Читаем из массива очередной символ.

    2. Установка текущего интервала. Интервал И = ВГ - НГ.

    3. ВГ = НГ + И*ВГ символа (берем из таблицы).

    4. НГ = НГ + И*НГ символа (берем из таблицы).

    Рассмотрим на примере: КЗСГКСКБСК. Построим необходимую таблицу:

    |Цвет |Частота|Нижняя граница |Верхняя граница |

    | | |НГ |ВГ |

    |К |4 |0 |0.4 |

    |З |1 |0.4 |0.5 |

    |С |3 |0.5 |0.8 |

    |Г |1 |0.8 |0.9 |

    |Б |1 |0.9 |1 |

    Теперь, собственно, сама процедура кодирования:

    |Шаг |Символ |НГ |ВГ |Интервал |

    |0 | |0 |1 |1 |

    |1 |К |0 |0.4 |0.4 |

    |2 |З |0.16 |0.2 |0.04 |

    |3 |С |0.18 |0.192 |0.012 |

    |4 |Г |0.1896 |0.1908 |0.0012 |

    |5 |К |0.1896 |0.19008 |0.00048 |

    |6 |С |0.18984 |0.189984 |0.000144 |

    |7 |К |0.18984 |0.1898976 |0.0000576 |

    |8 |Б |0.1898918|0.1898976 |0.00000576 |

    | | |4 | | |

    |9 |С |0.1898947|0.189896448|0.000001728|

    | | |2 | | |

    |10 |К |0.1898947|0.189895411|0.000000691|

    | | |2 |2 |2 |

    Таким образом, любое число в диапазоне [0.18989472 .. 0.1898954112]

    однозначно кодирует исходный массив. В двоичном дробном виде как

    0.XXXXXXXX...Для хранения такого числа хватит n бит (размерность

    XXXXXXXX....), где n ближайшее целое, удовлетворяющее неравенству: 2n >

    Интервал-1=0.0000006912-1. Искомое n равно 21. То есть мы можем

    закодировать исходный массив 21 битом. В данном примере -

    001100001001110111111. Процедура декодирования обратная и состоит в

    выполнении n раз следующего:

    1. Ищем в таблице интервал, в который попадает наше число Ч, и выдаем

    символ в него входящий в декодируемый массив.

    2. Интервал И = ВГ символа - НГ символа (оба значения - из таблицы).

    3. Ч = (Ч - НГ) / И.

    |Шаг |Число |Символ |НГ |ВГ |Интервал|

    |1 |0.1898947|К |0 |0.4|0.4 |

    | |2 | | | | |

    |2 |0.4747368|З |0.4|0.5|0.1 |

    |3 |0.747368 |С |0.5|0.8|0.3 |

    |4 |0.82456 |Г |0.8|0.9|0.1 |

    |5 |0.2456 |К |0 |0.4|0.4 |

    |6 |0.614 |С |0.5|0.8|0.3 |

    |7 |0.38 |К |0 |0.4|0.4 |

    |8 |0.95 |Б |0.9|1 |0.1 |

    |9 |0.5 |С |0.5|0.8|0.3 |

    |10 |0 |К |0 |0.4|0.4 |

    В данном примере арифметический кодер «обогнал» метод Хаффмана на 1 бит. В

    отличие от метода Хаффмана трудоемкость алгоритма значительна. В чем же

    тогда «полезность» алгоритма? Рассмотрим последовательность КККККККС. При

    кодировании методом Хаффмана получим выходную последовательность длиной в 9

    бит (можно и в 8, так как массив состоит из 2 разных байт). При

    арифметическом кодировании данную последовательность можно закодировать

    числом 0.4375 или в двоичном виде как 0111, занимающей 4 бита. То есть при

    арифметическом кодировании возможно получать плотность кодирования меньше

    бита на символ. Это свойство проявляется, когда во входном массиве частоты

    некоторых символов значительно выше остальных.

    Обработка графической информации.

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

    X с элементами xi,j N строк на N столбцов. Для некоторых методов применяют

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

    иметь временную сложность алгоритма как минимум кратной N3 . Для ее

    уменьшения поступают следующим образом: разбивают изображение на несколько

    малых размером n на n, n << N, каждое малое изображение будем обрабатывать

    отдельно. Тогда, вместо N3 будем иметь N2n сложность алгоритма.

    В данном разделе будем рассматривать сжатие графической информации с

    потерями. То есть из сжатого выходного массива невозможно при декодировании

    получить исходный. Но будем сжимать таким образом, чтобы потери как можно

    меньше воспринимались глазом при демонстрации данной графической

    информации.

    Самый первый способ, который приходит в голову, следующий. Уменьшим

    количество бит для хранения одного пикселя (элемента исходной матрицы).

    Пусть пикселы исходного изображения имеют формат RGB Truecolor 8:8:8 (на

    каждую цветовую составляющую отводится по 8 бит). Перекодируем изображение

    в формат 5:5:5 (то есть каждая цветовая составляющая будет иметь 25 =32

    градации), отбрасывая младшие четыре бита изображения. Мы также можем

    использовать свойство глаза наиболее хорошо различать цвет в области

    зеленого и кодировать изображение в формат RGB 4:5:4 и каждый пиксел будет

    занимать два байта.

    Можно пойти еще дальше: перевести исходное изображение в другую

    цветовую модель и отформатировать его. Например, в YIQ 6:3:3 - отводим на

    яркость 6 бит, на синфазный и интегрированный каналы по 3, используя то,

    что человеку более важна информация об интенсивности, нежели о цвете. При

    «жадном» кодировании, когда используем малое количество бит на пиксел,

    сразу после декодирования, перед выводом изображения можно провести так

    называемый anti-aliasing - сгладить резкие цветовые переходы, возникшие из-

    за малого числа градаций цветовых составляющих. Дальнейшее

    усовершенствование заключается в индексировании цветов. RGB Truecolor

    формат может поддерживать более 16 млн. цветов. Выберем n (обычно n -

    степень 2 ) индексных цветов cK так, чтобы минимизировали сумму:

    [pic].

    Далее создаем выходной массив B N на N, элемент которого bi,j равен k,

    где k= m - номер цвета такой, что выполняется [pic]. Выходная информация -

    массив B и собственно таблица индексных цветов c. Результаты данного

    подхода можно посмотреть в разделе «Форматирование и индексирование

    изображений».

    Рассмотрим семейство кодеров изображения, основанных на отбросе

    коэффициентов преобразования. Все они используют разбивку на блоки. Пусть Y

    - получаемое изображение, A - матрица преобразования.

    [pic].

    После преобразования, сохраняем только часть коэффициентов, за счет

    чего и осуществляется сжатие. Наиболее эффективным будет метод,

    минимизирующий оценку:

    [pic]. Самый оптимальный метод - Карунена-Лоэва. Строки матрицы

    преобразования A - нормированные собственные вектора Kx, то есть являются

    решением уравнения вида Kxx = lix, Kx = E{(x- Ex)(x-Ex)T} - ковариация, E -

    мат. ожидание, T - знак транспонирования. Коэффициенты преобразования y=Ax

    имеют матрицу преобразования вида:

    [pic], где l1.. lg - собственные значения Kx. Отбрасывая малые

    собственные значения получаем сжатие. Данный метод, хотя и дает наименьшую

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

    требует большого объема вычислений при своей работе. Преобразование

    Карунена-Лоэва называют также оптимальным кодированием. Рассмотрим другие

    кодеры данного семейства:

    Фурье,[pic], для данного преобразования существует алгоритм, с временной

    сложностью n2log2n. Преобразование Фурье представляет собой разложение по

    спектру.

    Дискретное косинусное преобразование (ДКП).

    [pic].Наиболее используемый

    в настоящее время метод, так как он дает результат ошибку приближения чуть

    больше чем разложению Карунена-Лоэва. Существует алгоритм, реализующий

    данный метод со сложностью 2n2log2n-1.5n+4.

    Симметричное преобразование Адамара.

    [pic], где

    il и jl - состояние разрядов двоичного представление чисел i и j. Для n=2

    матрица будет следующей: [pic]. Хотя метод Адамара не дает столь хороших

    результатов как предыдущие, зато все операции преобразование сводится к

    сложениям и вычитаниям.

    При отборе коэффициентов пользуются следующими способами:

    Пороговый отбор. Отбрасываются коэффициенты, которые по модулю, ниже

    установленного порога.

    Зональный отбор. Отбрасываются коэффициенты, принадлежащие к малокритичному

    спектру. Например, при ДКП или преобразовании Фурье можем отбросить часть

    коэффициентов, принадлежащих к высокочастотному спектру, так как

    чувствительность глаза выше в низкочастотной области.

    Обычно отбрасываемые коэффициенты обнуляют. Далее применяют

    последовательное и энтропийное сжатие. Так работает алгоритм JPEG

    кодирования. Все это дает снижение размера массива, при приемлемом качестве

    изображения, в 5-16 раз. На приведенном примере использовалось исходное

    изображение в разрешении 240 на 362 пикселя в RGB Truecolor и занимало

    240*362*3=260640 байт. Левое сжатое изображение занимает 46000 байт и

    внешне не отличается от исходного. Левое нижнее изображение имеет размер

    8004 байт и имеет заметные резкие цветовые переходы в области неба. Правое

    нижнее изображение имеет размер 5401 байт (!) и хотя изображение стало

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

    разбивок на блоки иногда возникает побочный эффект: становятся заметными

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

    «наезжали» на границы соседних с ним блоков.

    Другой принцип лежит в основе пирамидального кодирования. Пусть x(k,l)

    - исходное изображение. Получим из него его низкочастотную, с частотой

    среза f1, «версию» x1(k,l) с помощью локального усреднения с одномодовым

    гауссоподобным

    двумерным импульсным откликом. x1(k,l) можно рассматривать как предсказание

    для c. e1(k,l) = x(k,l) - x1(k,l) - ошибка предсказания, далее повторяем

    для частоты среза f2: e2(k,l) = x1(k,l) - x2(k,l) - ошибка предсказания

    меньше чем для e1 в f1/f2 раз. Получаем в итоге последовательность e1 ,e2 ,

    .., et. На каждой итерации размерность изображения сокращается в fi /fi+1

    раз. Данный метод уменьшает занимаемый размер в 10..20 раз при приемлемом

    качестве изображения. Но сложность алгоритма выше по сравнению с

    предыдущими методами.

    Рассмотрим еще один метод сжатия изображения - выращивания областей,

    который в корне отличается от остальных. Он рассматривает изображение как

    набор граничащих друг с другом текстурных контуров, внутри каждого из

    которых нет резкого изменения уровня цветовой составляющей. Перед работой

    метода, возможно несколько раз придется произвести предобработку,

    заключающуюся в сокращении зернистости, но сохраняющей контуры в

    изображении (то есть малые перепады уровня усредняем, а большие -

    оставляем). Для этих целей обычно применяют обратный градиентный фильтр.

    Далее начинаем разметку областей. Область - часть изображения, пикселы

    которой обладают неким общим свойством - принадлежат к одной полосе частот,

    обладают близким значением определенной цветовой составляющей. Разметка

    осуществляется в два этапа:

    1. Начиная с данного пикселя изображения, относительно его соседа

    проверяем: обладает ли он общим свойством области. Если это так, то он

    включается в данную область, и далее проверяются его соседи и т.д. Когда

    больше не остается элементов, смежных с данным контуром процедура

    останавливается и начинается снова для пикселей, не вошедших в данную

    область.

    2. Уменьшение числа областей. Обычно в изображении 70% созданных областей

    содержатся в 4% изображения. Соседние области объединяют, если они обладают

    близкими свойствами, также удаляют незначительные (по размеру), области.

    Алгоритмы создания и удаления областей - задача не простая и может быть

    оптимизирована по многим направлениям различными способами. Именно от нее

    зависит дальнейшая эффективность алгоритма.

    Рассмотрим собственно кодирование. Оно состоит из двух этапов: 1 -

    кодирование контуров и 2 - текстур, лежащих в них. Контуры представляются в

    виде матрицы с битовыми элементами, который равен 1, если точка входит в

    границу области - контур и 0 - иначе. Данную матрицу можно энтропийно сжать

    с эффективностью ~1.2 .. 1.3 бита на пиксел контура. Текстура (содержимое)

    каждой области приближается средним уровнем свойства ее области и двумерным

    полиномом (линейным, квадратным или кубическим - в зависимости от

    реализации и требований к качеству). При декодировании прибавим зернистость

    в текстуру с помощью гауссова псевдослучайного фильтра с уже известной

    среднеквадратичной ошибкой. Данный метод позволяет добиться сжатия

    изображения в 20..75 раз с приемлемым качеством изображения. Временные

    затраты при его реализации весьма велики. При работе данного метода мы

    также можем (с небольшими дополнительными вычислениями) параллельно

    перевести изображение в векторную форму.

    Литература

    1. Эндрюс. Применение вычислительных машин для обработки изображений.

    2. Харри. Обработка изображений при помощи ЦВМ.

    3. Яншин. Анализ и обработка изображений. Принципы и алгоритмы.

    4. Джад, Вышецки. Цвет в науке и технике.

    5. Мартинес. Обработка изображений.

    6. Роджерс. Алгоритмические основы машинной графики.

    7. Оппенгейм. Цифровая обработка сигналов.

    8. Фрини, Кайзер. Применение цифровой обработки сигналов.

    9. ТИИЭР. Том 73. Достижения в области кодирования изображений.

    10. ТИИЭР. Том 68. Кодирование изображений.

    11. ТИИЭР. Том 63. Цифровая обработка изображений.

    12. Журнал «Монитор» за 94 год. Мастрюков. Алгоритмы сжатия информации.

    13. Эхоконференции FidoNet.

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.