Алгоритм быстрого Вейвлета преобразования (FWT)

В 1988 году Маллат выпустил алгоритм быстрого вейвлета разложения и реконструкции [1]. Алгоритм Mallat для дискретного вейвлет (DWT) является, по сути, классической схемой в сообществе обработки сигналов, известной как двухканальный поддиапазонный кодер, использующий сопряженные квадратурные фильтры или квадратурные зеркальные фильтры (QMF).

  • Алгоритм разложения начинается с сигнала s, затем вычисляет координаты A 1 и D 1, а затем координаты A 2 и D 2 и так далее.

  • Алгоритм реконструкции, называемый обратным дискретным вейвлет (IDWT), начинается с координат AJ и DJ, затем вычисляет координаты AJ -1, а затем с помощью координат AJ -1 и DJ -1 вычисляет координаты AJ -2 и так далее.

В этом разделе рассматриваются следующие темы:

Фильтры, используемые для вычисления DWT и IDWT

Для ортогонального вейвлета, в среде мультиразрешения, мы начинаем с функции масштабирования, и функции вейвлета. Одним из фундаментальных отношений является отношение двойной шкалы (уравнение расширения или уравнение уточнения):

12ϕ(x2)=nZwnϕ(xn)

Все фильтры, используемые в DWT и IDWT, тесно связаны с последовательностью

(<reservedrangesplaceholder1>) n∊Z

Очевидно, что, если и поддерживается компактно, последовательность (wn) является конечной и может рассматриваться как фильтр. Фильтрующая W, которая называется масштабирующим фильтром (nonnormalized), является

  • Конечная импульсная характеристика (КИХ)

  • Длины 2 N

  • Из суммы 1

  • Нормы 12

  • Нормы 1

  • Фильтр lowpass

Для примера, для db3 масштабирующий фильтр,

load db3 
db3
    db3 =
    0.2352   0.5706   0.3252  -0.0955  -0.0604   0.0249

sum(db3)
    ans =
         1.0000

norm(db3)
    ans =
         0.7071

Из фильтра W задаем четыре КИХ-фильтра, длиной 2 N и нормой 1, организованные следующим образом .

Фильтры

Низкочастотные

High-Pass

Разложение

Lo_D

Hi_D

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

Lo_R

Hi_R

Четыре фильтра вычисляются с помощью следующей схемы.

где qmf таковы, что Hi_R и Lo_R являются квадратурными зеркальными фильтрами (т.е. Hi_R (k) = (-1 )k Lo_R (2 N + 1 - k)) для k = 1, 2,..., 2 N.

Обратите внимание, что wrev разворачивает коэффициенты фильтра. Так Hi_D и Lo_D также являются квадратурными зеркальными фильтрами. Расчет из этих фильтров выполняется с помощью orthfilt. Далее мы иллюстрируем эти свойства с db6 вейвлет.

Загрузите фильтр экстремального масштабирования фазы Daubechies и постройте график коэффициентов.

load db6;
subplot(421); stem(db6,'markerfacecolor',[0 0 1]);
title('Original scaling filter');

Использовать orthfilt для возврата фильтров анализа (разложения) и синтеза (реконструкции).

Получите дискретные преобразования Фурье (DFT) фильтров lowpass и highpass анализа. Постройте график модуля ДПФ.

LoDFT = fft(Lo_D,64);
HiDFT = fft(Hi_D,64);
freq = -pi+(2*pi)/64:(2*pi)/64:pi;
subplot(427); plot(freq,fftshift(abs(LoDFT)));
set(gca,'xlim',[-pi,pi]); xlabel('Radians/sample');
title('DFT Modulus - Lowpass Filter')
subplot(428); plot(freq,fftshift(abs(HiDFT)));
set(gca,'xlim',[-pi,pi]); xlabel('Radians/sample');
title('Highpass Filter');

Алгоритмы

Учитывая s сигнала длины N, DWT состоит не более чем из N каскадов log2. Начиная с s, первый шаг производит два набора коэффициентов: коэффициенты аппроксимации cA 1 и коэффициенты детализации cD 1. Эти векторы получаются путем свертки s с Lo_D фильтра нижних частот для аппроксимации и с Hi_D фильтра высоких частот для детализации с последующей диадической децимацией.

Точнее, первый шаг -

Длина каждого фильтра равна 2 L. Результат свертки сигнала N длиной 2 L фильтра - N + 2 L -1. Поэтому F и G сигналов имеют длину N + 2 L - 1. После понижающей дискретизации на 2 векторы коэффициентов cA 1 и cD 1 имеют длину

N12+L.

Следующий шаг разделяет коэффициенты аппроксимации cA 1 на две части с помощью одной и той же схемы, заменяя s на cA 1 и получая cA 2 и cD 2 и так далее.

Таким образом, вейвлет разложение s сигнала, анализируемого на уровне j, имеет следующую структуру: [cAj, cDj,..., cD 1].

