volshow
Mostrar volumen
Sintaxis
Descripción
Arreglo numérico
crea un objeto vol = volshow(V)Volume que muestra el volumen 3D en escala de grises, RGB o binario V. Puede girar y acercar y alejar la visualización de forma interactiva con el ratón. Utilice vol para consultar y modificar las propiedades del objeto Volume después de crearlo. Para obtener una lista de propiedades, consulte Volume Properties.
modifica la apariencia del volumen usando uno o más argumentos nombre-valor. Por ejemplo, vol = volshow(V,Name=Value)volshow(V,RenderingStyle="Isosurface") muestra el volumen 3D V y establece el estilo de renderizado como "Isosurface".
Volumen de imagen dividida en bloques
Desde R2023a
crea un objeto bVol = volshow(bim)BlockedVolume que muestra la imagen 3D dividida en bloques bim. Puede girar y acercar y alejar la visualización de forma interactiva con el ratón. Utilice bVol para consultar y modificar las propiedades del objeto BlockedVolume después de crearlo. Para obtener una lista de propiedades, consulte BlockedVolume Properties.
modifica la apariencia del volumen dividido en bloques usando uno o más argumentos nombre-valor. Por ejemplo, bVol = volshow(bim,Name=Value)ResolutionLevel="coarse" especifica el nivel de resolución que se desea mostrar como nivel de resolución más grueso.
Nota
Medical Imaging Toolbox™ extiende la funcionalidad de la función volshow (Image Processing Toolbox™) para mostrar un objeto medicalVolume (Medical Imaging Toolbox). en el sistema de coordenadas del paciente. Para obtener más información, consulte volshow (Medical Imaging Toolbox).
Ejemplos
Cargue los datos de una RM en el área de trabajo y elimine la dimensión única.
load mri
V = squeeze(D);Genere un mapa de colores y una asignación de transparencia (alfa) adecuada para las imágenes de RM.
intensity = [0 20 40 120 220 1024]; alpha = [0 0 0.15 0.3 0.38 0.5]; color = [0 0 0; 43 0 0; 103 37 20; 199 155 97; 216 213 201; 255 255 255]/255; queryPoints = linspace(min(intensity),max(intensity),256); alphamap = interp1(intensity,alpha,queryPoints)'; colormap = interp1(intensity,color,queryPoints);
Esta RM tiene un tamaño de vóxel no uniforme, o anisotrópico, de 1 por 1 por 2,5 mm. Especifique la matriz de transformación que escala la imagen a las dimensiones correctas de los vóxeles.
sx = 1; sy= 1; sz = 2.5; A = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1];
Cree un objeto affinetform3d que realice el escalado.
tform = affinetform3d(A);
Visualice el volumen con el mapa de colores, la asignación de transparencia y la transformación personalizados. Arrastre el ratón para rotar el volumen. Utilice la rueda de desplazamiento para acercar o alejar el volumen.
vol = volshow(V,Colormap=colormap,Alphamap=alphamap,Transformation=tform);

