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

Este ejemplo muestra cómo calcular la distribución del tamaño de los copos de nieve en una imagen mediante el uso de granulometría. La granulometría determina la distribución del tamaño de los objetos en una imagen sin segmentar (detectar) explícitamente cada objeto en primer lugar.

Leer imagen

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

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

Mejore 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 de histograma adaptable de contraste limitado.adapthisteq Reescalar la intensidad de la imagen utilizando la función para que llene el rango dinámico completo del tipo de datos.imadjust

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

Determine la distribución de superficie de intensidad en imagen mejorada

La granulometría estima la distribución del área superficial de la intensidad de los copos de nieve en función del tamaño. La granulometría compara objetos de imagen con piedras cuyos tamaños pueden determinarse tamizarlas a través de pantallas de tamaño creciente y recogiendo lo que queda después de cada pasada. Los objetos de imagen se tamian abriendo la imagen con un elemento de estructuración de aumento de tamaño y contando el área de superficie de intensidad restante (suma de los valores de píxel en la imagen) después de cada apertura.

Elija un límite de contador para que el área de la superficie de intensidad vaya a cero a medida que aumente el tamaño de su 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 caída significativa en la 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 equivale a la primera derivada de la matriz de área superficial de intensidad, que contiene la distribución de tamaño de los copos de nieve en la imagen. Calcule 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')

Extraiga los copos de nieve que tengan un radio determinado

Observe los mínimos y los radios donde se producen en el gráfico. Los minima 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 que tienen 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

| | | |