2016-06-25 20 views
0

Ich habe das folgende Problem in Matlab: Ich habe ein binäres 3D-Volumen (NxNxN) entsprechend einem 3D-ROI und ich möchte das Ellipsoid finden, das am besten zu diesem ROI passt. Ich habe die 3D-Koordinaten des Zentrums, die Längen der Halbachsen in 3D und die 3D-Winkel des passenden Ellipsoids gefunden. Der resultierende Vektor ist etwas wie: [195,1126 169,3114 62,4193 28,2725 23,0191 9,3104 52,9536 -5,7639 1,7606] wo die drei ersten Elemente die Mittelkoordinaten darstellen, die Elemente Nummer 4,5,6 die Halbachsenradien und die Elemente Nummer 7,8,9 darstellen stellen die Rotationen in Grad in x, y, z dar. Jetzt möchte ich ein binäres 3D-Volumen (wie eine 3D-Matrix: NxNxN, die gleiche Größe des ursprünglichen ROI) finden, wobei 0 außerhalb des Ellipsoids und 1 das Ellipsoid ist. Kann mir jemand helfen, dieses Problem zu lösen? Vielen Dank.Finden Sie 3D Ellipsoid Matlab

Antwort

0

Try this: Die Erklärungen sind in den Kommentaren

 V = [195.1126 169.3114 62.4193,28.2725 23.0191 9.3104,52.9536 -5.7639 1.7606]; 
c = V(1:3); % The centroid 
l = V(4:6); % Axis Length 
phi = -V(7:9); % Angles 
E = zeros(512,512,85); % initialize Elipse matrix 
R = rotx(phi(1))*roty(phi(2))*rotz(phi(3)); % Create rotation matrix around phi 
%% 
[X,Y,Z] = meshgrid(1:size(E,2),1:size(E,1),1:size(E,3)); % Create a Grid 
XYZr = ([X(:)-c(1),Y(:)-c(2),Z(:)-c(3)])*R; % rotate Grid and centralize around centroid 
%% Calculate the elipse equation 
inx = (((XYZr(:,1)))./l(1)); % 
iny = (((XYZr(:,2)))./l(2)); 
inz = (((XYZr(:,3)))./l(3)); 
ind = [inx,iny,inz]; 

E(:) = sum(ind.^2,2)<1; 
%% Display 
figure; imagesc(E(:,:,62)); 
figure; imagesc(squeeze(E(:,195,:))); 
figure; imagesc(squeeze(E(170,:,:))); 
+0

Hallo, auch ich das versucht habe, aber es funktioniert nicht ... Es gibt mir zu falschen Ergebnissen ... Das Ellipsoid ist völlig falsch, unzentriert und mit falschen Radien. Nur eine Erklärung: Ich initialisierte E als 512x512x85 Matrix, weil mein Volumen 512x512x85 ist. Wenn Sie damit versuchen, wird es nicht funktionieren. Hast du eine Idee, wie du das lösen kannst? – David

+0

Ich habe die Antwort bearbeitet – aarbelle

+0

danke. Es klappt – David