У меня есть объем (изображение) и минимальная ограничивающая рамка, которая обертывает определенную структуру. Я использовал следующий алгоритм для извлечения минимального ограничивающего прямоугольникаизвлечение минимальной ограничивающей рамки
http://uk.mathworks.com/matlabcentral/fileexchange/18264-minimal-bounding-box/content/minboundbox.m
Так что я получаю ограничивающий прямоугольник, который выглядит как этого
Теперь я хочу, чтобы создать новый том из MBB. Другими словами, я хочу сопоставить каждую точку в MBB с новым полем, которое является ось-параллельным.
я могу получить размеры новой коробки из угловых точек
dim = [0 0 0];
x = cp(:,1);
y = cp(:,2);
z = cp(:,3);
dim(3) = sqrt((x(1)-x(2))^2 + (y(1)-y(2))^2 + (z(1)-z(2))^2);
dim(1) = sqrt((x(1)-x(4))^2 + (y(1)-y(4))^2 + (z(1)-z(4))^2);
dim(2) = sqrt((x(1)-x(5))^2 + (y(1)-y(5))^2 + (z(1)-z(5))^2);
Теперь я могу применить матрицу вращения, возвращаемый алгоритмом minboundbox,
A = zeros(4,4); A(1:3, 1:3) = R; A(4,4) = 1;
tform = affine3d(A);
N = numel(img);
[X,Y,Z] = ind2sub(size(img), 1:N);
V = img(1:N);
[Xt, Yt, Zt] = transformPointsForward (tform,X,Y,Z);
Xt = reshape(Xt, size(img));
Yt = reshape(Yt, size(img));
Zt = reshape(Zt, size(img));
И теперь я застрял. Мне нужно:
интерполировать значения, связанные с этими координатами в регулярной сетке (любой метод я попытался вышел из памяти, изображение имеет следующий размер = (300,400,500));
экстракт только в регионе MBB.
любая идея, как я могу это сделать?
UPDATE главная проблема заключалась не в том, чтобы получить Xt, Yt, Zt ...
проблему, так как Xt, Yt и Zt виде нерегулярной сетки точек, с связаны определенные значения, как может Я получаю регулярную сетку с интерполированной точкой? Я попытался это, но он вышел из памяти
Vq = griddata(Xt, Yt, Zt, double(V), 1:dim(1), 1:dim(2), 1:dim(3));
Сколько у вас очков? Вы пытались просто измерить, сколько памяти вам действительно нужно для выполнения этой команды, и посмотреть, поддерживает ли ваша система в первую очередь? –
31000000 баллов ... дайте .... , но все-таки все они должны совмещаться в памяти вместе? Я думаю, и я надеюсь, что он интерполируется только локально, а не глобально. – user1384636
AFAIK, нет функции, которая будет интерполировать локально, не выполняя цикл вручную через вспомогательные области и выполняя интерполяцию. Да, они должны вписываться в память + файл страницы; Вы пытались очистить свои старые (X, Y, Z) данные после преобразования? Это может спасти вам память. –