exponenta event banner

2-D Сжатие вейвлета

В этом разделе рассматриваются функции сжатия Vavelet 2-D true с помощью программного обеспечения Vavelet Toolbox™.

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

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

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

Полная цепочка сжатия включает в себя фазы квантования, кодирования и декодирования в дополнение к самой вейвлет-обработке.

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

В этом разделе вы научитесь

  • Сжатие с использованием глобального порогового значения и кодирования Хаффмана

  • Некомпресс

  • Сжатие с использованием прогрессивных методов

  • Обработка цветных изображений

2-D Команды сжатия вейвлет

Сжатие по глобальному порогу и кодированию Хаффмана

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

load mask; 
image(X) 
axis square; 
colormap(pink(255)) 
title('Original Image: mask')

Синтетические характеристики сжатия определяются степенью сжатия и отношением бит на пиксель, которые эквивалентны.

Степень сжатия CR означает, что сжатое изображение сохраняется с использованием только CR% от первоначального размера памяти.

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

Для изображения в оттенках серого начальный BPP равен 8, в то время как для изображения в цветном цвете начальный BPP равен 24, поскольку 8 битов используются для кодирования каждого из трех цветов (цветовое пространство RGB).

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

Начнем с простого метода каскадирования порогов глобальных коэффициентов и кодирования Хаффмана. Мы используем биор4.4 вейвлета по умолчанию и уровень по умолчанию, который является максимально возможным уровнем (см. wmaxlev функция), деленная на 2.

Требуемое отношение бит на пиксель BPP установлено равным 0,5, и сжатое изображение будет сохранено в файле с именем 'mask.wtc'.

meth = 'gbl_mmc_h'; % Method name 
option = 'c';         % 'c' stands for compression 
[CR,BPP] = wcompress(option,X,'mask.wtc',meth,'bpp',0.5)

CR =

  6.6925

BPP =

  0.5354

Достигнутое отношение бит на пиксель фактически составляет около 0,53 (закрытое до желаемого) для коэффициента сжатия 6,7%.

Несжатие

Распаковывать изображение, полученное из файла 'mask.wtc' и сравните его с исходным изображением.

option = 'u';  % 'u' stands for uncompression 
Xc = wcompress(option,'mask.wtc');
colormap(pink(255)) 
subplot(1,2,1); image(X); 
axis square; 
title('Original Image') 
subplot(1,2,2); image(Xc); 
axis square; 
title('Compressed Image') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ...
        ['BPP: ' num2str(BPP,'%3.2f')]})

Сжатие прогрессивными методами

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

meth = 'ezw';     % Method name 
wname  = 'haar';  % Wavelet name 
nbloop = 6;       % Number of loops 
[CR,BPP] = wcompress('c',X,'mask.wtc',meth, ...
                     'maxloop',nbloop,'wname',wname); 
Xc = wcompress('u','mask.wtc');
colormap(pink(255)) 
subplot(1,2,1); image(X); 
axis square; 
title('Original Image') 
subplot(1,2,2); image(Xc); 
axis square; title('Compressed Image - 6 steps') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ...
        ['BPP: ' num2str(BPP,'%3.2f')]}) 

Слишком малое количество шагов (здесь 6) создает очень грубое сжатое изображение. Давайте рассмотрим несколько лучший результат для 9 шагов и удовлетворительный результат для 12 шагов.

[CR,BPP]= wcompress('c',X,'mask.wtc',meth,'maxloop',9, ...
                    'wname','haar'); 
Xc = wcompress('u','mask.wtc'); 
colormap(pink(255))
subplot(1,2,1); image(Xc); 
axis square; title('Compressed Image - 9 steps') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')],...
        ['BPP: ' num2str(BPP,'%3.2f')]})  

[CR,BPP] = wcompress('c',X,'mask.wtc',meth,'maxloop',12, ...
                     'wname','haar'); 
Xc = wcompress('u','mask.wtc');
subplot(1,2,2); image(Xc); 
axis square; 
title('Compressed Image - 12 steps') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')],...
        ['BPP: ' num2str(BPP,'%3.2f')]}) 

Как можно видеть, достигнутое отношение BPP составляет около 0,92 при использовании 12 стадий.

Попробуем улучшить его, используя вейвлет-биор4.4 вместо хаара и глядя на полученные результаты для этапов 12 и 11.

[CR,BPP] = wcompress('c',X,'mask.wtc','ezw','maxloop',12, ...
                     'wname','bior4.4'); 
Xc = wcompress('u','mask.wtc'); 
colormap(pink(255))
subplot(1,2,1); image(Xc); 
axis square; 
title('Compressed Image - 12 steps - bior4.4') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ...
        ['BPP: ' num2str(BPP,'%3.2f')]})