En este ejemplo se utiliza un subconjunto del conjunto de datos de Medical Segmentation Decathlon [1]. En el subconjunto de datos se incluyen dos volúmenes torácicos de TC y las correspondientes imágenes de etiqueta, almacenadas en el formato de archivo NIfTI.
Ejecute este código para descargar el archivo MedicalVolumNIfTIData.zip del sitio web de MathWorks® y, después, descomprímalo. El tamaño del archivo de datos es de aproximadamente 76 MB.
zipFile = matlab.internal.examples.downloadSupportFile("medical", ... "MedicalVolumeNIfTIData.zip"); filepath = fileparts(zipFile); unzip(zipFile,filepath)
La carpeta dataFolder contiene los datos descargados y descomprimidos.
dataFolder = fullfile(filepath,"MedicalVolumeNIfTIData");Especifique los nombres de archivo del volumen y la imagen de etiqueta utilizados en este ejemplo.
dataFile = fullfile(dataFolder,"lung_043.nii.gz"); labelDataFile = fullfile(dataFolder,"LabelData","lung_043.nii.gz");
Lea los datos de imagen y los metadatos del archivo de imagen.
V = niftiread(dataFile); info = niftiinfo(dataFile);
Defina una asignación de transparencia y un mapa de color para este volumen. Los valores utilizados en este ejemplo se determinaron utilizando el método de prueba y error manual.
alpha = [0 0 0.7 1.0]; color = [0 0 0; 200 140 75; 231 208 141; 255 255 255] ./ 255; intensity = [-3024 -700 -400 3071]; queryPoints = linspace(min(intensity),max(intensity),256); alphamap = interp1(intensity,alpha,queryPoints)'; colormap = interp1(intensity,color,queryPoints);
Esta RM tiene un tamaño de vóxel no uniforme o anisotrópico. Extraiga el espaciado entre vóxeles de los metadatos del archivo y defina la transformación para mostrar el volumen con las dimensiones correctas.
voxelSize = info.PixelDimensions; sx = voxelSize(2); sy= voxelSize(1); sz = voxelSize(3); A = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1];
Cree un objeto affinetform3d que realice el escalado.
tform = affinetform3d(A);
Visualice el volumen como un objeto 3D. Especifique el estilo de renderizado como "CinematicRendering". El estilo de renderizado cinemático muestra el volumen en función del color y la transparencia especificados para cada vóxel, con posprocesamiento iterativo que produce sombras e iluminación fotorrealistas.
viewer = viewer3d; vol = volshow(V,Parent=viewer, ... RenderingStyle="CinematicRendering", ... Colormap=colormap, ... Alphamap=alphamap, ... Transformation=tform);

Referencias
[1] Medical Segmentation Decathlon. "Lung." Tasks. Consultado el 10 de mayo de 2018. http://medicaldecathlon.com/. El conjunto de datos de Medical Segmentation Decathlon se proporciona de acuerdo a la licencia CC-BY-SA 4.0. Quedan excluidas todas las garantías y representaciones. Para obtener más detalles, consulte la licencia.
Cree un volumen RGB de burbujas rojas, verdes y azules utilizando la función de ayuda createRGBBubbles. La función de ayuda se adjunta a este ejemplo como archivo de apoyo.
RGB = createRGBBubbles;
Muestre el volumen RGB.
vol = volshow(RGB,RenderingStyle="GradientOpacity");Para mejorar la visibilidad del volumen, cambie el color de fondo de la ventana del visor.
viewer = vol.Parent; viewer.BackgroundColor = [0 0 0]; viewer.GradientColor = [0.2 0.2 0.2];
De forma predeterminada, volshow muestra la transparencia de cada vóxel asignando su luminosidad a la propiedad Alphamap. La luminosidad de un vóxel es similar a la salida de la función rgb2lightness para imágenes 2D.
De forma alternativa, puede especificar un canal alfa personalizado utilizando la propiedad AlphaData. Si tiene un volumen RGBA, extraiga el cuarto canal utilizando la indexación de arreglos y especifíquelo como valor AlphaData. Para este volumen, cree un canal alfa artificial del mismo tamaño que el volumen.
sz = 500; val = linspace(0,1,sz); [X,Y,Z] = meshgrid(val,val,val); alpha = X.*Y.* Z; vol.AlphaData = alpha;

Cargue un volumen en escala de grises en el área de trabajo y muestre el volumen mediante volshow.
load("spiralVol.mat")
h = volshow(spiralVol);
viewer = h.Parent;
hFig = viewer.Parent;
drawnowEspecifique el nombre del archivo GIF en el que desea guardar la animación.
filename = "animatedSpiral.gif";Apunte la cámara al centro del volumen.
sz = size(spiralVol); center = sz/2 + 0.5; viewer.CameraTarget = center;

