Этот пример показывает несколько методов визуализации объемных данных в MATLAB ®.
Изоповерхность является поверхностью, где все точки в объеме пространства имеют постоянное значение. Используйте isosurface
функция для генерации граней и вершин для внешней поверхности и isocaps
функция для генерации граней и вершин для конечных прописных букв объема. Используйте patch
команда для рисования объема и его торцевых прописных букв.
load mri D % load data D = squeeze(D); % remove singleton dimension limits = [NaN NaN NaN NaN NaN 10]; [x, y, z, D] = subvolume(D, limits); % extract a subset of the volume data [fo,vo] = isosurface(x,y,z,D,5); % isosurface for the outside of the volume [fe,ve,ce] = isocaps(x,y,z,D,5); % isocaps for the end caps of the volume figure p1 = patch('Faces', fo, 'Vertices', vo); % draw the outside of the volume p1.FaceColor = 'red'; p1.EdgeColor = 'none'; p2 = patch('Faces', fe, 'Vertices', ve, ... % draw the end caps of the volume 'FaceVertexCData', ce); p2.FaceColor = 'interp'; p2.EdgeColor = 'none'; view(-40,24) daspect([1 1 0.3]) % set the axes aspect ratio colormap(gray(100)) box on camlight(40,40) % create two lights camlight(-20,-10) lighting gouraud
The coneplot
команда строит графики векторов скорости как конусы в точках x, y, z в объеме. Конусы представляют величину и направление векторного поля в каждой точке.
cla % clear the current axes load wind u v w x y z % load data [m,n,p] = size(u); [Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p); % calculate the location of the cones h = coneplot(u,v,w,Cx,Cy,Cz,y,4); % draw the cone plot set(h,'EdgeColor', 'none') axis tight equal view(37,32) box on colormap(hsv) light
The streamline
Графики функций потоков для вектора скорости в точках x, y, z в объеме, чтобы проиллюстрировать поток векторного поля 3-D.
cla [m,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); % calculate the starting points of the streamlines streamline(u,v,w,Sx,Sy,Sz) % draw the streamlines axis tight equal view(37,32) box on
The streamtube
функция строит графики для вектора скорости в точках x, y, z в объеме. Ширина трубки пропорциональна нормированному расхождению векторного поля в каждой точке.
cla [m,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); % calculate the starting points of the streamlines h = streamtube(u,v,w,Sx,Sy,Sz); % draw the streamtubes and return an array of surfaces set(h, 'FaceColor', 'cyan') % use 'set' to change properties for an array of objects set(h, 'EdgeColor', 'none') axis tight equal view(37,32) box on light
Объедините объемную визуализацию в один график, чтобы получить более полное изображение скоростного поля в объеме.
cla spd = sqrt(u.*u + v.*v + w.*w); % wind speed at each point in the volume [fo,vo] = isosurface(x,y,z,spd,40); % isosurface for the outside of the volume [fe,ve,ce] = isocaps(x,y,z,spd,40); % isocaps for the end caps of the volume p1 = patch('Faces', fo, 'Vertices', vo); % draw the isosurface for the volume p1.FaceColor = 'red'; p1.EdgeColor = 'none'; p2 = patch('Faces', fe, 'Vertices', ve, ... % draw the end caps of the volume 'FaceVertexCData', ce); p2.FaceColor = 'interp'; p2.EdgeColor = 'none' ; [fc, vc] = isosurface(x, y, z, spd, 30); % isosurface for the cones [fc, vc] = reducepatch(fc, vc, 0.2); % reduce the number of faces and vertices h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3); % draw the coneplot h1.FaceColor = 'cyan'; h1.EdgeColor = 'none'; [sx, sy, sz] = meshgrid(80, 20:10:50, 0:5:15); % starting points for streamline h2 = streamline(x,y,z,u,v,w,sx,sy,sz); % draw the streamlines set(h2, 'Color', [.4 1 .4]) axis tight equal view(37,32) box on light