Этот раздел берет вас через функции 2D дискретного стационарного анализа вейвлета с помощью программного обеспечения Wavelet Toolbox™.
FunctionName | Цель |
---|---|
Разложение |
FunctionName | Цель |
---|---|
Реконструкция |
Стационарная структура разложения вейвлета более послушна, чем вейвлет один. Так, утилиты, полезные для случая вейвлета, не необходимы для Стационарного преобразования вейвлета (SWT).
В этом разделе вы будете учиться
Загрузите изображение
Анализируйте изображение
Выполните одноуровневые и многоуровневые разложения изображений и реконструкции (только командная строка)
denoise изображение
В этом примере мы покажем, как можно использовать 2D стационарный анализ вейвлета для denoise изображение.
Вместо того, чтобы использовать image(I)
, чтобы визуализировать изображение I
, мы use 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)
. Если ваше оригинальное изображение не имеет правильного размера, можно использовать Расширение Изображений инструмент приложения Wavelet Analyzer или функциональный 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
, вводит
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
Удалите шум пороговой обработкой.
К denoise изображение используйте пороговое значение, мы находим использование инструмента приложения Wavelet Analyzer (см. следующий раздел), используйте команду wthresh
, чтобы выполнить фактическую пороговую обработку коэффициентов детали, и затем использовать команду iswt2
, чтобы получить изображение denoised.
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');
Чтобы отобразить и оригинал и изображения denoised, ввести
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 выше.
В этом разделе мы исследуем стратегию изображений шумоподавления на основе 2D стационарного анализа вейвлета с помощью приложения Wavelet Analyzer. Основная идея состоит в том, чтобы составить в среднем много немного отличающихся дискретных исследований вейвлета.
Запустите стационарный вейвлет преобразовывают шумоподавление 2D инструмент.
От посдказки MATLAB введите waveletAnalyzer
.
Wavelet Analyzer появляется:
Кликните по пункту меню SWT Denoising 2-D.
Загрузка данных.
В подсказке команды MATLAB ввести
load noiswom
X
. Нажмите ОК, чтобы импортировать изображение.Выполните стационарное разложение вейвлета.
Выберите вейвлет haar
из меню Wavelet, выберите 4 из меню Level, и затем нажмите Decompose Image button.
Инструмент отображает гистограммы стационарных коэффициентов детали вейвлета изображения слева от окна. Эти гистограммы организованы можно следующим образом:
От нижней части для уровня 1 к верхней части для уровня 4
На левых горизонтальных коэффициентах, в средних диагональных коэффициентах, и на правильных вертикальных коэффициентах
Denoise изображение с помощью Стационарного Преобразования Вейвлета.
В то время как много опций доступны для подстройки алгоритма шумоподавления, мы примем значения по умолчанию фиксированной формы мягкая пороговая обработка и немасштабированный белый шум. Ползунки, расположенные справа от окна, управляют зависимыми порогами уровня, обозначенными пунктирными линиями, запускающимися вертикально через гистограммы коэффициентов слева от окна. Нажмите кнопку Denoise.
Результат, кажется, сверхсглаживается и выбранные слишком агрессивные пороги. Тем не менее, гистограмма невязок довольно хороша, поскольку это близко к Распределению Гаусса, которое является шумом, введенным, чтобы произвести анализируемое изображение noiswom.mat
из части оригинального изображения woman.mat
.
Выбор метода задания порога.
Из Избранного меню метода задания порога выберите Penalize низкий элемент. Связанное значение по умолчанию для режима пороговой обработки автоматически установлено в трудно; примите его. Используйте ползунок Разреженности, чтобы настроить пороговое значение близко к 45,5, и затем нажать denoise кнопку.
Результат является довольно удовлетворительным, несмотря на то, что возможно улучшить его немного.
Выберите вейвлет sym6
и нажмите Decompose Image button. Используйте ползунок Разреженности, чтобы настроить пороговое значение близко к 40,44, и затем нажать denoise кнопку.
Инструмент позволяет вам сохранить изображение denoised на диск. Тулбокс создает MAT-файл в текущей папке с именем, которое вы выбираете.
Чтобы сохранить denoised образ от существующего процесса шумоподавления, используйте файл меню>, Сохраняют denoised Образ. Диалоговое окно появляется, который позволяет вам задать папку и имя файла для хранения изображения. Введите имя 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 |
Изображением denoised является X
, и map
является палитрой. Кроме того, параметры процесса шумоподавления доступны. Имя вейвлета содержится в wname
, и зависимые пороги уровня закодированы в valTHR
. Переменная valTHR
имеет четыре столбца (уровень разложения) и три строки (один для каждой ориентации детали).