[CR,BPP] = wcompress('c',X,'mask.wtc','ezw','maxloop',11, ...
                     'wname','bior4.4'); 
Xc = wcompress('u','mask.wtc');
subplot(1,2,2); image(Xc); 
axis square; 
title('Compressed Image - 11 steps - bior4.4') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ...
        ['BPP: ' num2str(BPP,'%3.2f')]}) 

Начиная с одиннадцатого цикла результат можно считать удовлетворительным. Достигнутое отношение BPP теперь составляет около 0,35. Его можно даже немного улучшить с помощью более позднего метода: SPIHT (Set Partitioning In Hierarchical Trees).

[CR,BPP] = wcompress('c',X,'mask.wtc','spiht','maxloop',12, ...
                     'wname','bior4.4'); 
Xc = wcompress('u','mask.wtc');
colormap(pink(255)) 
subplot(1,2,1); image(X); 
axis square; 
title('Original Image') 
subplot(1,2,2); image(Xc); 
axis square; 
title('Compressed Image - 12 steps - bior4.4') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ...
        ['BPP: ' num2str(BPP,'%3.2f')]}) 
[psnr,mse,maxerr,l2rat] = measerr(X,Xc)

delete('mask.wtc') 

Конечная степень сжатия (2,8%) и отношение бит на пиксель (0,23) являются очень удовлетворительными. Напомним, что первое соотношение означает, что сжатое изображение сохраняется, используя только 2,8% от первоначального размера памяти.

Обработка изображений Truecolor

Наконец, рассмотрим, как сжать wpeppers.jpg truecolor изображение. Изображения Truecolor можно сжимать по той же схеме, что и изображения в градациях серого, применяя те же стратегии к каждому из трех цветовых компонентов.

Используется метод прогрессивного сжатия SPIHT (Set Partitioning In Hierarchical Trees), и количество циклов кодирования устанавливается равным 12.

X = imread('wpeppers.jpg'); 
[CR,BPP] = wcompress('c',X,'wpeppers.wtc','spiht','maxloop',12);
Xc = wcompress('u','wpeppers.wtc'); 
subplot(1,2,1); image(X); 
axis square; 
title('Original Image') 
subplot(1,2,2); image(Xc); 
axis square;
title('Compressed Image - 12 steps - bior4.4') 
xlabel({['Compression Ratio: ' num2str(CR,'%1.2f %%')], ... 
        ['BPP: ' num2str(BPP,'%3.2f')]})
delete('wpeppers.wtc')

Степень сжатия (1,65%) и отношение бит на пиксель (0,4) являются очень удовлетворительными при сохранении хорошего визуального восприятия.

2-D Сжатие вейвлет с помощью приложения Wavelet Analyzer

