2D сжатие вейвлета

Этот раздел берет вас через функции вейвлета 2D истинное сжатие с помощью программного обеспечения Wavelet Toolbox™.

Для получения дополнительной информации о методах сжатия смотрите Сжатие Вейвлета для Изображений в Руководстве пользователя Wavelet Toolbox.

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

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

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

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

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

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

  • Распаковать

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

  • Обработайте изображения истинного цвета

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

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

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

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

Синтетическая производительность сжатия дана коэффициентом сжатия и отношением Бита на пиксель, которые эквивалентны.

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

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

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

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

Давайте начнем с простого метода каскадная глобальная содействующая пороговая обработка и Кодирование методом Хаффмана. Мы используем вейвлет по умолчанию bior4.4 и уровень по умолчанию, который является максимальным возможным уровнем (см., что wmaxlev функционирует), разделенный на 2.

Желаемый бит/пкс отношения Бита на пиксель установлен в 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')]}) 

Как видно, достигнутое отношение бит/пкс - приблизительно 0,92 при использовании 12 шагов.

Давайте попытаемся улучшить его при помощи вейвлета bior4.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')]}) 

Начиная с одиннадцатого цикла, результат может быть рассмотрен удовлетворительным. Достигнутое отношение бит/пкс - теперь приблизительно 0,35. Это может даже быть немного улучшено при помощи более свежего метода: SPIHT (Разделение Набора В Иерархических Деревьях).

[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% размера исходной системы хранения.

Обработка изображений истинного цвета

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

Прогрессивный используемый метод сжатия является SPIHT (Разделение Набора В Иерархических Деревьях), и номер кодирования циклов определяется к 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) являются очень удовлетворительными при поддержании хорошего визуального восприятия.

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

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

  1. Запустите истинное сжатие 2D инструмент.

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

    Wavelet Analyzer появляется. Нажмите True Compression 2D элемент. Истинный инструмент сжатия для изображений появляется.

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

    В подсказке команды MATLAB ввести

    load mask
    В инструменте True Compression 2-D выберите File> Import Image from Workspace. Когда диалоговое окно Import from Workspace появится, выберите переменную X. Нажмите ОК, чтобы импортировать данные. Изображение кажется наверху оставленным окна вместе с гистограммой уровня серого чуть ниже.

  3. Выполните разложение вейвлета.

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

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

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

    Начните с простого метода каскадная глобальная содействующая пороговая обработка и Кодирование методом Хаффмана.

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

    Установите желаемое отношение Бита на пиксель на 0,5.

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

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

    Сжатое изображение, в левой нижней части, может быть по сравнению с оригинальным изображением.

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

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

    Давайте теперь проиллюстрируем использование прогрессивных методов начиная с известного алгоритма EZW. Давайте запустимся путем выбора вейвлета Хаар из меню Wavelet и давайте выберем 8 из меню Level. Затем нажмите кнопку Decompose.

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

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

    Слишком мало шагов производит очень крупное сжатое изображение. Таким образом давайте исследуем немного лучший результат на 9 шагов. Определите номер кодирования циклов к 9 и нажмите кнопку Compress.

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

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

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

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

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

    В порядке выбрать количество циклов, инструмент приложения Wavelet Analyzer позволяет вам исследовать последовательные результаты, полученные этим видом пошаговой процедуры. Определите номер кодирования циклов в большом значении, например, 13, и нажмите кнопку Show Compression Steps. Кроме того, вы могли выполнить процедуру пошагово путем нажатия кнопки Stepwise.

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

    Достигнутое отношение бит/пкс - теперь приблизительно 0,35, который обычно рассматривается очень удовлетворительным результатом. Тем не менее, это может быть немного улучшено при помощи более свежего метода SPIHT (Разделение Набора В Иерархических Деревьях).

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

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

    Итоговый коэффициент сжатия и отношение Бита на пиксель являются очень удовлетворительными: 2,8% и 0.22. Давайте вспомним, что первое отношение означает, что сжатое изображение хранится с помощью только 2,8% размера исходной системы хранения.

  9. Обработайте изображения истинного цвета.

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

    Из меню File выберите Load Image option и выберите элемент Поддерживаемых форматов MATLAB.

    Когда диалоговое окно Load Image появляется, выберите MAT-file wpeppers.jpg, который должен находиться в папке toolbox/wavelet/wavelet MATLAB.

    Кликните по кнопке OK. Окно кажется спрашивающим вас, если вы хотите рассмотреть загруженное изображение как истинный цвет один. Нажмите кнопку Yes. Примите значения по умолчанию для вейвлета и меню уровня разложения и затем нажмите кнопку Decompose.

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

    Коэффициент сжатия и отношение Бита на пиксель (BPP) являются очень удовлетворительными: 1,65% и 0.4 вместе с очень хорошим перцепционным результатом.

  10. Осмотрите дерево вейвлета.

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

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

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

Инструменты сжатия Wavelet Toolbox могут создать файл с помощью или одного из типов Поддерживаемого формата MATLAB или определенного формата, который может быть распознан расширением файла: wtc (Сжатый Wavelet Toolbox).

Чтобы сохранить вышеупомянутый сжатый образ, используйте пункт меню File> Save Compressed Image> Wavelet Toolbox Compressed Image. Диалоговое окно появляется, который позволяет вам задать папку и имя файла для хранения изображения. Конечно, использование wtc формата требует, чтобы вы распаковали сохраненное изображение с помощью Wavelet Toolbox истинные инструменты сжатия.