Esta página es para la versión anterior. La página correspondiente en inglés se eliminó en la versión actual.

Regiones de medición en imágenes en escala de grises

En este ejemplo se muestra cómo medir las propiedades de los objetos en una imagen en escala de grises.

La función regionprops es muy útil para medir las propiedades de los objetos en una imagen binaria. Hay ejemplos de documentación y ejemplos de productos que muestran cómo hacerlo.

Pero a veces es necesario procesar los valores de píxel en la imagen de escala de grises "original". En otras palabras, suponga que su proceso es algo como esto:

1. Segmentar imagen en escala de grises para obtener una imagen binaria de objetos.

2. Analice los valores de píxel de escala de grises originales correspondientes a cada objeto de la imagen binaria.

En este ejemplo se muestra cómo realizar este flujo de trabajo mediante regionprops.

Paso 1: Crear imagen sintética

Cree una imagen en escala de grises que contenga algunas regiones distintas.

I = propsSynthesizeImage; imshow(I) title('Synthetic Image')

Paso 2: Crear una imagen binaria

Segmentar la imagen de escala de grises creando una imagen binaria que contenga los objetos de la imagen.

BW = I > 0; imshow(BW) title('Binary Image')

Paso 3: Calcular propiedades de objetos mediante valores de píxel de imagen en escala de grises

La función regionprops admite varias propiedades que se pueden utilizar con imágenes en escala de grises, incluidas ' WeightedCentroid ', ' MeanIntensity ', ' MinIntensity ' y ' MaxIntensity '. Estas propiedades utilizan los valores de píxel originales de los objetos para sus cálculos.

Por ejemplo, puede utilizar regionprops para calcular tanto el centroide como centroide ponderados de los objetos de la imagen. Observe cómo se pasa en la imagen binaria (BW) que contiene los objetos y la imagen de escala de grises original (I) como argumentos en regionprops.

s = regionprops(BW, I, {'Centroid','WeightedCentroid'});

Para comparar las ubicaciones de centroide ponderadas con las ubicaciones centroide no ponderadas, muestre la imagen original y, a continuación, utilizando las funciones hold y plot, superponga el centroides en la imagen.

imshow(I) title('Weighted (red) and Unweighted (blue) Centroids');  hold on numObj = numel(s); for k = 1 : numObj     plot(s(k).WeightedCentroid(1), s(k).WeightedCentroid(2), 'r*');     plot(s(k).Centroid(1), s(k).Centroid(2), 'bo'); end hold off

Paso 4: Calcular propiedades personalizadas basadas en valores de píxeles

Puede utilizar la propiedad ' PixelValues ' para realizar cálculos personalizados basándose en los valores de píxel de la imagen de escala de grises original. La propiedad ' PixelValues ' devuelve un vector que contiene los valores de escala de grises de los píxeles de una región.

Por ejemplo, calcule la desviación estándar de cada región.

s = regionprops(BW, I, {'Centroid','PixelValues','BoundingBox'}); imshow(I); title('Standard Deviation of Regions'); hold on for k = 1 : numObj     s(k).StandardDeviation = std(double(s(k).PixelValues));     text(s(k).Centroid(1),s(k).Centroid(2), ...         sprintf('%2.1f', s(k).StandardDeviation), ...         'EdgeColor','b','Color','r'); end hold off

Esta figura muestra la medida de desviación estándar superpuesta en cada objeto de la imagen. También puede ver los resultados de otras maneras, por ejemplo como un diagrama de barras que muestra la desviación estándar por número de etiqueta.

figure bar(1:numObj,[s.StandardDeviation]); xlabel('Region Label Number'); ylabel('Standard Deviation');

Puede utilizar la gráfica para determinar cómo particionar los datos. Por ejemplo, el código siguiente identifica objetos con una desviación estándar inferior a 50.

sStd = [s.StandardDeviation]; lowStd = find(sStd < 50);  imshow(I); title('Objects Having Standard Deviation < 50'); hold on; for k = 1 : length(lowStd)     rectangle('Position', s(lowStd(k)).BoundingBox, ...         'EdgeColor','y'); end hold off;