Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде Matlab (2006) (1246139), страница 59
Текст из файла (страница 59)
'/ 3. 11 ЫМК(п) > О, ЕеС СЬе пехс епсодед Ь1С апд СтвпвАС1оп Со % всаСе [ЫМК(п) — 1] 11 СЬе Ыс Хв О, е1ве ЫМК(п) . (322 Г 8. 0 б г Как и любой МЕХ-файл, построенный из программы на С, МЕХ-файл для ппгаче1. с состоит из двух частей: вычислительной программы и шлюзовой программы, Вычислительная программа, которая также называется пптаче1, содержит программный код на С, реализующий процесс декодирования по схеме на рис. 8.5 с использованием таблицы 11вх. Шлюзовая программа, которая должна называться шехгппссйоп, осуществляет интерфейс (обмен параметрами) вычислительной программы и вызывающей ее М-функции Ьп112шаС.
Она использует стандартный интерфейс МЕХ-файлов МАТЬАВ, который включает следующие элементы: 1. Четыре стандартизованные параметра входа/выхода — п1Ьв, р1Ьв, пгЬв и ртЬв. Эти параметры являются, соответственно, числом выходных аргументов в левой части (целое), массивом указателей на выходные аргументы в левой части (массивы МАТЬАВ), числом входных аргументов в правой части (другое целое) и массивом указателей на входные аргументы в левой части (также массивы МАТЬАВ). 2.
Имеющееся в МАТЬАВ семейство приложений программного интерфейса АР1 (Аррйсайоп Ргойгат 1п1ег~асе). Функции АР1 имеют префикс шх. Они предназначены для создания, доступа, манипулирования и1или удаления структур класса шхАггау. Например, шхСа11ос осуществляет динамическое распределение памяти подобно стандартной функции С сайос, Вместо соответствующих С-функций тайас и гсайос используются функции шхйа11ос и шхкеа11ос; шхбеСЗса1аг извлекает сквляры из входного массива ргЬв. Другие функции шхСес...,например, шхбеСИ, шхбеСИ и шхбеСЯСг1пй извлекают другие типы данных; функция шхСгеасе0опЬ1ейатг1х создает выходной массив МАТЬАВ для р1Ьв.
Другие функции шхСгеасе..., например, шхСгеасеЯСг1пб и шхСтеасе-Уишетйсяттау создают другие типы данных. Функции АР1 с префиксом шех совершают действия в рабочем пространстве МАТЬАВ. Например, шехйтгИвбТхС выдает сообщение в рабочем окне МАТ1 АВ. Прототипы функций АР1 шех и шх, приведенные в пункте 2 предыдущего перечня, расположены в заголовочных файлах МАТЬАВ шех. Ь и шасг1х. Ь соответственно. Оба эти файла размещаются в папке <шаС1аЬ>/ехсегп/1пс1пбе, где <шас1аЬ) обозначает корневую установочную папку вашей системы МАТЬАВ. Заголовок шех.
Ь, который должен быть включен в начало любого МЕХ-файла (обратите внимание на присутствие в начале файла ппгаче1. с записи Ягпс1пбе эшех. Ьъ), содержит в себе также заголовочный файл шасг1х.Ь. Прототипы интерфейсных программ шех и шх, которые хранятся в этих файлах, определяют используемые параметры и придают смысл операциям нвд этими параметрами. Дополнительную информацию по этому вопросу можно узнать из руководства МАТЬАВ по внешним интерфейсам (Ех1егпа) 1п1ег1асеэ). На рис. 8.6 приведенные выше сведения даны в компактной форме, из которой видна структура МЕХ-файла цптаче1, а также обозначено направление потоков информации между ппгаче1 и Ьп112шаС.
Несмотря на то, что эта концепция проиллюстрирована в контексте декодирования Хаффмана, ее легко распространить на другие функции С или Рогтгап, если требуется их использование в МАТЬАВ. В.В. к д б 32333) М-файл нпшче(.ш С МЕХ-файл ипгвче1.с Мпс!обе 'пжх Ь" -функция пзехрнпсйоп Шлюзовая программа для МЕХ-файла чабб шехропсОап( 1п! Ппж гпхАтау'рйж(! Вп1 пйгз, сапа( шхАтау 'Рйгз(!) М-файл Ьн((зша! В М-файле Ьай2ша1 команда х = олгаче1(у, ...
1!пй, М'и) говорит системе МАТ(АВ передать у, 1(пН и щ*п в МЕХ-файл функции цпглче( Возвращаемая переменная р1Ьа(0! присваивается пере- иенной х МАТ1.АВ передает выход МАХ-файла рйз (О! в М-файл Ьсй2юа!. Рис. 8.6. Взаимодействие М-функции Ьцгзлвае и вызываемой нз МАТЕАВ С-функции бшгачеЕ Обратите внимание на то, что МЕХ-файл епгачез состоит из двух функций: шлюзовой программы иехропссхоп и вычислительной программы алгачеЕ Справочная информация для МЕХ-файла «пгачез располагается в отдельном М-файле, который также называется епгачез Г 1 1 МАПАВ передает параметры !у, НпН и т'л в МЕХ-файл: 1 рдга(0! = у 1 1 рйэз(1) = НПН рдзз(2) = п3*п ППВз= 3 пйгз = 1 1 !Параметры пфз и пйжявпя- 1 ются целыми, обозначающи1 ми число аргументов слева и ' справа, а рдзз — вектор, со1 держащий укозажекк на мас1 сизы МАТ1.АВ У, 11пН и П1'и 1 В МЕХ-файле апгаче!.с вычисления начинаются и заканчи- ваются в шлюзовой программе пзехЕцпсйоп, которая вызы- вает С-вычислительную программу алыче(.
Точка входа интерфейса декларируется записью где целые пйз и пфз обозначают число аргументов слева и справа, а векторы рфз и рфз содержат указатели на вход- ные и выходные аргументы типа пнАпау. Тип шхАпау слу- жит в МАТЕАВ для внешнего представления массивов. Пакет АР! МАТЕАВ состоит из функций, которые обраба- тывакп типы данных, поддерживаемме этим паксюм. Здесь мы: !. Используем функпии юхбе!М, шхбе!Ы, шх1збоаЫ, шх1збошр(ех н шехЕпМзОТх! для проверки входных и выходных аргументов. 2.
Используем функцию п1хбе!Рг для получения указателей на рдзз(0) (код Хаффмана) и на рй3з(1) (таблица декодирования) и сохранения нх в виде С-указателей Ьх и 11пй, соответственна. 3. Применяем шхбе!Вса(а!для получения размера выходного массива и сохраняем его в переменной хзг. 4. Применяем шхбе(М для определения числа элементов рйга(0) (кода Хаффмана) и сохраняем его в Ьхзг. 5. Исполиуем тхСшщебоаЫеМвМх и тхбе(рг для создания указателя на выходной массив (для декодера) и присваиваем его р!Ьз(0!. 6. Вызываем вычислительную программу нпгаче(, передавая ее аргуменцл, сформированнме при выполнении шагов 1 — 5.
~Зг4 г В. с бр 6 Пример 8.4. Декодирование с помощью Ьегг2шас. Изображение из примера 8.3 можно продекодировать следующей последовательностью команд;е » 1оа4 Яс)пееветгасу; » 8 = Ьц112шас(с); » Х = 1шгеай('Тгасу.С11'); » гшее = сошраге(с, 8) гшве = 0 Обратите внимание на то, что процесс кодирования-декодирования полностью сохраняет информацию; среднеквадратическая ошибка между исходным и декодированным изображением равна нулю.
В силу того, что значительная часть работы в функции Ьигт2шас выполняется С-функцией епгане1, время ее исполнения немного меньше времени кодирования функцией шас2ЬегХ. Отметим также использование функции 1оа4 дпя повторной загрузки данных из МАТ-файла, в котором были сохранен результат кодирования, полученный в примере 8.3. П 8.3. Межпиксельная избыточность Рассмотрим два изображения на рис. 8.7, а) и в), которые имеют практически одинаковые гистограммы. На этих гистограммах можно выделить три определяющие моды, которые означают присутствие на изображениях трех доминирующих интервалов серых тонов.
Поскольку здесь уровни серого цвета не являются равномерно распределенными, можно использовать коды переменной длины для сокращения кодовой избыточности, которая будет присутствовать при кодировании пикселов по обычной схеме кодами фиксированной длины: » 11 = 1шгеа4(гйапйош МассЬее.С11'); » с1 = шас2Ьц11(11); » епсгору(г1) 7.4253 » 1шгаесо(т1, с1) 1.0704 » Х2 = 1шгеаб('А118пе4 МассЬее.с11'); » с2 = шас2Ьц11(12); » евсгору(т2) 7.3505 » 1шгас1огг2, с2) апе 1.0821 афункция 1оаа Сеге считывает переменные МАТЮКАВ, хранящиеся надиске в файле Мгге.ваь', и загружает их в рабочее пространство.
При выполнении команд ване/1оаа имена переменных не изменяются. 'Зам~чим. ~:о ~н~роиийкьн. отт~нкл перв~ га ~тря,~ко обои~ и ~обрнжеци~~ 6 ~ежа (3 26 т В. с б~ точность с помощью вычитания и кодирования лишь новой (добавочной информации) пикселов. Ноеол информац я пикселов определяется как разность между реальным значением пикселом и величиной его предсказания. Как видно, система состоит из кодера и декодера, и каждый из них имеет один и тот же блок предсказатель. Когда очередной пиксел входного изображения, обозначаемый )„, поступает на вход кодера, предсказатель строит прогноз (оценку значения этого пиксела), основанный на некотором наборе предыдущих входных пикселов.
Затем выход предсказателя округляется до ближайшего целого, обозначаемого )тп, и используется для нахождения разности или ошибки предсказания е„= )„— )т„. а) Входное изображение Сжатое изображение б) Восстановленное изображение Сжатое изображение Рис. 8.8.
Модель кодирования с предсказанием без потери информации: а) кодер; б) декодер Эта ошибка кодируется кодом переменной длины (кодером символов), и тем самым генерируется очередной элемент сжатого потока данных. Декодер на рис. 8.8, б) восстанавливает значение е„по принятому кодовому слову переменной длины и совершает обратное преобразование )о = Е„+ )и. )т„= гоппй ~ ~ст,)'„ где т — это порядок линейного предсказания, операция гоппй (] обозначает округление до ближайшего целого (наподобие функции гошзб из МАТЬАВ), а ст, при Для построения предсказания )т„могут использоваться различные локальные, глобальные или адаптивные методы.
Однако в большинстве случаев принято вы- числять предсказание в виде линейной комбинации т предыдущих пикселов: В,.М б ЗЕ) 1 = 1, 2,..., гп — коэффициенты предсказания. Для одномерного кодирования с предсказанием это выражение можно переписать в виде /'(х, у) = гоппй ~~ а,/'(х, у — () [.=~ где каждая индексированная переменная теперь выражена явно в виде функции пространственных координат х и у. Отметим, что при таком подходе предсказание Д(х, у) зависит лишь от значений пикселов одной текущей обрабатываемой строки.