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.

Medir regiones en imágenes en escala de grises

Este ejemplo muestra cómo medir propiedades de objetos en una imagen en escala de grises. Para lograrlo, segmente primero la imagen en escala de grises para obtener una imagen binaria de objetos. Después, utilice la función regionprops para analizar los valores de los píxeles en escala de grises originales que se corresponden con cada objeto de la imagen binaria.

Paso 1: Crear una imagen sintética

Utilice una función de ayuda, propsSynthesizeImage, para crear una imagen en escala de grises que contenga cinco regiones distintas.

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

Figure contains an axes object. The axes object with title Synthetic Image contains an object of type image.

Paso 2: Crear una imagen binaria

Segmente la imagen en escala de grises creando una imagen binaria que contenga los objetos de la imagen original.

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

Figure contains an axes object. The axes object with title Binary Image contains an object of type image.

Paso 3: Calcular las propiedades de un objeto utilizando los valores de píxeles de la 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' y 'MinIntensity'. Estas propiedades utilizan los valores de píxeles originales de los objetos para sus cálculos.

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

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

Para comparar las ubicaciones de los centroides ponderados con las ubicaciones de los centroides no ponderados, muestre la imagen original y, después, utilizando las funciones hold y plot, superponga los 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

Figure contains an axes object. The axes object with title Weighted (red) and Unweighted (blue) Centroids contains 11 objects of type image, line. One or more of the lines displays its values using only markers

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

Puede utilizar la propiedad 'PixelValues' para realizar cálculos personalizados basados en los valores de píxeles de la imagen en 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.

Como 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

Figure contains an axes object. The axes object with title Standard Deviation of Regions contains 6 objects of type image, text.

Esta figura muestra la medición de la desviación estándar superpuesta en cada objeto de la imagen. También puede visualizar los resultados de otras formas; por ejemplo, como una gráfica 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')

Figure contains an axes object. The axes object with xlabel Region Label Number, ylabel Standard Deviation contains an object of type bar.

Puede utilizar la gráfica para determinar cómo dividir los datos. Por ejemplo, el código siguiente identifica objetos con una desviación estándar menor que 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

Figure contains an axes object. The axes object with title Objects Having Standard Deviation < 50 contains 2 objects of type image, rectangle.

Consulte también

| |

Temas relacionados