Шаг 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');