exponenta event banner

Изучение фрагментов из набора данных МРТ 3-Dimensional

В этом примере показано, как исследовать объем данных, извлекая срезы через трехмерный набор данных МРТ с помощью imtransform и tformarray функции.

Шаг 1: Загрузка и просмотр горизонтальной МРТ

В этом примере используется набор данных МРТ, поставляемый с MATLAB ® и используемый в примерах справки для обоихmontage и immovie. Погрузка mri.mat добавляет в рабочую область две переменные: D (128 на 128 на 1 на 27, класс uint8) и палитра оттенков серого ,map (89 на 3, класс двойной).

D содержит 27 128 на 128 горизонтальных срезов из сканирования данных МРТ человеческого черепа. Значения в D диапазон от 0 до 88, поэтому карта цветов необходима для генерации фигуры с полезным визуальным диапазоном. Размерность D делает его совместимым с montage. Первые два измерения являются пространственными. Третий размер - это цветовой размер с размером 1, поскольку он индексируется на карту цветов. (size(D,3) будет 3 для последовательности изображений RGB.) Четвёртое измерение является временным (как и для любой последовательности изображения), но в данном конкретном случае оно также является пространственным. Итак, есть три пространственных измерения в D и мы можем использовать imtransform или tformarray преобразование горизонтальных срезов в сагиттальные срезы (показывающие вид со стороны головы) или корональные (фронтальные) срезы (показывающие вид спереди или сзади головы).

Пространственные размеры D упорядочены следующим образом:

  • Измерение 1: От передней до задней части головы (ростральная/передняя до хвостовой/задняя)

  • Размер 2: слева направо от головы

  • Размерность 4: Снизу вверх головы (уступает верхней).

Важным фактором является то, что интервалы выборки не одинаковы по трем размерам: образцы по вертикальному размеру (4) разнесены в 2,5 раза шире, чем по горизонтальным размерам.

Загрузите набор данных МРТ и просмотрите 27 горизонтальных срезов как монтаж.

load mri;
montage(D,map)
title('Horizontal Slices');

Figure contains an axes. The axes with title Horizontal Slices contains an object of type image.

Шаг 2: Извлечь сагиттальный срез из горизонтальных срезов с помощью IMTRANSFORM

Мы можем построить средне-сагиттальный срез из данных МРТ, взяв подмножество D и преобразование его для учета различных интервалов выборки и пространственной ориентации размеров D.

Следующая инструкция извлекает все данные, необходимые для мидсагиттального среза.

M1 = D(:,64,:,:); size(M1)
ans = 1×4

   128     1     1    27

Однако мы не можем просматривать M1 как изображение, потому что это - 128 на 1 на 1 на 27. reshape (или squeeze) может преобразовать M1 в изображение 128 на 27, которое можно просмотреть с помощью imshow.

M2 = reshape(M1,[128 27]); size(M2)
ans = 1×2

   128    27

figure, imshow(M2,map);
title('Sagittal - Raw Data');

Figure contains an axes. The axes with title Sagittal - Raw Data contains an object of type image.

Размеры в M2 упорядочены следующим образом:

  • Измерение 1: От передней до задней части головы (от ростральной до каудальной)

  • Размерность 2: Снизу вверх головы (уступает верхней).

Мы можем получить гораздо более удовлетворяющий взгляд путем преобразования M2 изменить его ориентацию и увеличить выборку вдоль вертикальной (низшей-высшей) размерности в 2,5 раза, сделав интервал выборки равным во всех трех пространственных размерностях. Мы могли бы сделать это поэтапно, начиная с транспонирования, но следующее аффинное преобразование обеспечивает одноступенчатое преобразование и более экономичное использование памяти.

T0 = maketform('affine',[0 -2.5; 1 0; 0 0]);

Верхний блок 2 на 2 матрицы перешёл в макетформу, [0 -2.5;1 0], сочетает вращение и масштабирование. После преобразования мы имеем:

  • Размер 1: Сверху вниз головы (выше нижней).

  • Измерение 2: От передней до задней части головы (от ростральной до каудальной)

Требование

imtransform (M2, T0, 'кубический')

будет достаточно для применения T кому M2 и обеспечивают хорошее разрешение при интерполяции вдоль направления сверху вниз. Однако нет необходимости в кубической интерполяции в направлении вперед-назад, так как повторная выборка не будет происходить вдоль (выходного) размера 2. Поэтому мы определяем повторную выборку ближайшего соседа в этом измерении, с большей эффективностью и идентичными результатами.

R2 = makeresampler({'cubic','nearest'},'fill');
M3 = imtransform(M2,T0,R2);  
figure, imshow(M3,map);
title('Sagittal - IMTRANSFORM')

Figure contains an axes. The axes with title Sagittal - IMTRANSFORM contains an object of type image.

Шаг 3: Извлечь сагиттальный срез из горизонтальных срезов с помощью TFORMARRAY

На этом этапе мы получаем тот же результат, что и на этапе 2, но используем tformarray переход от трех пространственных измерений к двум за одну операцию. Шаг 2 начинается с массива, имеющего три пространственных измерения, и заканчивается массивом, имеющим два пространственных измерения, но промежуточные двумерные изображения (M1 и M2) проложить путь для вызова imtransform который создает M3. Эти промежуточные изображения не нужны, если мы используем tformarray вместо imtransform. imtransform очень удобно для 2-D, чтобы 2-D преобразования, но tformarray поддерживает преобразования N-D в M-D, где M не обязательно равно N.

