dualtree3

3-D двойной древовидный комплексный вейвлет преобразовывает

Синтаксис

[a,d] = dualtree3(x)
[a,d] = dualtree3(x,level)
[a,d] = dualtree3(___,Name,Value)
[a,d] = dualtree3(___,'excludeL1')

Описание

[a,d] = dualtree3(x) возвращает 3-D двойное древовидное комплексное преобразование вейвлета x в максимальном уровне, floor(log2(min(size(x)))).

[a,d] = dualtree3(x,level) возвращается 3-D двойной древовидный вейвлет преобразовывают вниз к level.

пример

[a,d] = dualtree3(___,Name,Value) задает аргументы пары "имя-значение" использования опций в дополнение к любому из входных параметров в предыдущих синтаксисах.

пример

[a,d] = dualtree3(___,'excludeL1') исключает вейвлет первого уровня (деталь) коэффициенты. Исключая вейвлет первого уровня коэффициенты могут ускорить алгоритм и сохраняют память. Первый уровень не показывает направленную селективность уровней 2 и выше. Совершенное свойство реконструкции двойного древовидного вейвлета преобразовывает, содержит, только если коэффициенты вейвлета первого уровня включены. Если вы не задаете эту опцию или добавляете 'includeL1', то функция включает коэффициенты первого уровня.

Примеры

свернуть все

Сгенерируйте объемный набор данных. Постройте несколько поперечных сечений данных, замеченных сверху. Данные не симметричны об оси X или оси Y.

xl = 64;

xx = linspace(-5,5,xl);

[x,y,z] = meshgrid(xx);

G = (x+3*y)./(1+exp((x.^2+2*y.^2+z.^2)-10));

for k = 1:16
    subplot(4,4,k)
    surf(xx,xx,G(:,:,4*k))
    view(2)
    shading interp
    title(['z = ' num2str(xx(4*k),2)])
end

Вычислите 3-D двойное древовидное преобразование данных вниз к уровню 4. Задайте Гильбертов Q-сдвиг парная фильтром длина 14.

[a,d] = dualtree3(G,4,'FilterLength',14);

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

m = 1;

for k = 1:8
    subplot(4,4,2*k-1)
    surf(real(d{m}(:,:,3*k)))

    view(2)
    shading interp
    axis tight
    title(['Re d\{1\}, n = ' int2str(3*k)])

    subplot(4,4,2*k)
    surf(imag(d{m}(:,:,3*k)))

    view(2)
    shading interp
    axis tight
    title(['Im d\{1\}, n = ' int2str(3*k)])
end

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

m = 2;

for k = 1:8
    subplot(4,4,2*k-1)
    surf(real(d{m}(:,:,3*k)))

    view(2)
    shading interp
    axis tight
    title(['Re d\{2\}, n = ' int2str(3*k)])

    subplot(4,4,2*k)
    surf(imag(d{m}(:,:,3*k)))

    view(2)
    shading interp
    axis tight
    title(['Im d\{2\}, n = ' int2str(3*k)])
end

Инвертируйте преобразование, задав ту же парную фильтром длину. Проверяйте на совершенную реконструкцию.

xrec = idualtree3(a,d,'FilterLength',14);
max(abs(xrec(:)-G(:)))
ans = 7.1054e-15

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

load wmri

[A,D] = dualtree3(X(:,:,1:26),2,'excludeL1');

Восстановите данные путем инвертирования преобразования. Установите масштабные коэффициенты итогового уровня явным образом на 0. Отобразите равномерно расположенный с интервалами выбор восстановленных изображений.

imrec = idualtree3(A*0,D);

colormap bone
for kj = 1:9
    subplot(3,3,kj)
    surf(imrec(:,:,3*kj-2))
    shading interp
    view(2)
    axis tight off
end

Входные параметры

свернуть все

Входные данные, заданные как действительный трехмерный массив. Все три измерения x должны быть даже и больше, чем или равный 4.

Типы данных: double | single

Преобразуйте уровень, заданный как положительное целое число, больше, чем или равный 2 и меньше чем или равный floor(log2(min(size(x)))).

Типы данных: double | single

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'LevelOneFilter','legall','FilterLength',6 вычисляет использование преобразования аналитические фильтры LeGall с масштабирующейся длиной 5 и длиной вейвлета 3 на уровне 1 и длине 6 фильтров Q-сдвига на уровнях 2 и больше.

Гильбертов Q-сдвиг парная фильтром длина, заданная как пара, разделенная запятой, состоящая из 'FilterLength' и один из 6, 10, 14, 16, или 18. dualtree3 использует ортогональную Гильбертову пару фильтра Q-сдвига длины 'FilterLength' для уровней 2 и больше.

Типы данных: double | single

Биоортогональный аналитический фильтр первого уровня, заданный как пара, разделенная запятой, состоящая из 'LevelOneFilter' и вектора символов или строки. По умолчанию dualtree3 использует для уровня 1 почти симметричный биоортогональный фильтр вейвлета с длинами 5 (масштабирующий фильтр) и 7 (фильтр вейвлета).

Типы данных: char | string

Выходные аргументы

свернуть все

Итоговый уровень, масштабирующийся (lowpass) коэффициенты, возвращенные как матрица с действительным знаком.

Типы данных: double

Коэффициенты вейвлета, возвращенные как 1 level массивом ячеек. Существует 28 поддиапазонов вейвлета в 3-D двойном древовидном преобразовании на каждом уровне.

Типы данных: double
Поддержка комплексного числа: Да

Ссылки

[1] Чен, H. и Н. Г. Кингсбери. “Эффективная Регистрация Нетвердых 3-D Тел”. IEEE® Transactions на Обработке изображений. Vol 21, январь 2012, стр 262–272.

[2] Кингсбери, N. G. “Комплексные Вейвлеты для Анализа Инварианта Сдвига и Фильтрации Сигналов”. Журнал Прикладного и Вычислительного Гармонического Анализа. Издание 10, май 2001, стр 234–253.

Введенный в R2017a