exponenta event banner

wcompress

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

    Описание

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

    Сжатие

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

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

    Примечание

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

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

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

    пример

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

    wcompress('c',I,___) преобразует индексированное изображение I{1} к цветному изображению 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, содержащий индексированное изображение или массив 3-D uint8 содержит трюкколорное изображение. Размер строки и столбца изображения должен быть двумя степенями.

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

    Сжатие

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

    Несжатие

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

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

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

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

      compmthd

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

      'ezw'

      Внедренный вейвлет Zerotree

      'spiht'

      Задать разбиение в иерархических деревьях

      'stw'

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

      'wdr'

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

      'aswdr'

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

      'spiht_3d'

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

      Для получения дополнительной информации об этих методах см. ссылки, особенно [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' задает преобразование типа изображения в градации серого.
    Параметры преобразования данных

    свернуть все

    Имя вейвлета, указанное как пара, разделенная запятыми, состоящая из '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' - Преобразование цветового пространства CIAXYZ

    Методы значимости прогрессивных коэффициентов (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

    Отображаемый параметр

    свернуть все

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

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

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

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

    свернуть все

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

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

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

    Ссылки

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

    [2] Мисити, Мишель, Ив Мисити, Жорж Оппенгейм и Жан-Мишель Погги, eds. Вейвлеты и их приложения. Лондон, Великобритания: ISTE, 2007. https://doi.org/10.1002/9780470612491.

    [3] Саид, А. и У.А. Перлман. «Новый, быстрый и эффективный кодек образа, основанный на задании разбиения в иерархических деревьях». IEEE Transactions on Circuits and Systems for Video Technology 6, No. 3 (июнь 1996 года): 243-50. https://doi.org/10.1109/76.499834.

    [4] Шапиро, Дж. М. «Кодирование встроенного изображения с использованием нулевых деревьев вейвлет-коэффициентов». IEEE Transactions on Signal Processing 41, No. 12 (December 1993): 3445-62. https://doi.org/10.1109/78.258085.

    [5] Странг, Гилберт и Труонг Нгуен. Вейвлеты и банки фильтров. ред. Уэлсли, месса: Уэлсли-Кембридж Пресс, 1997.

    [6] Уокер, Джеймс С. «Сжатие изображения на основе вейвлета». Подраздел в разделе Преобразование и сжатие данных. Букварь по вейвлетам и их научным применениям. Том 29. Учёба по продвинутой математике. КПР Пресс, 1999 год. https://doi.org/10.1201/9781420050011.

    Представлен в R2008b