Visualización de datos volumétricos
Este ejemplo muestra varios métodos para visualizar datos volumétricos en MATLAB®.
Mostrar una isosuperficie
Una isosuperficie es una superficie donde todos los puntos dentro 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 trazar 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.1294 0.1294 0.1294] LineStyle: '-' Faces: [23351×3 double] Vertices: [12406×3 double] Show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [23351×3 double] Vertices: [12406×3 double] Show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0.1294 0.1294 0.1294] FaceAlpha: 1 EdgeColor: [0.1294 0.1294 0.1294] LineStyle: '-' Faces: [27265×3 double] Vertices: [14250×3 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 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 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 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 dentro de 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.1294 0.1294 0.1294] LineStyle: '-' Faces: [5340×3 double] Vertices: [2727×3 double] Show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [5340×3 double] Vertices: [2727×3 double] Show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0.1294 0.1294 0.1294] FaceAlpha: 1 EdgeColor: [0.1294 0.1294 0.1294] LineStyle: '-' Faces: [464×3 double] Vertices: [301×3 double] Show all properties
p2.FaceColor = 'interp'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: [0.1294 0.1294 0.1294] LineStyle: '-' Faces: [464×3 double] Vertices: [301×3 double] Show all properties
p2.EdgeColor = 'none'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [464×3 double] Vertices: [301×3 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