wcompress

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

    Описание

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

    Сжатие

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

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

    Примечание

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

    • Данные, записанные в файлы, используют 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 изображение истинного цвета к Karhunen-Loève, преобразовывают.

    [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 objects. Axes object 1 with title Original image contains an object of type image. Axes object 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') использование Karhunen-Loeve преобразовывает ('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');
    

    В этом примере показано, как сжать изображение истинного цвета с помощью разделения набора в иерархических деревьях - 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 objects. Axes object 1 with title Original image contains an object of type image. Axes object 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
    

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

    свернуть все

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

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

    Сжатие

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

    Несжатие

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

    Имя файла образа в виде вектора символов или строкового скаляра. Файлом является MATLAB® Поддерживаемый формат (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 имя аргумента и 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' — никакое преобразование (значение по умолчанию), тип изображения (истинный цвет или шкала полутонов) автоматически обнаруживается

    • 'g' — полутоновый тип преобразования

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

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

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

    • 'yuv' — Цветовое пространство YUV преобразовывает

    • 'klt' — Karhunen-Loève преобразовывают

    • '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

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

    свернуть все

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

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

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

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

    свернуть все

    Коэффициент сжатия, возвращенный как скаляр.

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

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

    Ссылки

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

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

    [3] Сказанный, A. и В.А. Перлмен. “Новое, Быстро, и Эффективный Кодек Изображений На основе Разделения Набора в Иерархических Деревьях”. Транзакции IEEE на Схемах и Системах для Видео Технологии 6, № 3 (июнь 1996): 243–50. https://doi.org/10.1109/76.499834.

    [4] Шапиро, J.M. “Кодирование Встроенного изображения Используя Zerotrees Коэффициентов Вейвлета”. Транзакции IEEE на Обработке сигналов 41, № 12 (декабрь 1993): 3445–62. https://doi.org/10.1109/78.258085.

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

    [6] Уокер, Джеймс С. "Основанное на вейвлете Сжатие изображения". Подраздел в Преобразовании и Сжатии данных. Краткая информация о Вейвлетах и Их Научные Приложения. Издание 29. Исследования в Усовершенствованной Математике. Нажатие CRC, 1999. https://doi.org/10.1201/9781420050011.

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