Visualización de datos volumétricos
Este ejemplo muestra varios métodos para visualizar datos volumétricos en MATLAB®.
Mostrar isosuperficie
Una isosuperficie es una superficie donde todos los puntos de un volumen de espacio tienen un valor constante. Utilice la función isosurface
para generar las caras y vértices para el exterior de la superficie, y la función isocaps
para generar las caras y vértices para las tapas terminales del volumen. Utilice el comando patch
para dibujar el volumen y sus tapas terminales.
load mri D D = squeeze(D); limits = [NaN NaN NaN NaN NaN 10]
limits = 1×6
NaN NaN NaN NaN NaN 10
[x, y, z, D] = subvolume(D, limits); [fo,vo] = isosurface(x,y,z,D,5); [fe,ve,ce] = isocaps(x,y,z,D,5); figure p1 = patch('Faces', fo, 'Vertices', vo); p1.FaceColor = 'red'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [23351x3 double] Vertices: [12406x3 double] Show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [23351x3 double] Vertices: [12406x3 double] Show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [27265x3 double] Vertices: [14250x3 double] Show all properties
p2.FaceColor = 'interp'; p2.EdgeColor = 'none'; view(-40,24) daspect([1 1 0.3]) colormap(gray(100)) box on camlight(40,40) camlight(-20,-10) lighting gouraud
Crear gráficas cónicas
El comando coneplot
representa los vectores de velocidad como conos en los puntos x, y, z de un volumen. Los conos representan la magnitud y la dirección del campo de vectores en cada punto.
cla load wind u v w x y z [m,n,p] = size(u)
m = 35
n = 41
p = 15
[Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p); h = coneplot(u,v,w,Cx,Cy,Cz,y,4); set(h,'EdgeColor', 'none') axis tight equal view(37,32) box on colormap(hsv) light
Representar líneas de recorrido
La función streamline
representa líneas de recorrido para un vector de velocidad en los puntos x, y, z de un volumen para ilustrar el flujo de un campo de vectores 3D.
cla [m,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); streamline(u,v,w,Sx,Sy,Sz) axis tight equal view(37,32) box on
Representar tubos de recorrido
La función streamtube
representa tubos de recorrido para un vector de velocidad en los puntos x, y, z de un volumen. El ancho del tubo es proporcional a la divergencia normalizada del campo de vectores en cada punto.
cla [~,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); h = streamtube(u,v,w,Sx,Sy,Sz); set(h, 'FaceColor', 'cyan') set(h, 'EdgeColor', 'none') axis tight equal view(37,32) box on light
Combinar visualizaciones de volúmenes
Combine la visualización de volúmenes en una única gráfica para obtener una perspectiva más completa de un campo de velocidad en un volumen.
cla spd = sqrt(u.*u + v.*v + w.*w); [fo,vo] = isosurface(x,y,z,spd,40); [fe,ve,ce] = isocaps(x,y,z,spd,40); p1 = patch('Faces', fo, 'Vertices', vo); p1.FaceColor = 'red'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [5340x3 double] Vertices: [2727x3 double] Show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [5340x3 double] Vertices: [2727x3 double] Show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Show all properties
p2.FaceColor = 'interp'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Show all properties
p2.EdgeColor = 'none'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Show all properties
[fc, vc] = isosurface(x, y, z, spd, 30); [fc, vc] = reducepatch(fc, vc, 0.2); h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3); h1.FaceColor = 'cyan'; h1.EdgeColor = 'none'; [sx, sy, sz] = meshgrid(80, 20:10:50, 0:5:15); h2 = streamline(x,y,z,u,v,w,sx,sy,sz); set(h2, 'Color', [.4 1 .4]) axis tight equal view(37,32) box on light