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

Este ejemplo muestra cómo medir las propiedades de los objetos en una imagen en escala de grises. Para lograrlo, primero segmenta la imagen en escala de grises para obtener una imagen binaria de los 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

Segmenta 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 propiedades de objeto utilizando valores de píxel de imagen en escala de grises

La función admite varias propiedades que se pueden usar 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 tanto el centroide como el centroide ponderado de los objetos de la imagen.regionprops Observe cómo pasa la imagen binaria () que contiene los objetos y la imagen de escala de grises original () como argumentos.BWIregionprops

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

Para comparar las ubicaciones de centroide ponderado con las ubicaciones de centroide no ponderado, muestre la imagen original y, a continuación, utilizando las funciones y, superponer los centroides de 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 basadas en el valor de píxel personalizado

Puede utilizar la propiedad ' PixelValues ' para realizar cálculos personalizados basados 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.

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