Через свои TDIMS_A аргумент, tformarray позволяет определить перестановку для входного массива. Поскольку мы хотим создать изображение с помощью:

  • Измерение 1: Выше нижнего (исходное измерение 4, обратное)

  • Измерение 2: Каудал в ростраль (исходное измерение 1)

и извлекаем только одну сагиттальную плоскость через исходную размерность 2, указываем tdims_a = [4 1 2]. Мы создаем tform через композицию, начинающуюся с аффинной трансформации 2-D T1 который масштабирует (новое) измерение 1 на коэффициент -2,5 и добавляет сдвиг 68,5, чтобы сохранить координаты массива положительными. Вторая часть композита представляет собой пользовательское преобразование T2 который извлекает 64-ю сагиттальную плоскость с помощью очень простого INVERSE_FCN.

T1 = maketform('affine',[-2.5 0; 0 1; 68.5 0]);  
inverseFcn = @(X,t) [X repmat(t.tdata,[size(X,1) 1])];
T2 = maketform('custom',3,2,[],inverseFcn,64);
Tc = maketform('composite',T1,T2);

Обратите внимание, что T2 и Tc принять 3-D вход к 2-D входу.

Мы используем тот же подход к повторной выборке, что и раньше, но включаем третье измерение.

R3 = makeresampler({'cubic','nearest','nearest'},'fill');

tformarray преобразует три пространственных измерения D на 2-D вывод за один шаг. Наше выходное изображение - 66 на 128, при этом исходные 27 плоскостей расширяются до 66 в вертикальном (низшем-верхнем) направлении.

M4 = tformarray(D,Tc,R3,[4 1 2],[1 2],[66 128],[],0);

Результат идентичен предыдущему выходу imtransform.

figure, imshow(M4,map);
title('Sagittal - TFORMARRAY');

Figure contains an axes. The axes with title Sagittal - TFORMARRAY contains an object of type image.

Шаг 4: Создание и отображение сагиттальных фрагментов

Мы создаем массив 4-D (третий размер - это цветовой размер), который можно использовать для создания последовательности изображений, которая идет слева направо, начинает 30 плоскостей в, пропускает каждую другую плоскость и имеет в общей сложности 35 кадров. Преобразованный массив имеет:

  • Измерение 1: Сверху вниз (выше нижнего)

  • Измерение 2: Спереди назад (ростраль в каудальный)

  • Размер 4: слева направо.

Как и на предыдущем шаге, мы переставляем входной массив с помощью TDIMS_A = [4 1 2], снова разворот и масштабирование/повторная выборка вертикального размера. Наша аффинная трансформация та же, что и T1 выше, за исключением того, что мы добавляем третье измерение с (3,3) элементом 0,5 и (4,3) элементом -14, выбранным для отображения 30, 32,... 98 на 1, 2,..., 35. Это центрирует наши 35 кадров на среднем сагиттальном срезе.

T3 = maketform('affine',[-2.5 0 0; 0 1 0; 0 0 0.5; 68.5 0 -14]);

В нашем призыве к tformarray, TSIZE_B = [66 128 35] теперь включает 35 кадров в 4-м измерении слева направо (которое является третьим измерением преобразования). Ресамплер остается прежним.

S = tformarray(D,T3,R3,[4 1 2],[1 2 4],[66 128 35],[],0);

Просмотрите сагиттальные фрагменты как монтаж (слегка дополняя массив для разделения элементов монтажа).

S2 = padarray(S,[6 0 0 0],0,'both');
figure, montage(S2,map)
title('Sagittal Slices');

Figure contains an axes. The axes with title Sagittal Slices contains an object of type image.

Шаг 5: Создание и отображение корональных фрагментов

Построение корональных срезов почти то же самое, что и построение сагиттальных срезов. Мы меняемся TDIMS_A от [4 1 2] кому [4 2 1]. Мы создаем серию из 45 кадров, начиная с 8 плоскостей и двигаясь сзади вперед, пропуская каждый другой кадр. Размеры выходного массива упорядочиваются следующим образом:

  • Измерение 1: Сверху вниз (выше нижнего)

  • Размер 2: слева направо

  • Измерение 4: Назад вперед (хвостовой до рострального).

T4 = maketform('affine',[-2.5 0 0; 0 1 0; 0 0 -0.5; 68.5 0 61]);

В нашем призыве к tformarray, TSIZE_B = [66 128 48] указывает вертикальные, поперечные и поперечные размеры соответственно. Ресамплер остается прежним.

C = tformarray(D,T4,R3,[4 2 1],[1 2 4],[66 128 45],[],0);

Обратите внимание, что все перестановки и откаты массива в шагах 3, 4 и 5 были обработаны как часть tformarray операция.

Просмотрите корональные фрагменты как монтаж (слегка заполняя массив для разделения элементов монтажа).

C2 = padarray(C,[6 0 0 0],0,'both');
figure, montage(C2,map)
title('Coronal Slices');

Figure contains an axes. The axes with title Coronal Slices contains an object of type image.