Main Content

Procesar imágenes grandes de manera eficiente utilizando imágenes parciales o resoluciones más bajas

En este ejemplo se muestra cómo procesar una imagen grande rápidamente mediante dos estrategias que permiten calcular en muestras representativas más pequeñas de la imagen de alta resolución.

Procesar imágenes grandes puede llevar mucho tiempo. Esto hace que el desarrollo iterativo de algoritmos sea prohibitivamente costoso. Hay dos formas comunes de acortar el ciclo de retroalimentación: iterar en una imagen de resolución más baja o iterar en una región parcial de la imagen grande. En este ejemplo se muestran ambos enfoques para crear una máscara de segmentación para una imagen grande.

Si tiene instalado Parallel Computing Toolbox™, puede acelerar aún más el procesamiento mediante el uso de varios trabajadores.

Cree un archivo .bigimage Este ejemplo utiliza una versión modificada de la imagen "tumor_091.tif" del archivo .Conjunto de datos CAMELYON16 La imagen original es una imagen de entrenamiento de un ganglio linfático que contiene tejido tumoral. La imagen original tiene ocho niveles de resolución, y el nivel más alto tiene resolución 53760-por-61440. La imagen modificada tiene solo tres niveles de resolución gruesa. La referencia espacial de la imagen modificada se ha ajustado para aplicar una relación de aspecto coherente y registrar entidades en cada nivel.

bim = bigimage('tumor_091R.tif'); 

Muestre la imagen grande utilizando la función.bigimageshow

bigimageshow(bim); 

Acelere el procesamiento con imágenes de menor resolución

Muchas imágenes grandes contienen varios niveles de resolución, incluidas versiones gruesas de menor resolución de la mejor imagen de alta resolución. En general, la distribución de los valores de píxel individuales debe ser aproximadamente igual en todos los niveles. Aprovechando esta suposición, puede calcular las estadísticas globales a un nivel grueso y, a continuación, utilizar las estadísticas para procesar los niveles más finos.

Extraiga la imagen en el nivel más grueso y, a continuación, convierta la imagen a escala de grises.

imLowRes = getFullLevel(bim,bim.CoarsestResolutionLevel); imLowResGray = rgb2gray(imLowRes); 

Umbral de la imagen en dos clases y mostrar el resultado.

thresh = graythresh(imLowResGray); imLowResQuant = imbinarize(imLowResGray,thresh); imshow(imLowResQuant) 

Validar en la imagen más grande. Negar el resultado para obtener una máscara para la región manchada.

bq = apply(bim,bim.FinestResolutionLevel, ...     @(im)~imbinarize(rgb2gray(im),thresh)); 

Visualice el resultado al mejor nivel.

bigimageshow(bq,'CDataMapping','scaled'); 

Acelerar el procesamiento mediante el uso de regiones parciales de imagen grande

Otro enfoque mientras se trabaja con imágenes grandes es extraer una región más pequeña con características de interés. Puede calcular estadísticas desde el ROI y, a continuación, utilizar las estadísticas para procesar toda la imagen de alta resolución.

% Zoom in on a region of interest. bigimageshow(bim); xlim([2400,3300]) ylim([900 1700]) 

Extraiga la región que se muestra desde el mejor nivel.

xrange = xlim; yrange = ylim; imRegion = bim.getRegion(1,[xrange(1),yrange(1)],[xrange(2),yrange(2)]); imshow(imRegion); 

El prototipo con esta región muestra los resultados.

imRegionGray = rgb2gray(imRegion); thresh = graythresh(imRegionGray); imLowResQuant = ~imbinarize(imRegionGray,thresh);  imshow(imLowResQuant) 

Valide en la imagen grande completa y muestre los resultados.

bq = apply(bim, bim.FinestResolutionLevel,...     @(im)~imbinarize(rgb2gray(im), thresh));  bigimageshow(bq,'CDataMapping','scaled'); 

Acelere el procesamiento con Parallel Computing Toolbox

Si tiene instalado Parallel Computing Toolbox™, puede distribuir el procesamiento entre varios trabajadores para acelerar el procesamiento. Para intentar procesar la imagen en paralelo, establezca la variable en .runInParalleltrue

runInParallel = false; if runInParallel     % Open a pool     p = gcp;     % Ensure workers are on the same folder as the file to be able to     % access it using just the relative path     sourceDir = fileparts(which('tumor_091R.tif'));     spmd         cd(sourceDir)     end     % Run in parallel     bq = apply(bim,bim.FinestResolutionLevel, ...         @(im)~imbinarize(rgb2gray(im),thresh),'UseParallel',true); end 

Consulte también

| |