0

У меня есть 9 изображений MRI и вы хотите сделать 3D-объем из этих изображений. Оттуда я хотел бы интерполировать между каждым фрагментом. Учитывая два фрагмента в томе, я хотел бы создать промежуточный кадр между ними, который интерполирует между двумя срезами. Целью является создание 18 томов МРТ, которые выполняют эту интерполяцию.Создание промежуточных срезов в объеме 3D-MRI с помощью MATLAB

Как бы это сделать в MATLAB?

+0

Что? Что вы подразумеваете под «интерполяцией» двух изображений? ... вы имеете в виду ** смешивание ** их вместе? – rayryeng

+0

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

+0

Да ... это было не очень очевидно в вашей первоначальной постановке проблемы. Обновите его более подробно. Являются ли эти МРТ-изображения сложены в 3D-объем? Если это так, вы можете просто использовать 'interp3'. – rayryeng

ответ

5

Предполагая, что ваши изображения МРТ находятся в трехмерном стеке, вы можете выполнить то, что хотите, используя interp3. Строки и столбцы среза остаются неизменными при выборе точек выборки, но временное или Z направление будет просто удвоено по размеру. Так что-то вроде этого, если предположить, что MRI ваш объем:

[rows,cols,slices] = size(MRI); 
[X,Y,Z] = meshgrid(1:cols, 1:rows, 1:slices); 
[X2,Y2,Z2] = meshgrid(1:cols, 1:rows, 0.5:0.5:slices); 
out = interp3(X, Y, Z, MRI, X2, Y2, Z2, 'linear', 0); 

выше сгенерирует объем, который имеет в два раза больше ломтиков, сохраняя строки и столбцы же и с помощью билинейной интерполяции. Дополнительный 0 гарантирует, что если мы создаем ценности, которые находятся за пределами исходных точек отбора проб, мы будем экстраполировать эти точки 0.

Если ваши изображения не 3D-объем, вы должны будете поместить это в трехмерная матрица. Если предположить, что они называются MRI1 до MRI9, вы можете сделать:

MRI = cat(3, MRI1, MRI2, MRI3, MRI4, MRI5, MRI6, MRI7, MRI8, MRI9); 

Вы можете использовать приведенный выше код. После того, как вы закончите, вы можете получить промежуточные срезы, выполнив:

final_slices = MRI(:,:,1:2:end); 

Вы можете получить доступ к каждому промежуточный срез с final_slices.


Как простой пример, видя эту работу, давайте предположим, что наш объем куча случайных чисел в объеме 3 х 3 х 3:

rng(123123); 
MRI = rand(3,3,3) 

MRI(:,:,1) = 

    0.3002 0.8302 0.1768 
    0.9946 0.7214 0.0678 
    0.2901 0.4627 0.5201 


MRI(:,:,2) = 

    0.2323 0.8516 0.7838 
    0.3251 0.5326 0.6377 
    0.7220 0.4735 0.0717 


MRI(:,:,3) = 

    0.3202 0.1259 0.3360 
    0.1004 0.9260 0.6287 
    0.6922 0.3191 0.9011 

Запуск выше код интерполяции, мы получаем :

out(:,:,1) = 

    0  0  0 
    0  0  0 
    0  0  0 


out(:,:,2) = 

    0.3002 0.8302 0.1768 
    0.9946 0.7214 0.0678 
    0.2901 0.4627 0.5201 


out(:,:,3) = 

    0.2662 0.8409 0.4803 
    0.6598 0.6270 0.3527 
    0.5060 0.4681 0.2959 


out(:,:,4) = 

    0.2323 0.8516 0.7838 
    0.3251 0.5326 0.6377 
    0.7220 0.4735 0.0717 


out(:,:,5) = 

    0.2763 0.4887 0.5599 
    0.2127 0.7293 0.6332 
    0.7071 0.3963 0.4864 


out(:,:,6) = 

    0.3202 0.1259 0.3360 
    0.1004 0.9260 0.6287 
    0.6922 0.3191 0.9011 

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

+0

спасибо Rayryeng, спасибо, я просто надеюсь, что это работает –

+0

@beautifuleyez - проблем нет. Дайте мне знать, если это произойдет, тогда вернитесь ко мне. Спасибо, что принял мой ответ кстати! – rayryeng

+0

Я хочу сделать 3D-реконструкцию опухоли головного мозга, до сих пор я нашел свои границы и собрал их вместе на трехмерной оси, я хочу создать 3D-объем целого с помощью алгоритма маршевых кубов. Можете ли вы направить меня на этот тоже –

Смежные вопросы