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.

Granulometría de copos de nieve

En este ejemplo se muestra cómo calcular la distribución de tamaño de los copos de nieve en una imagen mediante la granulometría. Granulometría determina la distribución de tamaño de los objetos de una imagen sin segmentar explícitamente (detectar) primero cada objeto.

Leer imagen

Lee en la imagen 'snowflakes.png', que es una fotografía de copos de nieve.

I = imread('snowflakes.png'); imshow(I)

Mejorar el contraste

El primer paso es maximizar el contraste de intensidad en la imagen. Puede hacerlo utilizando la función, que realiza la ecualización del histograma adaptable de contraste limitado.adapthisteq Vuelva a escalar la intensidad de la imagen mediante la función para que llene todo el rango dinámico del tipo de datos.imadjust

claheI = adapthisteq(I,'NumTiles',[10 10]); claheI = imadjust(claheI); imshow(claheI)

Determinar la distribución de área de superficie de intensidad en la imagen mejorada

La granulometría estima la distribución de la superficie de intensidad de los copos de nieve en función del tamaño. Granulometría analiza los objetos de imagen con piedras cuyos tamaños se pueden determinar tamizándolos a través de pantallas de tamaño creciente y recogiendo lo que queda después de cada pasada. Los objetos de imagen se tamiza abriendo la imagen con un elemento estructurante de tamaño creciente y contando el área de superficie de intensidad restante (resumen de los valores de píxel en la imagen) después de cada abertura.

Elija un límite de contador para que el área de superficie de intensidad vaya a cero a medida que aumenta el tamaño del elemento de estructuración. Para fines de visualización, deje vacía la primera entrada de la matriz de área de superficie.

radius_range = 0:22; intensity_area = zeros(size(radius_range)); for counter = radius_range     remain = imopen(claheI, strel('disk', counter));     intensity_area(counter + 1) = sum(remain(:));   end figure plot(intensity_area, 'm - *') grid on title('Sum of pixel values in opened image versus radius') xlabel('radius of opening (pixels)') ylabel('pixel value sum of opened objects (intensity)')

Calcular la primera derivada de la distribución

Una disminución significativa en el área de superficie de intensidad entre dos aberturas consecutivas indica que la imagen contiene objetos de tamaño comparable a la abertura más pequeña. Esto es equivalente a la primera derivada de la matriz de área de superficie de intensidad, que contiene la distribución de tamaño de los copos de nieve en la imagen. Calcular la primera derivada con la función.diff

intensity_area_prime = diff(intensity_area); plot(intensity_area_prime, 'm - *') grid on title('Granulometry (Size Distribution) of Snowflakes') ax = gca; ax.XTick = [0 2 4 6 8 10 12 14 16 18 20 22]; xlabel('radius of snowflakes (pixels)') ylabel('Sum of pixel values in snowflakes as a function of radius')

Extraer copos de nieve con un radio particular

Observe el mínimo y los radios donde se producen en el gráfico. Los mimos te dicen que los copos de nieve en la imagen tienen esos radios. Cuanto más negativo sea el punto mínimo, mayor será la intensidad acumulada de los copos de nieve en ese radio. Por ejemplo, el punto mínimo más negativo se produce en la marca de radio de 5 píxeles. Puede extraer los copos de nieve con un radio de 5 píxeles con los siguientes pasos.

open5 = imopen(claheI,strel('disk',5)); open6 = imopen(claheI,strel('disk',6)); rad5 = imsubtract(open5,open6); imshow(rad5,[])

Consulte también

| | | |