exponenta event banner

2-D Стационарное вейвлет-преобразование

В этом разделе рассматриваются функции дискретного стационарного вейвлет 2-D анализа с помощью программного обеспечения Wavelet Toolbox™.

Функция анализа-разложения

Имя функцииЦель

swt2

Разложение

Функция синтеза-реконструкции

Имя функцииЦель

iswt2

Реконструкция

Структура стационарного вейвлет-разложения более прослеживаема, чем вейвлет-структура. Таким образом, утилиты, полезные для случая вейвлета, не являются необходимыми для стационарного вейвлет-преобразования (SWT).

В этом разделе вы научитесь

  • Загрузить изображение

  • Анализ изображения

  • Выполнение одноуровневых и многоуровневых декомпозиций и реконструкций изображений (только в командной строке)

  • обличить изображение

Анализ

2-D с помощью командной строки

В этом примере мы покажем, как можно использовать 2-D стационарный вейвлет-анализ для обличения изображения.

Примечание

Вместо использования image(I) для визуализации изображения I, мы используем image(wcodemat(I)), которая отображает масштабированную версию I приводя к более четкому представлению деталей и приближений (см. wcodemat справочная страница).

Этот пример включает изображение, содержащее шум.

  1. Загрузите изображение.

    В подсказке MATLAB ® введите

    load noiswom 
    whos
    
    
    ИмяРазмерБайтыКласс
    X96x9673728double array
    map255x36120double array

    Для SWT, если декомпозиция на уровне k требуется, 2^k должны равномерно разделяться на size(X,1) и size(X,2). Если исходное изображение имеет неправильный размер, можно использовать функцию wextend для его удлинения.

  2. Выполните одноуровневую стационарную вейвлет-декомпозицию.

    Выполните одноуровневую декомпозицию изображения с помощью db1 вейвлет. Напечатать

    [swa,swh,swv,swd] = swt2(X,1,'db1');
    

    Это генерирует матрицы коэффициентов аппроксимации первого уровня (swa) и горизонтальные, вертикальные и диагональные детали (swh, swv, и swdсоответственно). Оба имеют размер - размер изображения. Напечатать

    whos
    
    
    ИмяРазмерБайтыКласс
    X96x9673728double array
    map255x36120double array
    swa96x9673728double array
    swh96x9673728double array
    swv96x9673728double array
    swd96x9673728double array
  3. Отображение коэффициентов аппроксимации и подробных данных.

    Для отображения коэффициентов аппроксимации и деталей на уровне 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');
    

  4. Регенерировать изображение с помощью обратного стационарного вейвлет-преобразования.

    Чтобы найти обратное преобразование, введите

    A0 = iswt2(swa,swh,swv,swd,'db1');
    

    Чтобы проверить идеальную реконструкцию, введите

    err = max(max(abs(X-A0)))
    
    err =
         1.1369e-13
    
  5. Построение и отображение аппроксимации и деталей из коэффициентов.

    Для построения аппроксимации и деталей уровня 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')
    

  6. Выполните многоуровневую стационарную вейвлет-декомпозицию.

    Для выполнения декомпозиции на уровне 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 
    
    ИмяРазмерБайтыКласс
    X96x9673728double array
    map255x36120double array
    swa96x96x3221184double array
    swh96x96x3221184double array
    swv96x96x3221184double array
    swd96x96x3221184double array
  7. Отображение коэффициентов аппроксимаций и деталей.

    Для отображения коэффициентов аппроксимаций и деталей введите

    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
    
  8. Реконструировать аппроксимацию на уровне 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
    
  9. Реконструируйте и отобразите аппроксимации на уровнях 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
    
  10. Удалите шум, установив пороговое значение.

    Чтобы скрыть изображение, используйте пороговое значение, которое мы находим с помощью инструмента приложения 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');
    

    Тот же график можно получить с помощью команд графика на шаге 9 выше.

Интерактивное 2-D стационарное вейвлет-преобразование

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

  1. Запустите инструмент Denoising 2-D стационарного вейвлет-преобразования.

    В приглашении MATLAB введите waveletAnalyzer.

    Появится вейвлет-анализатор:

    Выберите пункт меню SWT Denoising 2-D.

  2. Загрузить данные.

    В командной строке MATLAB введите

    load noiswom
    В инструменте SWT Denoising 2-D выберите «Файл» > «Импортировать изображение из рабочего пространства». При появлении диалогового окна Импорт из рабочего пространства (Import from Workspace) выберите X переменная. Нажмите кнопку ОК, чтобы импортировать изображение.

  3. Выполните декомпозицию стационарного вейвлета.

    Выберите haar вейвлет в меню Вейвлет, выберите 4 в меню Уровень, а затем нажмите кнопку Разложить изображение.

    Инструмент отображает гистограммы коэффициентов детализации стационарного вейвлета изображения в левой части окна. Эти гистограммы организованы следующим образом:

    • Снизу для уровня 1 до верха для уровня 4

    • Слева горизонтальные коэффициенты, посередине диагональные коэффициенты и справа вертикальные коэффициенты

  4. Осквернение изображения с помощью стационарного вейвлет-преобразования.

    Несмотря на то, что имеется ряд опций для точной настройки алгоритма деноизирования, мы примем значения по умолчанию мягкого порогового значения фиксированной формы и нескрупулезного белого шума. Ползунки, расположенные справа от окна, управляют зависящими от уровня порогами, обозначенными пунктирными линиями, проходящими вертикально через гистограммы коэффициентов слева от окна. Нажмите кнопку Denoise.

    Результат, похоже, перегружен, а выбранные пороги слишком агрессивны. Тем не менее, гистограмма остатков довольно хороша, поскольку близка к гауссову распределению, которое является шумом, введенным для получения анализируемого изображения noiswom.mat из фрагмента исходного изображения woman.mat.

  5. Выбор метода пороговой обработки.

    В меню Выбор метода пороговой обработки выберите позицию «Штрафовать». Соответствующее значение по умолчанию для режима пороговой обработки автоматически устанавливается равным hard; принять его. Используйте ползунок «Sparsity» для настройки порогового значения, близкого к 45.5, а затем нажмите кнопку «Denoise».

    Результат вполне удовлетворительный, хотя улучшить его можно незначительно.

    Выберите sym6 вейвлет и нажмите кнопку «Разложить изображение». Используйте ползунок «Sparsity» для настройки порогового значения, близкого к 40.44, а затем нажмите кнопку «Denoise».

Импорт и экспорт информации из приложения Wavelet Analyzer

Инструмент позволяет сохранить изображение с обозначением denoised на диск. Панель инструментов создает MAT-файл в текущей папке с выбранным именем.

Для сохранения запрещенного изображения из текущего процесса обнаружения используйте меню File > Save denoised Image. Появится диалоговое окно, в котором можно указать папку и имя файла для хранения изображения. Введите имя dnoiswom. После сохранения данных изображения в файл dnoiswom.mat, загрузите переменные в рабочую область:

load dnoiswom 
whos
ИмяРазмерБайтыКласс
X96x9673728double array
map255x36120double array
valTHR3x496double array
wname1x48char array

Обесцененное изображение X и map - цветовая карта. Кроме того, имеются параметры процесса обессоливания. Имя вейвлета содержится в wnameи пороговые значения, зависящие от уровня, кодируются в valTHR. Переменная valTHR имеет четыре столбца (уровень разложения) и три строки (по одной для каждой ориентации детализации).