В этом разделе рассматриваются функции 2-D дискретного стационарного вейвлет с помощью программного обеспечения Wavelet Toolbox™.
| Имя функции | Цель |
|---|---|
Разложение |
| Имя функции | Цель |
|---|---|
Реконструкция |
Стационарная структура разложения вейвлетов более прослеживаема, чем вейвлет. Так, полезные для вейвлета случая утилиты не нужны для Стационарного Преобразования Вейвлета (SWT).
В этом разделе вы научитесь
Загрузка изображения
Анализ изображения
Выполните одноуровневое и многоуровневое разложение и реконструкции изображений (только для командной строки)
денуазировать изображение
В этом примере мы покажем, как можно использовать 2-D стационарный вейвлет для денуизации изображения.
Примечание
Вместо использования image(I) для визуализации изображения I, мы используем image(wcodemat(I)), которая отображает измененную версию I приведя к более четкому представлению деталей и приближений (см. wcodemat страница с описанием).
Этот пример включает изображение, содержащее шум.
Загрузка изображения.
Из MATLAB® приглашение, тип
load noiswom whos
| Имя | Размер | Байты | Класс |
|---|---|---|---|
X | 96x96 | 73728 | double array |
map | 255x3 | 6120 | double array |
Для SWT, если разложение на уровне k требуется, 2^k должны делиться равномерно на size(X,1) и size(X,2). Если ваше оригинальное изображение не имеет правильного размера, можно использовать функцию wextend чтобы продлить его.
Выполните одноуровневое стационарное разложение вейвлет.
Выполните одноуровневое разложение изображения с помощью db1 вейвлет. Напечатать
[swa,swh,swv,swd] = swt2(X,1,'db1');
Это генерирует матрицы коэффициентов приближения первого уровня (swa) и горизонтальные, вертикальные и диагональные детали (swh, swv, и swd, соответственно). Оба имеют размер изображения. Напечатать
whos
| Имя | Размер | Байты | Класс |
|---|---|---|---|
X | 96x96 | 73728 | double array |
map | 255x3 | 6120 | double array |
swa | 96x96 | 73728 | double array |
swh | 96x96 | 73728 | double array |
swv | 96x96 | 73728 | double array |
swd | 96x96 | 73728 | double array |
Отобразите коэффициенты приближения и детали.
Чтобы отобразить коэффициенты приближения и детали на уровне 1, введите
map = pink(size(map,1)); colormap(map)
subplot(2,2,1), image(wcodemat(swa,192));
title('Approximation swa')
subplot(2,2,2), image(wcodemat(swh,192));
title('Horiz. Detail swh')
subplot(2,2,3), image(wcodemat(swv,192));
title('Vertical Detail swv')
subplot(2,2,4), image(wcodemat(swd,192));
title('Diag. Detail swd');

Регенерируйте изображение с помощью Обратного Стационарного Преобразования Вейвлета.
Чтобы найти обратное преобразование, введите
A0 = iswt2(swa,swh,swv,swd,'db1');
Чтобы проверить идеальную реконструкцию, введите
err = max(max(abs(X-A0)))
err =
1.1369e-13
Создайте и отобразите приближение и детали из коэффициентов.
Чтобы создать приближение и детали уровня 1 (A1, H1, V1 и D1) из коэффициентов swa, swh, swv и swd, type
nulcfs = zeros(size(swa)); A1 = iswt2(swa,nulcfs,nulcfs,nulcfs,'db1'); H1 = iswt2(nulcfs,swh,nulcfs,nulcfs,'db1'); V1 = iswt2(nulcfs,nulcfs,swv,nulcfs,'db1'); D1 = iswt2(nulcfs,nulcfs,nulcfs,swd,'db1');
Чтобы отобразить приближение и детали на уровне 1, введите
colormap(map)
subplot(2,2,1), image(wcodemat(A1,192));
title('Approximation A1')
subplot(2,2,2), image(wcodemat(H1,192));
title('Horiz. Detail H1')
subplot(2,2,3), image(wcodemat(V1,192));
title('Vertical Detail V1')
subplot(2,2,4), image(wcodemat(D1,192));
title('Diag. Detail D1')

