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.
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')
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')
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 .BW
I
regionprops
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.hold
plot
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
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