Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Краткий курс теории обработки изображений.doc
Скачиваний:
34
Добавлен:
01.07.2025
Размер:
8 Мб
Скачать
☆

Шаг 4: Реализация методов с параметрами 'circular' и 'symmetric'.

Оставшиеся две опции определяют два подхода. Один из них использует опцию 'circular' и состоит в повторяемости исходного изображения вдоль каждой размерности, второй - использует опцию 'symmetric' и состоит в повторяемости зеркальных отражений исходного изображения. Продемонстрируем это на конкретных примерах.

Thalf=maketform('affine', [1 0; a 1; 0 0]/2);

Bc=imtransform(A, Thalf,makeresampler({'cubic', 'nearest'}, ...

'circular'), 'XData', [-49 500], 'YData', ...

[-49 400], 'FillValues', orange);

figure, imshow(Bc);

title('Pad Method=''circular''');

Bs=imtransform(A, Thalf, makeresampler({'cubic', 'nearest'}, ...

'symmetric'), 'XData', [-49 500], 'YData', ...

[-49 400], 'FillValues', orange);

figure, imshow(Bs);

title('Pad Method=''symmetric''');

Извлечение данных из трехмерных магниторезонансных изображений

Функции 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);

Поиск длины маятника в движении

Проведем захват серии изображений с помощью пакета Image Acquisition Toolbox и затем проанализируем их с помощью Image Processing Toolbox. Рассмотрим это на примере задачи по вычислению длины маятника в движении. Содержание

  • Шаг 1: Захват изображений.

  • Шаг 2: Выбор области колебания маятника.

  • Шаг 3: Сегментация маятника в каждом фрейме.

  • Шаг 4: Поиск центра сегментированного маятника в каждом фрейме.

  • Шаг 5: Вычисление радиуса колебания маятника.

Шаг 1: Захват изображений.

Считываем кадры изображений маятника в движении. Кадры изображений, после их захвата с помощью