Especifique el número de cuadros de la animación y, después, cree un arreglo de posiciones de la cámara en un círculo alrededor del centro del volumen.
numberOfFrames =
12;
vec = linspace(0,2*pi,numberOfFrames)';
dist = sqrt(sz(1)^2 + sz(2)^2 + sz(3)^2);
myPosition = center + ([cos(vec) sin(vec) ones(size(vec))]*dist);En cada posición de la cámara, actualice la visualización y escriba el cuadro en el archivo GIF. Puede reproducir el archivo en un visor de vídeo.
for idx = 1:length(vec) % Update the current view viewer.CameraPosition = myPosition(idx,:); % Capture the image using the getframe function I = getframe(hFig); [indI,cm] = rgb2ind(I.cdata,256); % Write the frame to the GIF file if idx==1 % Do nothing. The first frame displays only the viewer, not the % volume. elseif idx == 2 imwrite(indI,cm,filename,"gif",Loopcount=inf,DelayTime=0) else imwrite(indI,cm,filename,"gif",WriteMode="append",DelayTime=0) end end

En este ejemplo se crea un volumen de imagen grande de 500 por 500 por 2500. Si la máquina no tiene suficiente memoria para crear y almacenar el volumen de 2.5 GB, reduzca imSize antes de ejecutar este ejemplo.
imSize = [500,500,2500];
Cree una imagen 3D simulada de burbujas, V. Esto puede tardar algunos minutos.
V = rand(imSize,"single");
BW = false(size(V));
BW(V < 0.000001) = true;
V = bwdist(BW);
V(V <= 20) = 1;
V(V > 20) = 0;Si intenta mostrar V directamente, volshow devuelve un error de que el volumen es demasiado grande. En su lugar, cree un objeto blockedImage que apunte a V y que tenga un tamaño de bloque de 500 por 500 por 500 vóxeles.
bim = blockedImage(V,BlockSize=[500,500,500]);
Muestre blockedImage mediante volshow. La función volshow lee los bloques en la memoria de uno en uno y une los renderizados de los bloques individuales para producir el volumen final.
bVol = volshow(bim);

