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.

Medición de regiones 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. Para ello, primero segmente la imagen en escala de grises para obtener una imagen binaria de objetos. A continuación, utilice regionprops para analizar los valores de píxel de escala de grises originales correspondientes a cada objeto de la imagen binaria.

Paso 1: Crear imagen sintética

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

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.

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

Paso 3: Calcular las propiedades de los objetos utilizando los valores de píxel de la imagen en escala de grises

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

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

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

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

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 el valor del píxel

Puede utilizar la propiedad 'PixelValues' para realizar cálculos personalizados basados en los valores de píxel 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 desviación estándar superpuesta en cada objeto de la imagen. También puede ver los resultados de otras maneras, por ejemplo, como un trazado 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 el trazado para determinar cómo particionar los datos. Por ejemplo, el código siguiente identifica los 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

Consulte también