Выполните многоуровневое стационарное разложение вейвлет.
Чтобы выполнить разложение на уровне 3 изображения (снова используя db1 вейвлет), тип
[swa,swh,swv,swd] = swt2(X,3,'db1');
Это генерирует коэффициенты приближений на уровнях 1, 2 и 3 (swa) и коэффициенты деталей (swh, swv и swd). Заметьте, что матрицы swa(:,:,i), swh(:,:,i), swv(:,:,i), и swd(:,:,i) для заданного уровня i имеют размер изображения. Напечатать
clear A0 A1 D1 H1 V1 err nulcfs whos
| Имя | Размер | Байты | Класс |
|---|---|---|---|
X | 96x96 | 73728 | double array |
map | 255x3 | 6120 | double array |
swa | 96x96x3 | 221184 | double array |
swh | 96x96x3 | 221184 | double array |
swv | 96x96x3 | 221184 | double array |
swd | 96x96x3 | 221184 | double array |
Отобразите коэффициенты приближений и деталей.
Чтобы отобразить коэффициенты приближений и деталей, введите
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(swa(:,:,i),192));
title(['Approx. cfs level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(swh(:,:,i),192));
title(['Horiz. Det. cfs level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(swv(:,:,i),192));
title(['Vert. Det. cfs level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(swd(:,:,i),192));
title(['Diag. Det. cfs level ',num2str(i)])
kp = kp + 4;
end
Восстановите приближение на уровне 3 и детали из коэффициентов.
Чтобы восстановить приближение на уровне 3, введите
mzero = zeros(size(swd)); A = mzero; A(:,:,3) = iswt2(swa,mzero,mzero,mzero,'db1');
Чтобы восстановить детали на уровнях 1, 2 и 3, введите
H = mzero; V = mzero;
D = mzero;
for i = 1:3
swcfs = mzero; swcfs(:,:,i) = swh(:,:,i);
H(:,:,i) = iswt2(mzero,swcfs,mzero,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swv(:,:,i);
V(:,:,i) = iswt2(mzero,mzero,swcfs,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swd(:,:,i);
D(:,:,i) = iswt2(mzero,mzero,mzero,swcfs,'db1');
end
Восстановите и отобразите приближения на уровнях 1, 2 из аппроксимации на уровне 3 и детали на уровнях 1, 2 и 3.
Чтобы восстановить приближения на уровнях 2 и 3, введите
A(:,:,2) = A(:,:,3) + H(:,:,3) + V(:,:,3) + D(:,:,3); A(:,:,1) = A(:,:,2) + H(:,:,2) + V(:,:,2) + D(:,:,2);
Чтобы отобразить приближения и детали на уровнях 1, 2 и 3, введите
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(A(:,:,i),192));
title(['Approx. level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(H(:,:,i),192));
title(['Horiz. Det. level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(V(:,:,i),192));
title(['Vert. Det. level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(D(:,:,i),192));
title(['Diag. Det. level ',num2str(i)])
kp = kp + 4;
end
Снимите шум пороговым значением.
Чтобы обесценить изображение, используйте пороговое значение, которое мы находим с помощью инструмента Wavelet Analyzer приложения (см. Следующий раздел), используйте wthresh команду для выполнения фактического порога коэффициентов детализации, а затем использовать iswt2 команда для получения деноизмененного изображения.
thr = 44.5; sorh = 's'; dswh = wthresh(swh,sorh,thr); dswv = wthresh(swv,sorh,thr); dswd = wthresh(swd,sorh,thr); clean = iswt2(swa,dswh,dswv,dswd,'db1');
Чтобы отобразить как оригинальное, так и деноидированное изображения, введите
colormap(map)
subplot(1,2,1), image(wcodemat(X,192));
title('Original image')
subplot(1,2,2), image(wcodemat(clean,192));
title('denoised image')

Второй синтаксис может использоваться для swt2 и iswt2 функции, дающие те же результаты:
lev= 4; swc = swt2(X,lev,'db1'); swcden = swc; swcden(:,:,1:end-1) = wthresh(swcden(:,:,1:end-1),sorh,thr); clean = iswt2(swcden,'db1');
Вы получаете тот же график с помощью команд plot на шаге 9 выше.
В этом разделе мы исследуем стратегию шумоподавления изображений на основе 2-D стационарного вейвлет с помощью приложения Wavelet Analyzer. Основная идея состоит в том, чтобы усреднить много немного различных дискретных вейвлет.
Запустите Stationary Wavelet Transform Denoizing 2-D Инструмент.
Из подсказки MATLAB введите waveletAnalyzer.
Появляется Wavelet Analyzer:

Выберите меню SWT Шумоподавления 2-D элементов.

Загрузка данных.
В командной строке MATLAB введите
load noiswom
X переменная. Нажмите кнопку ОК, чтобы импортировать изображение.Выполните стационарное разложение вейвлет.
Выберите haar вейвлет из меню Wavelet, выберите 4 из меню Level, а затем нажмите кнопку Descompose Image.
Инструмент отображает гистограммы коэффициентов детализации стационарных вейвлет изображения слева от окна. Эти гистограммы организованы следующим образом:
От нижнего для уровня 1 до верхнего для уровня 4
На левых горизонтальных коэффициентах, в средних диагональных коэффициентах и на правых вертикальных коэффициентах
Денуризируйте изображение с помощью Стационарного Преобразования Вейвлета.
Несмотря на то, что для подстройки алгоритма шумоподавления доступен ряд опций, мы примем значения по умолчанию мягкого порога фиксированной формы и немасштабированного белого шума. Ползунки, расположенные справа от окна, управляют зависимыми от уровня порогами, обозначенными штриховыми линиями, проходящими вертикально через гистограммы коэффициентов слева от окна. Нажмите кнопку Denoise.

Результат, кажется, переизбран, и выбранные пороги слишком агрессивны. Тем не менее, гистограмма невязок довольно хороша, поскольку она близка к Гауссову распределению, которое является шумом, введенным для получения анализируемого изображения noiswom.mat из части оригинального изображения woman.mat.
Выбор метода порогового значения.
В меню Select thresholding method выберите Penalize low item. Связанное значение по умолчанию для режима порога автоматически устанавливается на жесткое значение; принять его. Используйте ползунок Sparsity, чтобы настроить пороговое значение близкое к 45,5, а затем нажмите кнопку denoise.

Результат вполне удовлетворительный, хотя улучшить его можно немного.
Выберите sym6 вейвлет и нажмите кнопку «Разложить изображение». Используйте ползунок Sparsity, чтобы настроить пороговое значение близкое к 40.44, а затем нажмите кнопку denoise.
Инструмент позволяет вам сохранять деноифицированное изображение на диск. Тулбокс создает MAT-файл в текущей папке с выбранным именем.
Чтобы сохранить деноизированное изображение из настоящего процесса шумоподавления, используйте меню File > Save denoised Image. Появится диалоговое окно, в котором можно задать папку и имя файла для хранения изображения. Введите имя dnoiswom. После сохранения данных изображения в файл dnoiswom.mat, загрузите переменные в рабочую область:
load dnoiswom whos
| Имя | Размер | Байты | Класс |
|---|---|---|---|
X | 96x96 | 73728 | double array |
map | 255x3 | 6120 | double array |
valTHR | 3x4 | 96 | double array |
wname | 1x4 | 8 | char array |
Деноминированное изображение X и map - палитра. В сложение доступны параметры процесса шумоподавления. Имя вейвлета содержится в wname, и зависимые от уровня пороги закодированы в valTHR. Переменная valTHR имеет четыре столбца (уровень разложения) и три строки (по одной для каждой ориентации детализации).