Цель этого примера состоит в том, чтобы показать, как сжать изображение с помощью двумерного вейвлета анализа. Сжатие является одним из важнейших применений вейвлетов. Как и шумоподавление, процедура сжатия содержит три шага:
Разложение: Выберите вейвлет, выберите уровень N. Вычислите вейвлет-разложение сигнала на уровне N.
Пороговые коэффициенты детализации: Для каждого уровня от 1 до N выбирается порог и применяется жесткое пороговое значение к коэффициентам детализации.
Реконструкция: Вычислите реконструкцию вейвлета с помощью исходных коэффициентов приближения уровня N и измененных коэффициентов детализации уровней от 1 до N.
На шаге 2 находится различие с процедурой шумоподавления. Существует два подхода к сжатию:
Первый состоит из взятия вейвлет сигнала и сохранения наибольших коэффициентов абсолютного значения. В этом случае можно задать глобальный порог, эффективность сжатия или относительную квадратную норму эффективности восстановления. Таким образом, необходимо выбрать только один параметр.
Второй подход состоит в применении визуально определенных зависящих от уровня порогов.
Давайте рассмотрим реальный пример сжатия для данного и неоптимизированного выбора вейвлета, чтобы получить почти полное восстановление квадратной нормы для изображения.
load woman; % Load original image image(X) title('Original Image') colormap(map)
x = X(100:200,100:200); % Select ROI
Характеристики сжатия данного вейвлет-базиса в основном связаны с относительной трудностью представления вейвлет-области для сигнала. Понятие, лежащее в основе сжатия, основано на концепции, что правильный компонент сигнала может быть точно аппроксимирована с помощью следующих элементов: небольшого количества коэффициентов приближения (на подходящем выбранном уровне) и некоторых коэффициентов детализации.
n = 5; % Decomposition level w = 'sym8'; % Near symmetric wavelet [c,l] = wavedec2(x,n,w); % Multilevel 2-D wavelet decomposition
В этом первом способе функция WDENCMP выполняет процесс сжатия из структуры разложения вейвлета [c,l]
изображения.
opt = 'gbl'; % Global threshold thr = 20; % Threshold sorh = 'h'; % Hard thresholding keepapp = 1; % Approximation coefficients cannot be thresholded [xd,cxd,lxd,perf0,perfl2] = wdencmp(opt,c,l,w,n,thr,sorh,keepapp); image(x) title('Original Image') colormap(map)
figure
image(xd)
title('Compressed Image - Global Threshold = 20')
colormap(map)
Счет сжатия (%)
perf0
perf0 = 74.3067
L2-norm восстановления (%)
perfl2
perfl2 = 99.9772
Плотность разреженной матрицы разложения тока:
cxd = sparse(cxd); cxd_density = nnz(cxd)/numel(cxd)
cxd_density = 0.2569
Функция WDENCMP также позволяет пороги, зависящие от уровня и ориентации. В этом случае приближение сохраняется. Зависящие от уровня пороги в трех ориентациях горизонтальные, диагональные и вертикальные следующие:
opt = 'lvd'; % Level-dependent thresholds thr_h = [17 18]; % Horizontal thresholds thr_d = [19 20]; % Diagonal thresholds thr_v = [21 22]; % Vertical thresholds thr = [thr_h ; thr_d ; thr_v];
В этом втором примере заметьте, что функция WDENCMP выполняет процесс сжатия из изображения x
.
[xd2,cxd2,lxd2,perf02,perfl22] = wdencmp(opt,x,w,2,thr,sorh);
image(x)
title('Original Image')
colormap(map)
figure
image(xd2)
title('Compressed Image - Level-Dependent Thresholding')
colormap(map)
Счет сжатия (%)
perf02
perf02 = 77.3435
L2-norm восстановления (%)
perfl22
perfl22 = 99.6132
Плотность разреженной матрицы разложения тока:
cxd2 = sparse(cxd2); cxd2_density = nnz(cxd2)/numel(cxd2)
cxd2_density = 0.2266
При использовании зависящего от уровня порога плотность разложения вейвлета уменьшали на 3% при одновременном улучшении восстановления L2-norm на 3%. Если представление вейвлета слишком плотно, аналогичные стратегии могут использоваться в среде вейвлет-пакета, чтобы получить более разреженное представление. Затем можно определить лучшее разложение относительно подходящим образом выбранного энтропийоподобного критерия, который соответствует выбранной цели (шумоподавление или сжатие).