Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.
En este ejemplo se muestra cómo establecer y comprobar la información de referencia espacial de un objeto.bigimage
bigimage
funciona con imágenes multiresolución, en las que los datos de imagen de una escena se almacenan como un conjunto de imágenes en diferentes niveles de resolución. supone que las extensiones espaciales de cada nivel son las mismas, es decir, que todos los niveles cubren la misma área física en el mundo real.bigimage
bigimage
El primer paso para trabajar con una imagen multiresolución grande es validar esta suposición.
Este ejemplo utiliza una imagen del conjunto de datos Camelyon16. Este conjunto de datos contiene 400 imágenes de diapositivas enteras (WSI) de ganglios linfáticos, almacenadas como multiresolución. TIF que son demasiado grandes para cargarse en la memoria.
Cree un directorio para almacenar la imagen Camelyon16.
imageDir = fullfile(tempdir,'Camelyon16'); if ~exist(imageDir,'dir') mkdir(imageDir); end
Para descargar la imagen, vaya al sitio web y haga clic en el primer enlace "CAMELYON16 data set".Camelyon17 Abra el directorio "training" y luego "tumor". Descargue el archivo "tumor_091.tif" y mueva el archivo al directorio especificado por la variable.imageDir
Cree una con la información de referencia espacial predeterminada.bigimage
De forma predeterminada, establece la referencia espacial de cada nivel para que tenga las mismas extensiones mundiales que la capa más fina.bigimage
La capa más fina es la capa que tiene la resolución más alta y la mayoría de los píxeles.
bim = bigimage([imageDir '/tumor_091.tif']);
Muestre la información de referencia espacial en el nivel más fino. El tamaño de la imagen (especificado por la propiedad) coincide con las extensiones de las coordenadas mundiales.ImageSize
Observe que el sistema de coordenadas de imagen predeterminado coloca el centro del primer píxel en (1,1). Dado que las extensiones de píxeles tienen 1 unidad de ancho en cada dimensión, el borde izquierdo del primer píxel comienza en (0,5,0.5).
finestLevel = bim.FinestResolutionLevel; finestLevelInfo = bim.SpatialReferencing(finestLevel)
finestLevelInfo = imref2d with properties: XWorldLimits: [0.5000 6.1441e+04] YWorldLimits: [0.5000 5.3761e+04] ImageSize: [53760 61440] PixelExtentInWorldX: 1 PixelExtentInWorldY: 1 ImageExtentInWorldX: 61440 ImageExtentInWorldY: 53760 XIntrinsicLimits: [0.5000 6.1441e+04] YIntrinsicLimits: [0.5000 5.3761e+04]
Mostrar la información de referencia espacial en el nivel más grueso. Las extensiones mundiales son las mismas que el nivel más alto, pero el tamaño de imagen grueso es de solo 512 por 512 píxeles. Efectivamente, cada píxel en este nivel grueso corresponde a un bloque de 105 por 120 píxeles en la resolución más fina.
coarsestLevel = bim.CoarsestResolutionLevel; disp(bim.SpatialReferencing(coarsestLevel))
imref2d with properties: XWorldLimits: [0.5000 6.1441e+04] YWorldLimits: [0.5000 5.3761e+04] ImageSize: [512 512] PixelExtentInWorldX: 120 PixelExtentInWorldY: 105 ImageExtentInWorldX: 61440 ImageExtentInWorldY: 53760 XIntrinsicLimits: [0.5000 512.5000] YIntrinsicLimits: [0.5000 512.5000]
Muestra el tamaño y la relación de aspecto de la imagen en cada nivel. La relación de aspecto no es coherente, lo que indica que los niveles no abarcan todos la misma zona mundial. Por lo tanto, la suposición predeterminada es incorrecta para esta imagen.
t = table((1:8)',bim.LevelSizes(:,1),bim.LevelSizes(:,2), ... bim.LevelSizes(:,1)./bim.LevelSizes(:,2), ... 'VariableNames',["Level" "Height" "Width" "Aspect Ratio"]); disp(t)
Level Height Width Aspect Ratio _____ ______ _____ ____________ 1 53760 61440 0.875 2 27136 30720 0.88333 3 13824 15360 0.9 4 7168 7680 0.93333 5 3584 4096 0.875 6 2048 2048 1 7 1024 1024 1 8 512 512 1
Visualice la función mediante la función.bigimage
bigimageshow
Visualice el nivel de resolución más grueso en el lado izquierdo de una ventana de figura.
<span class="codeinput">figure</span><span class="codeinput">subplot(1,2,1);</span><span class="codeinput">hl = bigimageshow(bim,'ResolutionLevel',coarsestLevel);</span><span class="codeinput">title('Coarsest Resolution Level (8)')</span>
Visualice los datos de imagen en el nivel de resolución predeterminado en el lado derecho de una ventana de figura. De forma predeterminada, selecciona el nivel que se mostrará en función de la resolución de pantalla y el tamaño de la región mostrada.bigimageshow
<span class="codeinput">subplot(1,2,2);</span><span class="codeinput">hr = bigimageshow(bim);</span><span class="codeinput">title('Default Resolution Level')</span>
Asegúrese de que ambas pantallas muestren las mismas extensiones.
<span class="codeinput">linkaxes([hl.Parent,hr.Parent]);</span>
Amplíe una función.
<span class="codeinput">xlim([45000 50000]);</span><span class="codeinput">ylim([12000 17000]);</span>
Cambie el nivel de resolución de la imagen en el lado derecho de la ventana de figura. En el nivel 6, las entidades se ven alineadas con el nivel más grueso.
<span class="codeinput">hr.ResolutionLevel = 6;</span><span class="codeinput">title('Level 6');</span><span class="codeinput">snapnow</span>
En el nivel 1, las entidades no están alineadas. Por lo tanto, el nivel 1 y el nivel 8 no abarcan las mismas extensiones mundiales.
<span class="codeinput">hr.ResolutionLevel = 1;</span><span class="codeinput">title('Level 1');</span><span class="codeinput">snapnow</span>
Normalmente, el origen original de los datos tiene información de referencia espacial codificada en sus metadatos. Para el conjunto de datos Camelyon16, la información de referencia espacial se almacena como contenido XML en el campo de metadatos en el nivel de resolución más fino.ImageDescription
El contenido XML tiene un atributo DICOM_PIXEL_SPACING para cada nivel de resolución que especifica las extensiones de píxel.
Obtenga el campo de metadatos en el nivel de resolución más fino del archivo .ImageDescription
bigimage
binfo = imfinfo(bim.DataSource); binfo = binfo(1).ImageDescription;
Busque en el contenido la cadena "DICOM_PIXEL_SPACING". Se han encontrado nueve fósforos. La segunda instancia del atributo corresponde al espaciado de píxeles del nivel más fino. La última instancia del atributo corresponde al espaciado de píxeles del nivel más grueso.
indx = strfind(binfo,"DICOM_PIXEL_SPACING");
Almacene el espaciado de píxeles en el nivel más fino. Para extraer el valor del espaciado de píxeles del texto XML, inspeccione visualmente el texto que sigue a la segunda instancia del atributo "DICOM_PIXEL_SPACING".
disp(binfo(indx(2):indx(2)+100)) pixelSpacing_L1 = 0.000227273;
DICOM_PIXEL_SPACING" Group="0x0028" Element="0x0030" PMSVR="IDoubleArray">"0.000227273" &qu
Del mismo modo, almacene el espaciado de píxeles en el nivel más grueso. Para extraer el valor del espaciado de píxeles del texto XML, inspeccione visualmente el texto que sigue a la última instancia del atributo "DICOM_PIXEL_SPACING".
disp(binfo(indx(end):indx(end)+100)) pixelSpacing_L8 = 0.0290909;
DICOM_PIXEL_SPACING" Group="0x0028" Element="0x0030" PMSVR="IDoubleArray">"0.0290909" "
Calcule el ancho de píxel relativo entre el nivel 8 y el nivel 1.
pixelDims = pixelSpacing_L8/pixelSpacing_L1;
El nivel más fino tiene la extensión espacial de referencia. Calcule las extensiones correspondientes para el nivel 8 con respecto a la extensión del nivel 1.
worldExtents = bim.SpatialReferencing(8).ImageSize.*pixelDims;
Actualice la referencia espacial del nivel 8.
bim.SpatialReferencing(8).XWorldLimits = [0.5 worldExtents(2)]; bim.SpatialReferencing(8).YWorldLimits = [0.5 worldExtents(1)];
Vuelva a mostrar los datos para confirmar la alineación de la operación clave. Muestra el nivel 8 en el lado izquierdo y el nivel 1 en el lado derecho.
<span class="codeinput">hl.CData = bim;</span><span class="codeinput">hl.ResolutionLevel = 8;</span><span class="codeinput">hr.CData = bim;</span><span class="codeinput">hr.ResolutionLevel = 1;</span>