wcompress

Истинное сжатие изображений с использованием вейвлетов

    Описание

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

    Сжатие

    wcompress('c',x,cname,compmthd) сжимает изображение x используя метод сжатия compmthd и сохраняет результат в файле cname. Изображение x может быть либо массив 2-D, содержащий индексированное изображение, либо трехмерный массив uint8 содержащее изображение труколора. Оба размера строки и столбца изображения должны быть степенями двойки.

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

    Примечание

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

    • Данные, записанные в файлы, используют uint64 точность. В релизах, предыдущих к R2016b, данные были записаны с использованием uint32 . Если ваш код отрицательно зависит от этого изменения, используйте legacy опция сжатия и распаковки данных с помощью предыдущего поведения.

      wcompress('c',x,cname,compmthd,'legacy')

    пример

    wcompress('c',fname,___) загружает изображение из файла fname.

    wcompress('c',I,___) преобразует индексированное изображение I{1} к изображению truecolor Y используя палитру I{2} и затем сжимает Y.

    пример

    wcompress(___,Name,Value) задает опции, связанные с отображением, преобразованием данных и методами сжатия, используя один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Имя может быть в верхнем или нижнем регистре. Для примера, 'level',3,'CC','klt' устанавливает уровень разложения равным 3 и параметр «Преобразование цвета», если x является изображением труколора к преобразованию Кархунена - Лоэва.

    [comprat,bpp] = wcompress('c',___) возвращает коэффициент сжатия comprat и отношение бит/пиксель bpp.

    Несжатие

    xc = wcompress('u',cname) разжимает файл cname который содержит сжатое изображение и возвращает изображение xc.

    xc = wcompress('u',cname,'plot') строит график несжатого изображения.

    пример

    xc = wcompress('u',cname,'step') показывает постепенную распаковку (только для методов значимости прогрессивных коэффициентов).

    Примеры

    свернуть все

    В этом примере показано, как сжать и распаковать изображение jpeg arms.jpg.

    Используйте древовидный вейвлет пространственной ориентации ('stw') метод сжатия и сохранение сжатого изображения в файл.

    wcompress('c','arms.jpg','comp_arms.wtc','stw');
    

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

    wcompress('u','comp_arms.wtc','step');
    

    В этом примере показано, как сжать полутоновое изображение с помощью разбиения набора в иерархических деревьях ('spiht') метод сжатия. Он также вычисляет среднее значение квадратной ошибки (MSE) и пиковое отношение сигнал/шум (PSNR) значения ошибки. Вы используете эти две меры, чтобы количественно определить ошибку между двумя изображениями. PSNR экспрессируется в децибелах.

    Загрузите изображение и сохраните его в файле.

    load mask;       
    [cr,bpp] = wcompress('c',X,'mask.wtc','spiht','maxloop',12)
    cr = 2.8610
    
    bpp = 0.2289
    

    Загрузите сохраненное изображение из файла, распакуйте его и удалите файл.

    Xc = wcompress('u','mask.wtc');
    delete('mask.wtc')

    Отображение исходных и сжатых изображений.

    colormap(pink(255))
    subplot(1,2,1); image(X);  title('Original image')
    axis square
    subplot(1,2,2); image(Xc); title('Compressed image')
    axis square

    Figure contains 2 axes. Axes 1 with title Original image contains an object of type image. Axes 2 with title Compressed image contains an object of type image.

    Вычислите MSE и PSNR.

    D = abs(X-Xc).^2;
    mse  = sum(D(:))/numel(X)
    mse = 33.6564
    
    psnr = 10*log10(255*255/mse)
    psnr = 32.8601
    

    В этом примере показа, как сжать изображение jpeg с помощью адаптивно сканированного метода сжатия вейвлет различия сокращения ('aswdr'). Цвет преобразования ('cc') использует преобразование Кархунена - Лоева ('kit'). Максимальное количество циклов ('maxloop') устанавливается равным 11, и тип графика ('plotpar') устанавливается на шаг через сжатие. Покажите коэффициент сжатия (cratio) и отношение бит/пиксель (bpp), которые указывают на качество сжатия.

    [cratio,bpp] = wcompress('c','woodstatue.jpg','woodstatue.wtc', ...
                 'aswdr','cc','klt','maxloop',11,'plotpar','step');
    cratio
    bpp
    
    cratio =
    
        3.0792
    
    
    bpp =
    
        0.7390
    
    

    Загрузите сжатое изображение и пройдите процесс распаковки.

    wcompress('u','woodstatue.wtc','step');
    

    В этом примере показано, как сжать изображение truecolor с помощью разбиения набора в иерархических деревьях - 3D ('spiht_3D') метод сжатия.

    Загрузка, сжатие и хранение изображения в файле. Постройте график исходных и сжатых изображений. Отобразите коэффициент сжатия ('cratio') и битов на пиксель ('bpp'), которые указывают на качество сжатия.

    load mask;     
    X = imread('wpeppers.jpg');
    [cratio,bpp] = wcompress('c',X,'wpeppers.wtc','spiht','maxloop',12)
    cratio = 1.6549
    
    bpp = 0.3972
    
    Xc = wcompress('u','wpeppers.wtc');
    delete('wpeppers.wtc')

    Отображение исходных и сжатых изображений.

    subplot(1,2,1)
    image(X)
    title('Original image')
    axis square
    subplot(1,2,2)
    image(Xc)
    title('Compressed image')
    axis square

    Figure contains 2 axes. Axes 1 with title Original image contains an object of type image. Axes 2 with title Compressed image contains an object of type image.

    Вычислите среднее значение квадратной ошибки (MSE) и пиковое отношение сигнал/шум (PSNR) значения ошибки. Вы используете эти две меры, чтобы количественно определить ошибку между двумя изображениями. PSNR экспрессируется в децибелах.

    D = abs(double(X)-double(Xc)).^2;
    mse  = sum(D(:))/numel(X)
    mse = 26.7808
    
    psnr = 10*log10(255*255/mse)
    psnr = 33.8526
    

    Входные параметры

    свернуть все

    Входное изображение для сжатия, заданное как 2-D массив, содержащий индексированное изображение или трехмерный массив uint8 содержащее изображение труколора. Оба размера строки и столбца изображения должны быть степенями двойки.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Сжатие

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

    Несжатие

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

    Имя файла изображения, заданное как вектор символов или строковый скаляр. Файл является MATLAB® Поддерживаемый файл формата (MSF): MAT-файл или другие файлы изображений (см. imread).

    Метод сжатия, заданный как вектор символов или строковый скаляр. Действительные методы сжатия разделены на две категории.

    • Методы значимости прогрессивных коэффициентов (PCSM):

      compmthd

      Имя метода сжатия

      'ezw'

      Встраиваемый Zerotree Wavelet

      'spiht'

      Установите секционирование в иерархических деревьях

      'stw'

      Древовидный вейвлет пространственной ориентации

      'wdr'

      Уменьшение различия вейвлетов

      'aswdr'

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

      'spiht_3d'

      Установите разбиение на иерархические деревья 3D для изображений truecolor

      Для получения дополнительной информации об этих методах смотрите ссылки и особенно [3] и [6].

    • Методы порога коэффициентов (CTM):

      compmthd

      Имя метода сжатия

      'lvl_mmc'

      Поддиапазонное пороговое значение коэффициентов и кодирование Хаффмана

      'gbl_mmc_f'

      Глобальное пороговое значение коэффициентов и фиксированное кодирование

      'gbl_mmc_h'

      Глобальное пороговое значение коэффициентов и кодирование Хаффмана

      Для получения дополнительной информации о 'lvl_mmc' метод, см. [5]

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: 'IT','g' устанавливает преобразование Image type в полутоновый.
    Параметры преобразования данных

    свернуть все

    Имя вейвлета, заданное как разделенная разделенными запятой парами, состоящая из 'wname' и вектор символов или строковый скаляр. Посмотрите waveletfamilies.

    Уровень разложения вейвлета, заданный как разделенная запятой пара, состоящий из 'level' и положительное целое число. Уровень разложения level должно быть таким, чтобы 1 ≤ level ≤ levmax, где levmax - максимально возможный уровень (см. wmaxlev).

    Уровень по умолчанию зависит от метода сжатия compmthd.

    • Для методов PCSM, level равно levmax.

    • Для методов CTM, level равно fix(levmax/2).

    Типы данных: single | double

    Преобразование типа изображения, заданное как разделенная разделенными запятой парами, состоящая из 'it' и одно из перечисленных значений:

    • 'n' - нет преобразования (по умолчанию), тип изображения (truecolor или полутоновый) автоматически не обнаруживается

    • 'g' - тип преобразования полутонового цвета

    • 'c' - тип преобразования цвета (RGB uint8)

    Параметр преобразования цвета, заданный как разделенная разделенными запятой парами, состоящая из 'cc' и одно из перечисленных значений:

    • 'rgb' или 'none' - без преобразования (по умолчанию)

    • 'yuv' - преобразование цветового пространства YUV

    • 'klt' - преобразование Кархунена-Лоэва

    • 'yiq' - преобразование цветового пространства YIQ

    • 'xyz' - преобразование цветового пространства CIEXYZ

    Методы значимости прогрессивных коэффициентов (PCSM)

    свернуть все

    Максимальное количество шагов для алгоритма сжатия, заданное как разделенная разделенными запятой парами, состоящая из 'maxloop' и положительное целое или Inf.

    Типы данных: single | double

    Методы порога коэффициентов (CTM)

    свернуть все

    Отношение бит/пиксель, заданное как разделенная разделенными запятой парами, состоящая из 'bpp' и скаляром. Отношение должно быть больше 0 и меньше или равным 8 (полутоновый) или 24 (труколор).

    Если вы задаете отношение бит/пиксель, вы не можете задать comprat.

    Типы данных: single | double

    Степень сжатия, заданная как разделенная разделенными запятой парами, состоящая из 'comprat' и скаляром. Коэффициент должен быть больше 0 и меньше или равен 100.

    Если вы задаете коэффициент сжатия, вы не можете задать bpp.

    Типы данных: single | double

    Количество классов для квантования, заданное как разделенная разделенными запятой парами, состоящая из 'nbclas' и положительное целое число, больше или равное 2 и меньше или равное 100.

    nbclas действителен только для методов глобального порога.

    Типы данных: single | double

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

    threshold действителен только для методов глобального порога.

    Если вы задаете threshold, вы не можете задать nbcfs, percfs, bpp, или comprat.

    Типы данных: single | double

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

    nbcfs действителен только для методов глобального порога.

    Если вы задаете nbcfs, вы не можете задать threshold, percfs, bpp, или comprat.

    Типы данных: single | double

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

    percfs действителен только для методов глобального порога.

    Если вы задаете percfs, вы не можете задать threshold, nbcfs, bpp, или comprat.

    Типы данных: single | double

    Отобразите параметр

    свернуть все

    Параметр Plot, заданный как разделенная разделенными запятой парами, состоящая из 'plotpar' и одно из перечисленных значений:

    • 'plot' или 0 - постройте график только сжатого изображения

    • 'step' или 1 - отображение каждого шага процесса кодирования (только для методов PCSM)

    Выходные аргументы

    свернуть все

    Степень сжатия, возвращенная в виде скаляра.

    Отношение бит/пиксель, возвращаемое как скаляр.

    Несжатое изображение, возвращенное как 2-D массив, содержащий либо индексированное изображение, либо трехмерный массив uint8 содержащее изображение труколора.

    Ссылки

    [1] Кристоф, Эммануэль, Пьер Дюамель и Коринн Маилес. «Адаптация Zerotrees с использованием представлений двоичных цифр со знаком для 3D кодирования изображений». Журнал EURASIP по обработке изображений и видео 2007, № 1 (2007): 054679. https://doi.org/10.1186/1687-5281-2007-054679.

    [2] Misiti, Michel, Yves Misiti, Georges Oppenheim, and Jean-Michel Poggi, eds. Вейвлеты и их приложения. Лондон, Великобритания: ISTE, 2007. https://doi.org/10.1002/9780470612491.

    [3] Саид, А. и У. А. Перлман. «Новый, быстрый и эффективный кодек изображений, основанный на наборе разбиений в иерархических деревьях». Транзакции IEEE по схемам и системам для видеотехнологий 6, № 3 (июнь 1996 года): 243-50. https://doi.org/10.1109/76.499834.

    [4] Shapiro, J.M. «Embedded Image Coding Using Zerotrees of Wavelet Coefficients». Транзакции IEEE по обработке сигналов 41, № 12 (декабрь 1993 года): 3445-62. https://doi.org/10.1109/78.258085.

    [5] Странг, Гилберт и Чыонг Нгуен. Вейвлеты и банки фильтров. ред. Уэлсли, Mass: Wellesley-Cambridge Press, 1997.

    [6] Walker, James S. «Wavelet-Based Image Compression». Подглавка в Преобразовании и Сжатии данных. Праймер по вейвлетам и их научному применению. Том 29. Изучение передовой математики. CRC Press, 1999. https://doi.org/10.1201/9781420050011.

    Введенный в R2008b