Binarización de imágenes digitales utilizando el método Otsu en MATLAB

La binarización es importante en el procesamiento de imágenes digitales, principalmente en aplicaciones de visión artificial. La umbralización es una técnica eficiente en binarización. La elección de la técnica de umbralización es crucial en la binarización. Se han propuesto varios algoritmos de umbralización para definir el valor umbral óptimo.

La binarización se puede utilizar para reconocer texto y símbolos, por ejemplo, en el procesamiento de documentos. La identificación de objetos con siluetas distintivas, por ejemplo, componentes en un transportador en una planta de fabricación, y la determinación de la orientación de los objetos son otros ejemplos de aplicaciones de binarización. La binarización generalmente implica dos pasos que incluyen la determinación de un umbral de gris de acuerdo con algunos criterios objetivos y la asignación de cada píxel a una clase de fondo o primer plano. Si la intensidad del píxel es mayor que el umbral determinado entonces pertenece a la clase de primer plano y en caso contrario a la de fondo. El principal problema de la binarización es la elección de la técnica de umbralización.

Los algoritmos de umbralización se pueden categorizar en diferentes clases: 

  • Métodos basados ​​en formas de histograma 
  • Métodos basados ​​en agrupamiento 
  • Métodos basados ​​en entropía
  •  Métodos basados ​​en atributos de objetos
  •  Los métodos espaciales y los métodos locales se basan en las características locales de cada píxel.

Imagen en escala de grises: Una imagen en escala de grises es aquella que tiene el mismo valor para cada canal. Las imágenes en escala de grises solo tienen colores de tonos grises, los tonos grises no son solo blanco y negro. Si la imagen tiene una profundidad de 8 bits. Puede tener 255 tonos de gris entre oscuro y blanco. A veces, las imágenes en escala de grises también se denominan imágenes en blanco y negro.

Imagen binaria: las imágenes binarias son útiles en muchas aplicaciones de procesamiento de imágenes debido a sus características. Una imagen binaria se produce mediante la cuantificación de los niveles de gris de la imagen en dos valores, generalmente 0 y 1. Una imagen binaria tiene solo dos tonos de color. Todos los píxeles tienen un color oscuro o blanco. El tono oscuro está representado por 0 y el tono blanco está representado por 1. La array de la imagen consta de 0 y 1 solamente.

Método de Otsu: La técnica de umbralización de Otsu es un método basado en la clasificación que busca el umbral que minimiza la varianza intraclase, definida como una suma ponderada de las varianzas de las dos clases. Es el método más popular para binarizar una imagen en escala de grises. Los algoritmos de Otsu simplemente asumen que una imagen en escala de grises consta de dos tipos de píxeles. Píxeles de primer plano y de fondo. Divide todos los píxeles en dos grupos. Minimiza la variación intra-cluster maximizando la varianza inter-cluster. Finalmente, devuelve un único valor de intensidad que se denomina valor umbral. Este valor de umbral divide los dos grupos de píxeles. A todos los píxeles de un grupo se les asigna el valor de intensidad 0 y a los píxeles del segundo grupo se les asigna el valor 1. Por lo tanto, binariza la imagen en escala de grises.

Pasos:

  • Lee la imagen coloreada.
  • Conviértalo en una imagen en escala de grises.
  • Aplique la función de umbralización de Otsu.
  • Convierta una imagen en escala de grises en una imagen binaria usando un umbral.
  • Muestra la imagen binaria.
  • Binarice la imagen en escala de grises utilizando el método de otsu local.
  • Muestre la imagen.

Función utilizada:

  • La función incorporada imread ( ) se usa para leer la imagen.
  • La función incorporada imtool() se utiliza para mostrar la imagen.
  • La función incorporada rgb2gray( ) se utiliza para convertir una imagen RGB en escala de grises.
  • La función incorporada graythresh() se usa para encontrar el umbral de Otsu.
  • La función incorporada im2bw() se utiliza para convertir la escala de grises en una imagen binaria.
  • La función incorporada nlfilter() se usa para iterar la función sobre distintos bloques de tamaño [mn].

Ejemplo:

Matlab

% MATLAB code for
% OTSU binarisation
%read the colored image.
k=imread("apple.jpeg");
  
%display the image.
imtool(k,[]);
  
%convert into grayscale image.
k=rgb2gray(k);
  
%calculate threshold using Otsu's method.
level=graythresh(k);
  
%convert into binary image using level.
k1=imbinarize(k,level);
  
%display the binarized image.
imtool(k1);
  
%find the local thresholds for windows.
k2=nlfilter(k,[100 100], @ibimage);
  
%display the binary image.
imtool(k2);
  
%find the local thresholds for smaller window.
k3=nlfilter(k,[50 50], @ibimage);
  
%display the binary image.
imtool(k3);
  
%ibimage function.
%this function finds the
%threshold for patches of image.
function f=ibimage(k)
[x, y]=size(k);
level=graythresh(k);
bw=imbinarize(k,level);
x1=round(x/2);
y1=round(y/2);
f=bw(x1, y1);
end

Producción:

 

figura 1: Imagen binaria usando Global Otsu

figura 2: Imagen binaria usando Local Otsu con tamaño de ventana [100 100]

 figura 3: Imagen binaria usando Local Otsu con tamaño de ventana [50 50]

 

figura 4: Resultados en el logotipo de GeeksforGeeks

  • El método global otsu no siempre es bueno.
  • Un tamaño de ventana más pequeño da como resultado una imagen binaria de baja calidad.
  • El tamaño de ventana óptimo da como resultado una imagen binaria de alta calidad.

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 *