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.

volshow

    Descripción

    Arreglo numérico

    vol = volshow(V) crea un objeto 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.

    ejemplo

    vol = volshow(V,config) muestra el volumen 3D V utilizando los valores de las propiedades del objeto Volume especificados por la estructura config.

    vol = volshow(V,Name=Value) modifica la apariencia del volumen usando uno o más argumentos nombre-valor. Por ejemplo, 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

    bVol = volshow(bim) crea un objeto 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.

    ejemplo

    bVol = volshow(bim,Name=Value) modifica la apariencia del volumen dividido en bloques usando uno o más argumentos nombre-valor. Por ejemplo, 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

    contraer todo

    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);

    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);

    Figure contains an object of type images.ui.graphics3d.viewer3d.

    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.

    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

    animatedSpiral.gif

    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

    contraer todo

    Volumen 3D, especificado como arreglo numérico.

    Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical | char

    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 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.

    Estilo de renderizado, especificado como uno de los siguientes valores de la tabla.

    ValorDescripció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 "GradientOpacity", la parte interna del volumen se muestra más transparente que con el estilo de renderizado "VolumeRendering", lo que permite una mejor visualización de los gradientes de intensidad o luminancia en el volumen.

    "Isosurface"

    Visualiza una isosuperficie del volumen especificada por el valor de la propiedad IsosurfaceValue.

    "SlicePlanes"

    Visualiza tres planos de corte ortogonales.

    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.

    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:

    • Al mostrar un arreglo volumétrico en memoria, V, especifique OverlayData como un arreglo numérico.

    • Al mostrar un volumen de imagen dividida en bloques, bim, especifique OverlayData como un objeto blockedImage que lee bloques de datos 3D en escala de grises.

    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.

    ValorDescripció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

    contraer todo

    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

    contraer todo

    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 eventoActivadorDatos del eventoAtributos 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

    NotifyAccess: private

    ListenAccess: public

    ClippingPlanesChangedUn 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

    NotifyAccess: private

    ListenAccess: public

    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

    NotifyAccess: private

    ListenAccess: public

    SlicePlanesChangedUn 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

    NotifyAccess: private

    ListenAccess: public

    DataReadStartedUn 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

    NotifyAccess: private

    ListenAccess: public

    DataReadFinishedEl 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

    NotifyAccess: private

    ListenAccess: public

    Historial de versiones

    Introducido en R2018b

    expandir todo