Эта структура содержит для J = 3 терминальные узлы следующего дерева.

  • С другой стороны, начинаясь с <reservedrangesplaceholder5> <reservedrangesplaceholder4> и <reservedrangesplaceholder3> <reservedrangesplaceholder2>, IDWT восстанавливает <reservedrangesplaceholder1> <reservedrangesplaceholder0>-1, инвертируя шаг разложения, вставляя нули и скручивая результаты с фильтрами реконструкции.

  • Для изображений аналогичный алгоритм возможен для двумерных вейвлетов и функций масштабирования, полученных из 1-D вейвлетов тензорным продуктом.

    Этот вид 2-D DWT приводит к разложению коэффициентов аппроксимации на уровне j в четырех компонентах: приближение на уровне  j  + 1 и детали в трех ориентациях (горизонтальной, вертикальной и диагональной).

    Следующие графики описывают основные шаги разложения и реконструкции для изображений.

Так, для J = 2 2-D вейвлет имеет следующую форму.

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

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

Почему такой алгоритм существует?

Предыдущий абзац описывает алгоритмы, разработанные для сигналов или изображений конечной длины. Чтобы понять обоснование, мы должны рассмотреть сигналы бесконечной длины. Методы расширения заданного сигнала конечной длины описаны в Border Effects.

Давайте обозначим h = Lo_R и g = Hi_R и сосредоточимся на 1-D случае.

Сначала мы обосновываем, как перейти от уровня j к уровню j + 1, для вектора приближения. Это основной шаг алгоритма разложения для расчета приближений. Детали вычисляются таким же образом с помощью g фильтра вместо h фильтра.

Предположим (Ak(j)) k ∊ Z быть координатами вектора Aj:

Aj=kAk(j)ϕj,k

и Ak(j+1) координаты вектора Aj + 1:

Aj+1=kAk(j+1)ϕj+1,k

Ak(j+1) вычисляется по формуле

Ak(j+1)=nhn2kAn(j)

Эта формула напоминает формулу свертки.

Расчет очень простое.

Давайте определим

h˜(k)=h(k), и Fk(j+1)=nh˜knAn(j).

Последовательность F(j+1) - отфильтрованный выход последовательности A(j) фильтром h˜.

Получаем

Ak(j+1) = <reservedrangesplaceholder1> 2 <reservedrangesplaceholder0>(j+1)

Мы должны взять четные значения индекса F. Это понижающая дискретизация.

Последовательность A(j+1) - версия последовательности с понижающей дискретизацией F(j+1).

Инициализация осуществляется с помощью Ak(0) = s (k), где s (k) - значение сигналов в момент k.

Существует несколько причин для этого удивительного результата, все из которых связаны с ситуацией мультиразрешения и с некоторыми свойствами функций и j,k j,k .

Давайте опишем некоторые из них.

  1. Семейство (ϕ0,k,kZ) формируется из ортонормальных функций. Как следствие для любого j, семейство (ϕj,k,kZ) ортонормальный.

  2. Семейство с двойным индексом

    (ψj,k,jZ,kZ)

    ортонормальный.

  3. Для любого j, (ϕj,k,kZ) являются ортогональными (ψj,k,jj,kZ).

  4. Между двумя последовательными шкалами мы имеем фундаментальное отношение, называемое отношением двойной шкалы.

    Двойное соотношение шкалы для ϕ

    ϕ1,0=kZhkϕ0,k

    ϕj+1,0=kZhkϕj,k

    Это отношение представляет h фильтр алгоритма (hn=2ωn). Для получения дополнительной информации см. раздел «Фильтры, используемые для вычисления DWT и IDWT».

  5. Проверяем, что:

    1. Координата и j, 1,0 на j,k , hk и не зависит от j.

    2. Координата φ <reservedrangesplaceholder2> +1 , n на φ <reservedrangesplaceholder0> равнаϕj+1,n,ϕj,k=hk2n.

  6. Эти отношения обеспечивают ингредиенты для алгоритма.

  7. До сих пор мы использовали фильтр h. Высокочастотный фильтрующий g используется в двойном соотношении шкал, связывающем функции Между двумя последовательными шкалами у нас есть следующее двухкомпонентное фундаментальное соотношение.

    Двухкомпонентное соотношение между ψ и ϕ

    ψ1,0=kZgkϕ0,k

    ψj+1,0=kZgkϕj,k

  8. После шага разложения мы обосновываем теперь алгоритм реконструкции, построив его. Давайте упростим обозначение. Начиная с A 1 и D 1, давайте изучим A 0 = A 1 + Dj 1. Процедура такая же, чтобы вычислить A = Aj + 1 + Dj + 1.

    Давайте определим α <reservedrangesplaceholder1> , δ <reservedrangesplaceholder0>,αk0 около

    A1=nanϕ1,n     D1=nδnψ1,n     A0=kak0ϕ0,k

    Давайте оценим αk0 координаты как

    ak0=A0,ϕ0,k=A1+D1,ϕ0,k=A1,ϕ0,k+D1,ϕ0,k=nanϕ1,n,ϕ0,k+nδnψ1,n,ϕ0,k=nanhk2n+nδngk2n

