¿Cómo contar el número de círculos en una imagen digital dada usando MATLAB?

En el procesamiento de imágenes, el análisis de componentes conectados es la técnica para contar e inspeccionar los segmentos automáticamente. Supongamos que tenemos una imagen que consta de pequeños círculos. Hay cientos de círculos en la imagen. Necesitamos contar el número de círculos. Tomará mucho tiempo si contamos manualmente, y aún así, el resultado puede no ser correcto. Por otro lado, podemos usar el análisis de componentes conectados para contar el número de manera fácil y precisa.

Una condición necesaria es que los segmentos o formas que nos interesa contar estén desconectados entre sí. Dos círculos conectados por un píxel común se contarán como 1. Por lo tanto, la condición principal y esencial es que cada forma debe estar separada.

Pasos: 

  • Lea la imagen de entrada.
  • Convierta la imagen en color en escala de grises.
  • Crear un elemento estructurante en forma de disco.
  • Realizar erosión de la imagen utilizando elementos estructurantes.
  • Aplique el análisis de componentes conectados y etiquete los componentes.
  • Cuenta las etiquetas.
  • Mostrar los resultados.

Funciones utilizadas:

  • La función incorporada imread() se usa para leer la imagen.
  • La función incorporada rgb2gray( ) se utiliza para convertir una imagen RGB en una imagen en escala de grises.
  • La función incorporada strel() se usa para definir el elemento de estructuración.
  • La función incorporada imerode() se utiliza para realizar la erosión.
  • La función incorporada bwlabel() se utiliza para aplicar el análisis de componentes conectados.
  • La función incorporada imtool() se usa para mostrar la imagen.
  • La función incorporada max() se usa para encontrar el máximo entre todos los valores.

Ejemplo:

Matlab

% MATLAB code for count the
% number of circles in the image.
% read the colored image.
k=imread("CCA1.png");
 
% Convert into grayscale.
k=rgb2gray(k);
 
% Create the structuring element.
SE=strel('disk',9,0);
 
% Erode the image to disconnect the circles.
k1=imerode(k,SE);
 
% Display the image.
imtool(k1);
 
% Apply connected component analysis.
b=bwlabel(k1,8);
 
% Find the unique component labels.
c=unique(b);
 
% Print the last component label.
max(c);
 
% Display the coloured map.
imtool(b,[]);

Salida: max=20 Por lo tanto, hay 20 círculos en la imagen de entrada.

 

Figura 1: Imagen original

 

Figura 2: imagen erosionada

 

Figura 3: cubo de color de imagen etiquetado 

Explicación del código:

  • k=rgb2gris(k); Esta línea convierte la imagen en color en escala de grises.
  • SE=strel(‘disco’,9,0); Esta línea define el elemento estructurante.
  • k1=imeroda(k,SE); Esta línea calculará la imagen erosionada.
  • b=bwetiqueta(k1,8); Esta línea aplicará el análisis de componentes conectados.
  • máx(c); Esta línea contará el número de círculos en la imagen.

Ejemplo 2:

Matlab

% MATLAB code for
% Connected Component Analysis
% Read the colored image.
k=imread("7.jpg");
 
% Resize the image for it is large.
k1=imresize(k,0.3);
 
% Convert to grayscale.
k1=rgb2gray(k1);
 
% Display the image.
imtool(k1,[]);
 
% Convert it into binary image.
k2=im2bw(k1,graythresh(k1));
 
% Display the binary image.
imtool(k2,[]);
 
% Reverse the binary image.
k3=1-k2;
 
% Display the reversed binary image.
imtool(k3,[]);
 
% apply connected component analysis.
b=bwlabel(k3,8);
 
% find the unique labels.
c = unique(b);
 
% Find the max value.
max(c)
 
% Display the colored map image.
imtool(b,[]);

Salida: max = 629, por lo tanto, hay 629 agujeros en la colmena.

 

Figura 4: Imagen original

 

Figura 5: Imagen binaria: los ladrillos son negros

 

Figura 6: Imagen binaria: Los ladrillos son blancos

Explicación del código:

  • k1=rgb2gris(k1); Esta línea convierte la imagen en color en escala de grises.
  • k2=im2bw(k1,umbral gris(k1)); Esta línea convierte la escala de grises en una imagen binaria.
  • b=bwetiqueta(k3,8); Esta línea aplica el análisis de componentes conectados.
  • c=único(b); Esta línea encuentra las etiquetas únicas.
  • máx(c); Esta línea encuentra el valor máximo.
  • imtool(b,[]); Esta línea muestra la imagen del mapa en color.

 

Publicación traducida automáticamente

Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *