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