Мы сосредоточим наше исследование на первой сумме nanhk2n; вторая сумма nδngk2n обрабатывается аналогичным образом.

Вычисления легко организовать, если заметим, что (взятие k = 0 в предыдущих формулах, делает вещи проще)

nanh2n=+a1h2+a0h0+a1h2+a2h4+=+a1h2+0h1+a0h0+0h1+a1h2+0h3+a2h4+

Если мы преобразуем (αn)последовательность в новую последовательность (α˜n)определяется как

      ..., α–1, 0, α0, 0, α1, 0, α2, 0, ... то есть именно

a˜2n=an,a˜2n+1=0

Тогда

nanh2n=na˜nhn

и продлением

nanhk2n=na˜nhkn

С тех пор

ak0=na˜nhkn+nδ˜ngkn

этапы реконструкции:

  1. Замените α и δ последовательности сверхдискретизированными версиями α ˜ и δ˜ вставка нулей.

  2. Фильтрация по h и g соответственно.

  3. Суммируйте полученные последовательности.

1-D вейвлет

Основные 1-D объекты

 

Объекты

Описание

Сигнал в исходном времени

s

Ak, 0 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Dk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Исходный сигнал

Приближение на уровне k

Детализация на уровне k

Коэффициенты во времени, связанном с масштабом

cAk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

cDk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

[cAj, cDj..., <reservedrangesplaceholder0> 1]

Приближения на уровне k

Коэффициенты детализации на уровне k

Вейвлет на уровне j, j ≥ 1

Возможности разложения и анализа

Цель

Вход

Выход

Файл

Одноуровневое разложение

s

<reservedrangesplaceholder1> 1, <reservedrangesplaceholder0> 1

dwt

Одноуровневое разложение

cAj

<reservedrangesplaceholder1> +1, <reservedrangesplaceholder0> +1

dwt

Разложение

s

[cAj, cDj..., <reservedrangesplaceholder0> 1]

wavedec

Возможности синтеза-реконструкции

Цель

Вход

Выход

Файл

Одноуровневая реконструкция

<reservedrangesplaceholder1> 1, <reservedrangesplaceholder0> 1

s или A 0

idwt

Одноуровневая реконструкция

<reservedrangesplaceholder1> +1, <reservedrangesplaceholder0> +1

cAj

idwt

Полная реконструкция

[cAj, cDj..., <reservedrangesplaceholder0> 1]

s или A 0

waverec

Выборочная реконструкция

[cAj, cDj..., <reservedrangesplaceholder0> 1]

Al, Dm

wrcoef

Утилиты структуры разложения

Цель

Вход

Выход

Файл

Экстракция коэффициентов детализации

[cAj, cDj..., <reservedrangesplaceholder0> 1]

cDk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

detcoef

Экстракция коэффициентов приближения

[cAj, cDj..., <reservedrangesplaceholder0> 1]

cAk, 0  <reservedrangesplaceholder1>  <reservedrangesplaceholder0>

appcoef

Перекомпозиция структуры разложения

[cAj, cDj..., <reservedrangesplaceholder0> 1]

[cAk, cDk..., <reservedrangesplaceholder2> 1] 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

upwlev

Чтобы проиллюстрировать режим командной строки для 1-D возможностей, смотрите 1-D Анализ с использованием командной строки..

2-D вейвлет

Основные 2-D объекты

 

Объекты

Описание

Изображение в исходном разрешении

s

Оригинальное изображение

<reservedrangesplaceholder0> 0

Приближение на уровне 0

Ak, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Приближение на уровне k

Dk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Детали на уровне k

Коэффициенты в масштабном разрешении

cAk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Приближения на уровне k

cDk, 1 ≤ <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

Коэффициенты детализации на уровне k

[cAj, cDj..., <reservedrangesplaceholder0> 1]

Вейвлет на уровне j

Dk означает [Dk(h),Dk(v),Dk(d)], горизонтальные, вертикальные и диагональные детали на уровне k.

То же самое относится и к cDk, которая обозначает [cDk(h),cDk(v),cDk(d)].

Файлы 2-D те же, что и для 1-D случая, но с 2 в конце команды.

Для примера, idwt становится idwt2. Для получения дополнительной информации смотрите 1-D Возможности вейвлета.

Чтобы проиллюстрировать режим командной строки для возможностей 2-D, смотрите Вейвлет Изображения Анализ и сжатие..

Ссылки

[1] Mallat, S. G. «A Theory for Multirresolution Signal Decomposition: The Wavelet Representation», IEEE Transactions on Pattern Analysis and Machine Intelligence. Том 11, выпуск 7, июль 1989 года, стр. 674-693.