В этом разделе мы рассмотрим различные методы 2-D истинного сжатия с помощью приложения Wavelet Analyzer.

  1. Запустите инструмент True Compression 2-D.

    В подсказке MATLAB ® введитеwaveletAnalyzer.

    Появится вейвлет-анализатор. Щелкните элемент True Compression 2-D. Появится истинный инструмент сжатия для изображений.

  2. Загрузите изображение.

    В командной строке MATLAB введите

    load mask
    В инструменте «2-D истинного сжатия» выберите «Файл» > «Импортировать изображение из рабочего пространства». При появлении диалогового окна Импорт из рабочего пространства (Import from Workspace) выберите X переменная. Нажмите кнопку ОК, чтобы импортировать данные. Изображение появляется в верхней левой части окна вместе с гистограммой серого уровня чуть ниже.

  3. Выполните вейвлет-декомпозицию.

    Примите биор4.4 вейвлета по умолчанию и выберите 4 в меню Уровень (Level), который является максимально возможным уровнем, деленным на 2, а затем нажмите кнопку Разложить (Decompose). После паузы для вычисления инструмент отображает вейвлет-аппроксимацию и детализирует коэффициенты разложения для трех направлений вместе с гистограммой исходных коэффициентов.

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

  4. Попробуйте простой метод.

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

    Выберите опцию GBL_MMC_H в меню Метод сжатия, расположенном в правом верхнем углу рамки Параметры сжатия. Дополнительные сведения о методах сжатия см. в разделе Вейвлет-сжатие для изображений в Руководстве пользователя инструментария вейвлет.

    Установите требуемое отношение бит/пиксель равным 0,5.

    Значения других параметров обновляются автоматически. Следует отметить, что эти значения являются только приближениями истинных характеристик, поскольку этап квантования не может быть точно предсказан без его выполнения. Нажмите кнопку «Сжать».

    Синтетические характеристики задаются степенью сжатия и вычисленным битом на пиксель (BPP). Эта последняя величина фактически составляет около 0,53 (близкая к требуемой 0,5) для степени сжатия 6,7%.

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

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

  5. Сжатие с использованием первого прогрессивного метода: EZW.

    Теперь рассмотрим использование прогрессивных методов, начиная с хорошо известного алгоритма EZW. Начнем с выбора вейвлет-хаара в меню Вейвлет (Wavelet) и выберите 8 в меню Уровень (Level). Затем нажмите кнопку «Разложить».

    Выберите опцию EZW в меню Метод сжатия. Ключевым параметром является количество петель: увеличение его приводит к лучшему восстановлению, но худшей степени сжатия. Из Nb. В меню Encoding Loops установите число циклов кодирования равным 6, что является небольшим значением. Нажмите кнопку «Сжать».

  6. Уточните результат, увеличив число циклов.

    Слишком мало шагов создает очень грубое сжатое изображение. Давайте рассмотрим несколько лучший результат для 9 шагов. Установите число циклов кодирования равным 9 и нажмите кнопку «Сжать».

    Как можно видеть, результат лучше, но не удовлетворителен как визуальным осмотром, так и вычислением отношения пикового сигнала к шуму (PSNR), которое меньше 30.

    Теперь попробуйте достаточно большое количество шагов, чтобы получить удовлетворительный результат. Установите для числа циклов кодирования значение 12 и нажмите кнопку «Сжать».

    Результат теперь приемлем. Но за 12 шагов мы достигаем отношения бит на пиксель около 0,92.

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

    Попытаемся улучшить характеристики сжатия, изменив вейвлет: выберите bior4.4 вместо haar и нажмите кнопку Decompose.

    Чтобы выбрать количество циклов, инструмент приложения Wavelet Analyzer позволяет исследовать последовательные результаты, полученные с помощью этой пошаговой процедуры. Задайте большое количество циклов кодирования, например 13, и нажмите кнопку «Показать шаги сжатия». Кроме того, процедуру можно выполнить пошагово, нажав кнопку Stepwise.

    Затем нажмите кнопку «Сжать». Появляется тринадцать постепенно более тонко сжатых изображений, и вы можете выбрать визуально удобное значение для количества циклов. Удовлетворительный результат, по-видимому, получается после 11 циклов. Таким образом, можно установить число циклов кодирования равным 11 и нажать кнопку «Сжать».

    Достигнутое отношение BPP теперь составляет около 0,35, что обычно считается очень удовлетворительным результатом. Тем не менее, его можно немного улучшить с помощью более позднего метода SPIHT (Set Partitioning In Hierarchical Trees).

  8. Получение окончательного сжатого изображения с помощью третьего метода.

    Выберите опцию SPIHT в меню Метод сжатия, установите количество циклов кодирования равным 12 и нажмите кнопку Сжатие.

    Конечная степень сжатия и отношение бит на пиксель являются очень удовлетворительными: 2,8% и 0,22. Напомним, что первое соотношение означает, что сжатое изображение сохраняется, используя только 2,8% от первоначального размера памяти.

  9. Обработка цветных изображений.

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

    В меню Файл (File) выберите параметр Загрузить изображение (Load Image) и выберите элемент Поддерживаемые форматы (Matlab Supported Formats).

    При появлении диалогового окна «Загрузить изображение» выберите MAT-файл wpeppers.jpg которые должны находиться в папке MATLAB toolbox/wavelet/wavelet.

    Нажмите кнопку OK. Появится окно с вопросом, следует ли рассматривать загруженное изображение как цветное. Нажмите кнопку «Да». Примите значения по умолчанию для меню уровня вейвлета и разложения и нажмите кнопку «Разложить».

    Затем примите метод сжатия SPIHT по умолчанию и установите количество циклов кодирования равным 12. Нажмите кнопку «Сжать».

    Степень сжатия и отношение бит на пиксель (BPP) являются очень удовлетворительными: 1,65% и 0,4 вместе с очень хорошим результатом восприятия.

  10. Проверьте вейвлет-дерево.

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

Импорт и экспорт из приложения Wavelet Analyzer

Сжатый образ можно сохранить на диск в текущей папке с выбранным именем.

Инструменты сжатия Wavelet Toolbox могут создавать файлы с использованием одного из типов формата Matlab Supported Format или определенного формата, который может распознаваться расширением файла wtc (Wvelet Toolbox Compressed).

Чтобы сохранить вышеупомянутое сжатое изображение, используйте пункт меню «Файл» > «Сохранить сжатое изображение» > «Wavelet Toolbox» «Сжатое изображение». Появится диалоговое окно, в котором можно указать папку и имя файла для хранения изображения. Конечно, использование формата wtc требует распаковки сохраненного изображения с помощью инструментов истинного сжатия Wavelet Toolbox.