Argumentos de entrada
Volumen 3D en escala de grises, RGB o binario, especificado como una de estas opciones:
| Tipo de volumen | Descripción |
|---|---|
| Escala de grises | Debe especificarse como un arreglo numérico de m por n por p con dimensiones no individuales. |
| RGB | Debe especificarse como un arreglo numérico de m por n por p por 3 con dimensiones no individuales. Si sus datos son un volumen RGBA, puede especificar el canal de transparencia utilizando la propiedad AlphaData. |
| Binaria | Debe especificarse como un arreglo lógico de m por n por p con dimensiones no individuales. |
Si su volumen de imagen es grande y podría no caber en la memoria, o ya está en el formato de objeto blockedImage, especifique el argumento bim.
Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
Información de renderizado exportada por Volume Viewer, especificada como estructura.
Tipos de datos: struct
Volumen de imagen dividida en bloques, especificado como un objeto blockedImage que lee bloques 3D de datos en escala de grises, RGB o RGBA. La imagen dividida en bloques puede tener un único nivel de resolución o varios.
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.
Ejemplo: volshow(V,RenderingStyle="Isosurface") muestra el volumen 3D V y establece el estilo de renderizado como "Isosurface".
Nota
Las propiedades incluidas en esta lista son únicamente un subconjunto. Para obtener una lista de propiedades del volumen en memoria, consulte Volume Properties. Para obtener una lista completa de propiedades del volumen dividido en bloques, consulte BlockedVolume Properties.
Objeto principal del objeto Volume o BlockedVolume, especificado como un objeto Viewer. Puede crear un objeto Viewer usando la función viewer3d. Cuando llama a volshow sin especificar un objeto principal, la función crea un nuevo objeto Viewer y establece ese objeto como el principal. Un objeto Volume o BlockedVolume no puede volver a ser principal.
Estilo de renderizado, especificado como uno de los siguientes valores de la tabla.
| Valor | Descripción |
|---|---|
"VolumeRendering" | Visualiza el volumen en función del color y la transparencia especificados para cada vóxel. |
"CinematicRendering" | Visualiza el volumen en función del color y la transparencia especificados para cada vóxel, con un posprocesamiento iterativo que produce sombras e iluminación fotorrealistas. Este estilo de renderizado es útil para mostrar volúmenes opacos. |
"LightScattering" | Visualiza el volumen utilizando un modelo de dispersión volumétrica de la luz que simula la absorción, la dispersión interna y la dispersión externa de la luz a través del volumen. Este estilo de renderizado es útil para mostrar volúmenes translúcidos que no tienen grandes gradientes de intensidad, como el humo, la niebla y las nubes. |
"MaximumIntensityProjection" | Visualiza el vóxel con el mayor valor de intensidad para cada rayo proyectado a través de los datos. En los volúmenes RGB, visualiza el vóxel con la mayor luminancia en el espacio de color CIE 1976 L*a*b*. |
"MinimumIntensityProjection" | Visualiza el vóxel con el menor valor de intensidad para cada rayo proyectado a través de los datos. En los volúmenes RGB, visualiza el vóxel con la menor luminancia en el espacio de color CIE 1976 L*a*b*. |
"GradientOpacity" | Visualiza el volumen en función del color y la transparencia especificados con una transparencia adicional aplicada si el vóxel es similar en intensidad (en volúmenes en escala de grises) o luminancia (en volúmenes RGB) al vóxel anterior a lo largo del rayo de visualización. Cuando se renderiza un volumen con intensidad uniforme utilizando |
"Isosurface" | Visualiza una isosuperficie del volumen especificada por el valor de la propiedad |
"SlicePlanes" | Visualiza tres planos de corte ortogonales. |
Asignación de transparencia del volumen, especificada como uno de los valores de la tabla.
La propiedad DisplayRange determina cómo los valores de V se asignan a la transparencia. Los valores menores o iguales que el valor mínimo de DisplayRange se asignan al primer valor del rango de transparencia, y todos los valores mayores o iguales que el valor máximo de DisplayRange se asignan al último valor del rango de transparencia.
Cuando la propiedad AlphaData no está vacía, el valor de no tiene efecto.Alphamap
| Valor | Descripción |
|---|---|
| Los valores en Data se asignan linealmente a las transparencias en el intervalo [0, 1]. |
| Los valores en Data se asignan cuadráticamente a las transparencias en el intervalo [0, 1]. Esta opción aplica un cambio más rápido en la transparencia entre valores bajos y altos de Data en comparación con "linear". |
| Los valores en Data se asignan cúbicamente a las transparencias en el intervalo [0, 1]. Esta opción es el valor predeterminado, y aplica el cambio más rápido de transparencia entre valores bajos y altos de Data. |
| Vector columna de n elementos con valores en el intervalo [0, 1] | Los valores en Data se asignan linealmente a los valores de transparencia en Alphamap. |
Mapa de colores de datos de volumen en escala de grises, especificado como matriz numérica de n por 3 con valores en el intervalo [0, 1]. El número máximo de colores n es 256. Esta propiedad no tiene efecto cuando se visualizan volúmenes RGB.
Datos superpuestos que se desean combinar con los datos del objeto durante el renderizado, especificados como uno de los siguientes valores:
El visor muestra la superposición solo cuando el valor de la propiedad RenderingStyle es "SlicePlanes", "VolumeRendering" o "GradientOpacity". Puede modificar el aspecto de la superposición cambiando las propiedades OverlayRenderingStyle, OverlayColormap y OverlayAlphamap.
Estilo de renderizado de la superposición, especificado como uno de los siguientes valores de la tabla.
| Valor | Descripción |
|---|---|
"LabelOverlay" | Visualizar la superposición en función del color y la transparencia de cada región etiquetada. Utilice este estilo de renderizado para visualizar datos ordinales, como resultados de segmentación binaria o semántica, superpuestos a sus datos. |
"VolumeOverlay" | Visualizar la superposición en función del color y la transparencia especificados para cada vóxel. |
"GradientOverlay" | Visualizar la superposición en función del color y la transparencia para cada vóxel con una transparencia adicional aplicada en función de la diferencia entre el vóxel actual y el vóxel previo a lo largo del rayo de visualización. |
Argumentos de salida
Volumen, devuelto como objeto Volume. Para más información sobre la modificación de aspectos del volumen, consulte Volume Properties.
Volumen dividido en bloques, devuelto como objeto BlockedVolume. Para más información sobre la modificación de aspectos del volumen, consulte BlockedVolume Properties.
Más acerca de
Para recibir una notificación de un objetoVolume o BlockedVolume cuando se producen determinados eventos, configure receptores para estos eventos. Puede especificar una función de callback que se ejecute cuando se produzca uno de estos eventos. Cuando el objeto notifica a la aplicación a través del receptor, devuelve datos específicos del evento. Consulte la clase de evento del evento específico para ver qué es lo que ha devuelto.
| Nombre del evento | Activador | Datos del evento | Atributos del evento |
|---|---|---|---|
ClippingPlanesChanging | Un plano de recorte de un objeto se está moviendo de forma interactiva. Este evento no se ejecuta si el plano de recorte se mueve de forma programática. | images.ui.graphics.events.ClippingPlanesChangedEventData |
|
ClippingPlanesChanged | Un plano de recorte de un objeto deja de moverse de forma interactiva. Este evento no se ejecuta si el plano de recorte se mueve de forma programática. | images.ui.graphics.events.ClippingPlanesChangedEventData |
|
SlicePlanesChanging | Un plano de corte de un objeto se está moviendo de forma interactiva. Este evento no se ejecuta si el plano de corte se mueve de forma programática. | images.ui.graphics.events.SlicePlanesChangedEventData |
|
SlicePlanesChanged | Un plano de corte de un objeto deja de moverse de forma interactiva. Este evento no se ejecuta si el plano de corte se mueve de forma programática. | images.ui.graphics.events.SlicePlanesChangedEventData |
|
DataReadStarted | Un objeto BlockedVolume está enviando bloques de datos para que se rendericen en la escena. Este evento no se aplica a los objetos Volume. | event.EventData |
|
DataReadFinished | El objeto BlockedVolume ha terminado de enviar todos los bloques de datos visibles en la escena. Este evento no se aplica a los objetos Volume. | event.EventData |
|
Historial de versiones
Introducido en R2018bA partir de la versión R2025a, los objetos de salida Volume y BlockedVolume ahora incluyen estas propiedades:
Controle la transparencia de los volúmenes mostrados como isosuperficies utilizando la nueva propiedad
IsosurfaceAlpha.Controle el método de interpolación para el renderizado de volúmenes utilizando la nueva propiedad
Interpolation.Controle si el visor principal muestra información sobre el vóxel situado bajo el puntero utilizando la nueva propiedad
Pickable.
Para visualizar mejor la estructura interna de la mayoría de los volúmenes, el valor predeterminado de la propiedad Alphamap ha cambiado de "linear" a "cubic". Este cambio afecta al aspecto predeterminado de los volúmenes mostrados utilizando la función volshow. No es necesario actualizar el código. Para conservar el aspecto predeterminado de versiones anteriores, especifique el valor de la propiedad Alphamap como "linear".
Controle el rango de visualización utilizado para escalar el volumen mediante las nuevas propiedades
DisplayRangeyDisplayRangeMode.Controle el rango de visualización utilizado para escalar la superposición del volumen mediante las nuevas propiedades
OverlayDisplayRangeyOverlayDisplayRangeMode.Especifique una transparencia uniforme para todos los valores de etiqueta distintos de cero mientras oculta las etiquetas de fondo mediante la nueva propiedad
OverlayAlpha.Para facilitar la especificación de asignaciones de transparencia, se han agregado las nuevas opciones
"linear","quadratic"y"cubic"para las propiedadesAlphamapyOverlayAlphamap.
Para mejorar el soporte para los flujos de trabajo de etiquetado, el valor predeterminado de la propiedad
OverlayColormapha cambiado deturbo(256)a un mapa de colores personalizado que maximiza las diferencias entre colores adyacentes. Para aplicar el mismo mapa de colores que en versiones anteriores, especifique la propiedadColormapcomoturbo(256).Para aplicar una transparencia uniforme mientras se ocultan las etiquetas de fondo, se recomienda la nueva propiedad
OverlayAlphaen lugar de la propiedadOverlayThreshold. No está previsto eliminar la compatibilidad con las instancias existentes deOverlayThreshold.
El objeto Volume tiene nuevas propiedades, y opciones para las propiedades existentes, para controlar la reflectancia especular del volumen y mostrar un volumen utilizando el renderizado cinemático o la dispersión volumétrica de la luz. Para establecer cualquiera de estos valores de propiedad cuando se crea el objeto, especifíquelos en la función volshow como argumentos nombre-valor.
Controle la cantidad de luz reflejada por un volumen utilizando la nueva propiedad
SpecularReflectance. Aumente la reflectancia especular para que un volumen parezca más brillante.Especifique la propiedad
RenderingStylecomo"CinematicRendering"para mostrar un volumen fotorrealista usando el posprocesamiento iterativo. Especifique el número de iteraciones de posprocesamiento utilizando la nueva propiedadCinematicNumIterations.Especifique la propiedad
RenderingStylecomo"LightScattering"para mostrar el volumen con dispersión volumétrica de la luz, incluyendo la absorción, la dispersión interna y la dispersión externa de la luz. Especifique el equilibrio entre calidad y velocidad de renderizado utilizando la nueva propiedadLightScatteringQuality.
La función volshow admite ahora la visualización de volúmenes grandes de imágenes almacenadas como un objeto blockedImage. Cuando pasa un objeto blockedImage como entrada, volshow muestra el volumen y crea un objeto BlockedVolume. Las propiedades del objeto BlockedVolume controlan el aspecto y comportamiento del volumen de la imagen dividida en bloques dentro de una escena 3D. Para obtener una lista de estas propiedades, consulte BlockedVolume Properties.
La función volshow devuelve ahora un objeto Volume en lugar de un objeto volshow. El objeto Volume ofrece más estilos de renderizado y se integra con un objeto Viewer3D para ofrecer un control más sencillo de la visualización del volumen. El objeto Volume también admite gráficos web.
La función volshow acepta un conjunto diferente de argumentos nombre-valor en función de las propiedades del objeto Volume. Para obtener una lista de estas propiedades, consulte Volume Properties.
Cuando llama a volshow sin especificar un objeto principal, la función ahora crea un nuevo objeto Viewer3D y establece ese objeto como el principal. Antes, la función identificaba la figura actual mediante la función gcf y establecía esa figura como principal.
Si desea reproducir el comportamiento anterior, utilice la función images.compatibility.volshow.R2022a.volshow para crear un objeto volshow. Tenga en cuenta que la función images.compatibility.volshow.R2022a.volshow y el objeto volshow se eliminarán en una versión futura.
Consulte también
Volume Viewer | Volume Properties | BlockedVolume Properties | viewer3d | Surface | isosurface | slice | obliqueslice
Temas
- Display Volume Using Cinematic Rendering
- Display Interior Labels by Clipping Volume Planes
- Display Interior Labels by Adjusting Volume Overlay Properties
- Remove Objects from Volume Display Using 3-D Scissors
- Display Large 3-D Images Using Blocked Volume Visualization
- Display Translucent Volume with Advanced Light Scattering
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)