Цель этого примера состоит в том, чтобы показать, как сжать изображение с помощью двумерного анализа вейвлета. Сжатие является одним из наиболее важных приложений вейвлетов. Как шумоподавление, процедура сжатия содержит три шага:
Разложитесь: Выберите вейвлет, выберите уровень 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('Color','white'),image(xd) title('Compressed Image - Global Threshold = 20') colormap(map)
Восстановление L2-нормы (%)
perf0
perf0 = 74.3067
Счет сжатия (%)
perfl2
perfl2 = 99.9772
Плотность текущей разреженной матрицы разложения:
cxd = sparse(cxd); cxd_density = nnz(cxd)/prod(size(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('Color','white'),image(xd2) title('Compressed Image - Level-Dependent Thresholding') colormap(map)
Восстановление L2-нормы (%)
perf02
perf02 = 77.3435
Счет сжатия (%)
perfl22
perfl22 = 99.6132
Плотность текущей разреженной матрицы разложения:
cxd2 = sparse(cxd2); cxd2_density = nnz(cxd2)/prod(size(cxd2))
cxd2_density = 0.2266
При помощи зависимой уровнем пороговой обработки плотность разложения вейвлета уменьшалась на 3% при улучшении восстановления L2-нормы на 3%. Если представление вейвлета является слишком плотным, подобные стратегии могут использоваться в пакетной среде вейвлета, чтобы получить более разреженное представление. Можно затем определить лучшее разложение относительно соответственно выбранного подобного энтропии критерия, который соответствует выбранной цели (шумоподавление или сжатие).