Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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

Figure contains an axes object. The axes object contains 2 objects of type patch.

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

Figure contains an axes object. The axes object contains an object of type patch.

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

Figure contains an axes object. The axes object contains 21 objects of type line.

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

Figure contains an axes object. The axes object contains 13 objects of type surface.

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

Figure contains an axes object. The axes object contains 19 objects of type patch, line.