volshow
Mostrar volumen
Sintaxis
Descripción
Arreglo numérico
crea un objeto vol
= volshow(V
)Volume
que muestra el volumen 3D 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
Visualizar un volumen de datos de RM
Cargue los datos de una RM en el área de trabajo y elimine la dimensión singular.
load mri
V = squeeze(D);
Genere un mapa de colores y un mapa de transparencia (alfa) adecuado 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, el mapa 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);
Visualizar volúmenes fotorrealistas usando renderizado cinemático
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 un mapa 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);
Pause para aplicar todas las iteraciones de posprocesamiento antes de actualizar la visualización en Live Editor.
pause(3) drawnow
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.
Crear una animación de volumen giratorio
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;
drawnow
Especifique 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
Visualizar un volumen de imagen dividida en bloques
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
V
— Volumen 3D
Arreglo numérico
Volumen 3D, especificado como arreglo numérico.
Tipos de datos: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
| char
config
— Información de renderizado
Estructura
Información de renderizado exportada por Volume Viewer, especificada como estructura.
Tipos de datos: struct
bim
— Volumen de imagen dividida en bloques
objeto blockedImage
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.
Parent
— Objeto principal
objeto Viewer3D
Objeto principal del objeto Volume
o BlockedVolume
, especificado como un objeto Viewer3D
. Puede crear un objeto Viewer3D
usando la función viewer3d
. Cuando llama a volshow
sin especificar un objeto principal, la función crea un nuevo objeto Viewer3D
y establece ese objeto como el principal. Un objeto Volume
o BlockedVolume
no puede volver a ser principal.
RenderingStyle
— Estilo de renderizado
"VolumeRendering"
(predeterminado) | "CinematicRendering"
| "LightScattering"
| "MaximumIntensityProjection"
| "MinimumIntensityProjection"
| "GradientOpacity"
| "Isosurface"
| "SlicePlanes"
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. |
Alphamap
— Mapa de transparencia para contenido de volumen
linspace(0,1,256)'
(predeterminado) | Vector columna de n elementos
Mapa de transparencia para contenido de volumen, especificado como vector columna de n elementos con valores en el intervalo [0, 1]. La longitud máxima del vector es 256. Cuando se visualizan volúmenes RGB, el objeto utiliza la luminancia del vóxel en el espacio de color CIE 1976 L*a*b* para asignar una transparencia desde el mapa de transparencia. Cuando la propiedad AlphaData
no está vacía, la propiedad Alphamap
no tiene efecto.
Colormap
— Mapa de colores
gray(256)
(predeterminado) | Matriz numérica de n por 3
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.
OverlayData
— Datos superpuestos
[]
(predeterminado) | Arreglo numérico | objeto blockedImage
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
.
OverlayRenderingStyle
— Estilo de renderizado de la superposición
"LabelOverlay"
(predeterminado) | "VolumeOverlay"
| "GradientOverlay"
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
vol
— Volumen
objeto Volume
Volumen, devuelto como objeto Volume
. Para más información sobre la modificación de aspectos del volumen, consulte Volume Properties.
bVol
— Volumen dividido en bloques
objeto BlockedVolume
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
Eventos
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.graphics3d.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.graphics3d.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.graphics3d.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.graphics3d.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 R2018bR2023b: Renderizado cinemático, dispersión volumétrica de la luz y reflectancia especular
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
RenderingStyle
como"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
RenderingStyle
como"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
.
R2023a: Mostrar imágenes divididas en bloques
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.
R2022b: Objeto Volume
de salida
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)