Предполагая, что ваши изображения МРТ находятся в трехмерном стеке, вы можете выполнить то, что хотите, используя 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
Как вы можете видеть, код, конечно же, создает промежуточные срезы правильно. Вы видите, что каждая четная позиция является одним из исходных изображений МРТ, в то время как нечетные позиции являются интерполированными результатами. Первый срез не означает ничего, поскольку мы пытаемся экстраполировать извне известного тома. Вероятно, вы захотите сосредоточиться на третьем куске и его нечетных позициях после этого момента до конца нового тома.
Что? Что вы подразумеваете под «интерполяцией» двух изображений? ... вы имеете в виду ** смешивание ** их вместе? – rayryeng
Мне нужно создать новое изображение, используя эти два, например, если у меня есть 9 изображений МРТ, моя цель - сделать его 18 путем интерполяции, третье изображение должно быть уложено между ними, третье изображение должно автоматически заполнить пробел между двумя –
Да ... это было не очень очевидно в вашей первоначальной постановке проблемы. Обновите его более подробно. Являются ли эти МРТ-изображения сложены в 3D-объем? Если это так, вы можете просто использовать 'interp3'. – rayryeng