|
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"
И.М.Журавель "Краткий курс теории обработки изображений"
\ \
Извлечение данных из трехмерных магниторезонансных изображений
Функции imtransform и tformarray могут быть использованы при интерполяции и других преобразованиях трехмерных магниторезонансных изображений, особенно при получении числовых характеристик.
Ключевые термины |
Аффинные, традиционные и комплексные преобразования, трехмерные и двухмерные преобразования, исходный массив преобразований, дискретизация выбранных размерностей |
Ключевые функции |
maketform, makeresampler, imtransform, tformarray |
Просмотр демонстрационного примера.
Демонстрация включает следующие шаги:
- Шаг 1: Считывание и просмотр магниторезонансных изображений (горизонтальные срезы).
- Шаг 2: Получение сагиттальных данных на основе горизонтальных срезов с использованием функции imtransform.
- Шаг 3: Получение сагиттальных данных на основе горизонтальных срезов с использованием функции tformarray.
- Шаг 4: Получение сагиттальных данных и отображение их в виде последовательности.
- Шаг 5: Получение корональных данных и отображение их в виде последовательности.
Шаг 1: Считывание и просмотр магниторезонансных изображений (горизонтальные срезы).
В этом примере используются магниторезонансные данные, которые представлены в MATLAB и используются при описании функций montage и immovie. Считывание магниторезонансных изображений добавляет две переменные в рабочее пространство: D (128x128x1x27, в формате uint8) и полутоновую палитру map (89x3, в формате double).
Переменная D включает 27 горизонтальных срезов магниторезонансных данных сканирования человеческого черепа с размерностью 128x128. Значения элементов D находятся в диапазоне от 0 до 88. Таким образом, палитра обеспечивает генерацию изображения в диапазоне, пригодном для визуального анализа. Размерность данных в D должна быть согласована с функцией immovie. Первых две размерности являются пространственными. Третья размерность представляет собой размерность цвета. Числа третьей размерности указывают на индексы в палитре, например, size(D, 3) и используются для описания RGB-составляющих цвета. Четвертая размерность является временной и только в очень редких случаях используется в качестве пространственной координаты. Приведенные выше пространственные размерности в D используются в функциях imtransform или tformarray для преобразования слайдов горизонтальных срезов в сагиттальные данные. Пространственные размерности D размещены в такой последовательности:
- Размерность 1: От передней до задней части головы (ростральная (rostral) и каудальная (caudal) части)
- Размерность 2: С левой части головы на правую
- Размерность 4: От верхней части головы к нижней (inferior и superior).
Данные, которые представляют собой набор из 27 горизонтальных срезов, подвергаются последующей обработке. Для предотвращения непредсказуемых ситуаций при обработке данных, в примере используется функция iptgetpref.
truesizewarning=iptgetpref('TruesizeWarning');
iptsetpref('TruesizeWarning', 'off');
load mri;
figure;
immovie(D, map);
montage(D, map);
title('Horizontal Slices');
Шаг 2: Получение сагиттальных данных на основе горизонтальных срезов с использованием функции imtransform.
Существует возможность создания среднесагиттальных срезов, полученных на основе магниторезонансных данных, взятых из D и преобразованных с учетом анализа разных интервалов среза и пространственной ориентации.
Согласно сказанному выше, получение среднесагиттальных срезов проводят следующим образом.
M1=D(:, 64, :, :); size(M1)
Также существует возможность просмотра M1 как изображения с размерностью 128x1x1x27. С использованием функции reshape данные M1 можно преобразовать в изображение с размерностью 128x27, с дальнейшим просмотром с помощью imshow.
M2=reshape(M1, [128 27]); size(M2)
figure, imshow(M2, map);
title('Sagittal - Raw Data');
Размерности в M2 следующие:
- Размерность 1: От передней до задней части головы (ростральная (rostral) и каудальная (caudal) части)
- Размерность 2: От верхней части головы к нижней (inferior и superior).
Качество визуального просмотра можно улучшить, изменив пространственное расположение (ориентацию) изображения и изменив масштаб вдоль одной из осей с коэффициентом 2.5. Для улучшения визуального просмотра также используются аффинные преобразования.
T0=maketform('affine', [0 -2.5; 1 0; 0 0]);
Параметр, который применяется при реализации функции maketform и представляет собой блок 2x2
[ 0 -2.5
1 0 ]
характеризует описанные выше преобразования поворота и масштабирования. После преобразований получим:
- Размерность 1: От верхней части головы к нижней (inferior и superior).
- Размерность 2: От передней до задней части головы (ростральная (rostral) и каудальная (caudal) части)
Выражение
imtransform(M2, T0, 'cubic')
применяется для преобразования данных из T в M2 и обеспечения приемлемой разрешительной способности при интерполяции вдоль направления сверху вниз. Однако, при такого рода преобразованиях отпадает необходимость в проведении кубической интерполяции в направлении от передней части головы к задней. Поэтому окрестности в этом направлении определяются с большей степенью эффективности.
R2=makeresampler({'cubic', 'nearest'}, 'fill');
M3=imtransform(M2, T0, R2);
figure, imshow(M3, map);
title('Sagittal - IMTRANSFORM')
Шаг 3: Получение сагиттальных данных на основе горизонтальных срезов с использованием функции tformarray.
В этом пункте мы получим результаты аналогичные результатам, полученным в пункте 2. Только теперь для преобразования трехмерных данных в двухмерные, а также для других операций будем использовать функцию tformarray. В шаге 2 начальные данные представляют собой трехмерный массив, а результат обработки представлен в виде двумерного массива. При преобразованиях используется функция imtransform, которая создает массив М3, а также промежуточные двумерные массивы M1 и M2.
При использовании аргумента типа TDIMS_A в функции tformarray существует возможность проведения определенных преобразований для исходного массива. В результате этих преобразований получится изображение с такими размерностями:
- Размерность 1: Сверху вниз (исходная размерность)
- Размерность 2: От передней до задней части головы (ростральная (rostral) и каудальная (caudal) части, исходная размерность)
Таким образом, получим примерный сагиттальный вид с исходной размерностью 2 при параметре tdims_a=[4 1 2]. Параметр tform можно получить, проводя двухмерные аффинные преобразования, которые заключаются в масштабировании размерности 1 с коэффициентом 2.5 и прибавлении к массиву значения 68.5. Вторая часть преобразований, которые заключаются в получении 64-го сагиттального плана, описывается функцией INVERSE_FCN:
Инверсная функция: ipex003.m |
function U=ipex003( X, t ) U=[X repmat(t.tdata, [size(X, 1) 1])]; |
Определение коэффициентов T2 и Tc.
T1=maketform('affine', [-2.5 0; 0 1; 68.5 0]);
T2=maketform('custom', 3, 2, [], @ipex003, 64);
Tc=maketform('composite', T1, T2);
Проведем некоторые преобразования для определения третьей размерности.
R3=makeresampler({'cubic', 'nearest', 'nearest'}, 'fill');
Функция tformarray преобразовывает третью пространственную размерность и массив D трансформируется в двумерные данные. Таким образом, исходное изображение с размерами 66x128 с 27 видов растягивается до 66 в вертикальном направлении.
M4=tformarray(D, Tc, R3, [4 1 2], [1 2], [66 128], [], 0);
Полученный результат идентичен результату, полученному при обработке функцией imtransform.
figure, imshow(M4, map);
title('Sagittal - TFORMARRAY');
Шаг 4: Получение сагиттальных данных и отображение их в виде последовательности.
Создадим четырехмерный массив (трехмерные данные и размерность цветности), который используется для генерации движений слева направо с использованием более 30 снимков. Массив преобразований имеет такую структуру:
- Размерность 1: Сверху вниз.
- Размерность 2: От передней до задней части головы (ростральная (rostral) и каудальная (caudal) части)
- Размерность 4: Слева направо.
В качестве первого шага проведем следующие преобразования - трансформируем исходный массив с использованием параметра TDIMS_A=[4 1 2]. Преобразования будут заключаться в перестановке и масштабировании элементов массива в вертикальной размерности.
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 четырехразмерных слайдов.
S=tformarray(D, T3, R3, [4 1 2], [1 2 4], [66 128 35], [], 0);
Для просмотра движения сагиттальных слайдов они соответствующим образом монтируются.
figure;
immovie(S, map);
S2=padarray(S, [6 0 0 0], 0, 'both');
montage(S2, map);
title('Sagittal Slices');
Шаг 5: Получение корональных данных и отображение их в виде последовательности.
Создание корональных слайдов почти аналогично созданию сагиттальных. Для этого изменим параметр TDIMS_A из [4 1 2] на [4 2 1]. Создадим серию из 45 слайдов и смонтируем из них движения. Размерности результирующего массива:
- Размерность 1: Сверху вниз.
- Размерность 2: Слева направо.
- Размерность 4: От задней до передней части головы (ростральная (rostral) и каудальная (caudal) части)
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);
Для просмотра движения кадры соответствующим образом монтируются.
figure;
immovie(C, map);
C2=padarray(C, [6 0 0 0], 0, 'both');
montage(C2, map);
title('Coronal Slices');
Отметим, что большинство операций преобразования описанных выше массивов возможно корректировать в ручном режиме.
iptsetpref('TruesizeWarning', truesizewarning);
\ \
|
|