Algoritmo de corrección del ángulo del código de barras basado en el algoritmo Otsu

Tabla de contenido

1. Descripción general del cálculo de Otsu

2. Corrección del ángulo del código de barras mediante el algoritmo Otsu

3.programa central de matlab

4. Resultados de la prueba de algoritmo


        El algoritmo de corrección del ángulo del código de barras basado en el algoritmo Otsu es un método para identificar y corregir automáticamente el ángulo del código de barras. Este método combina procesamiento de imágenes y tecnología de aprendizaje automático para encontrar el ángulo del código de barras y corregirlo mediante la binarización y el umbral de la imagen.

1. Descripción general del cálculo de Otsu

       El algoritmo Otsu es un método de segmentación de umbral adaptativo que se utiliza para convertir imágenes en escala de grises en imágenes binarias. Este algoritmo encuentra el umbral óptimo calculando la varianza entre clases para maximizar la distinción entre dos clases de píxeles (primer plano y fondo).

       En el algoritmo de corrección del ángulo del código de barras basado en el algoritmo Otsu, primero debemos preprocesar la imagen, incluidas las operaciones de escala de grises y reducción de ruido. Luego, utilizamos el algoritmo de Otsu para binarizar la imagen y separar el área del código de barras y el área del fondo.

       A continuación, necesitamos encontrar el ángulo del código de barras. Esto se puede lograr calculando las proyecciones en todas las direcciones rectas posibles en la imagen. Específicamente, podemos dividir la imagen en múltiples áreas rectangulares pequeñas y contar la cantidad de píxeles blancos en cada área rectangular. Luego tomamos estas cantidades como los valores de proyección de esta área rectangular en la dirección de la línea recta correspondiente.

       Podemos encontrar el ángulo del código de barras calculando la varianza de los valores proyectados en todas las direcciones posibles de líneas rectas. Específicamente, podemos dividir los valores de proyección en dos grupos, uno es el valor de proyección del área del código de barras y el otro es el valor de proyección del área de fondo. Luego calculamos la varianza de estos dos conjuntos de valores de proyección y encontramos la dirección de la línea que maximiza la varianza, que es el ángulo del código de barras.

      Finalmente, necesitamos realizar operaciones como rotar y trasladar la imagen según el ángulo encontrado para corregir el código de barras a una orientación horizontal. Esto se puede lograr mediante el uso de funciones de rotación y traducción de bibliotecas de procesamiento de imágenes.

La fórmula de cálculo de la varianza entre clases del algoritmo de Otsu:

σ^2_B = w_0 * w_1 * (μ_0 - μ_1)^2

Entre ellos, w_0 y w_1 son los pesos de los píxeles de primer plano y de fondo respectivamente, y μ_0 y μ_1 son los valores de gris promedio de los píxeles de primer plano y de fondo respectivamente.

La fórmula para calcular el valor de proyección:

P(θ) = ∑_{x,y} I(x,y) * R(x cosθ + y sinθ, -x sinθ + y cosθ)

Entre ellos, I (x, y) es el valor de gris de la imagen, R (x, y) es la función indicadora de un área rectangular y θ es el ángulo en la dirección de la línea recta.

La fórmula para calcular la varianza:

Var(P) = ∑_{i=1}^{N} (P_i - μ)^2 / N

donde P_i es el valor proyectado, μ es el promedio de los valores proyectados y N es el número de valores proyectados.

2. Corrección del ángulo del código de barras mediante el algoritmo Otsu

La implementación de la corrección del ángulo del código de barras mediante el algoritmo Otsu incluye principalmente los siguientes pasos:

  1. Preprocesamiento: primero, preprocese la imagen del código de barras de entrada, incluidas las operaciones de escala de grises y reducción de ruido. La escala de grises puede convertir imágenes en color en imágenes en escala de grises y la reducción de ruido puede eliminar el ruido y las interferencias de las imágenes.
  2. Binarización: utilice el algoritmo Otsu para binarizar la imagen preprocesada para separar el área del código de barras y el área del fondo. El algoritmo de Otsu encuentra el umbral óptimo calculando la varianza entre clases para maximizar la distinción entre dos tipos de píxeles (primer plano y fondo). En la imagen binarizada, el área del código de barras es blanca y el área del fondo es negra.
  3. Cálculo de proyección: divida la imagen binarizada en varias áreas rectangulares pequeñas y calcule la cantidad de píxeles blancos en cada área rectangular. Luego, estas cantidades se toman como valores de proyección del área rectangular en la dirección de la línea recta correspondiente. Al calcular los valores de proyección en todas las direcciones de línea recta posibles, se puede obtener un conjunto de secuencias de valores de proyección.
  4. Determinación del ángulo: calcule la varianza de la secuencia de valores de proyección y encuentre la dirección de la línea recta que maximiza la varianza, que es el ángulo del código de barras. Específicamente, la secuencia de valores de proyección se puede dividir en dos grupos, un grupo es el valor de proyección del área del código de barras y el otro grupo es el valor de proyección del área de fondo. Luego, calcule la varianza de estos dos conjuntos de valores de proyección y encuentre la dirección de la línea recta que maximiza la varianza, que es el ángulo del código de barras.
  5. Corrección de imagen: realice operaciones como rotación y traducción en la imagen según el ángulo encontrado para corregir el código de barras a una orientación horizontal. Esto se puede lograr mediante el uso de funciones de rotación y traducción de bibliotecas de procesamiento de imágenes. En la imagen corregida, el área del código de barras se coloca horizontalmente para facilitar las operaciones de decodificación posteriores.

       Cabe señalar que en aplicaciones prácticas, es posible que sea necesario optimizar y mejorar el algoritmo para adaptarlo a diferentes tipos de códigos de barras y calidades de imagen. Además, para códigos de barras con un ángulo de inclinación grande, puede que sea necesario realizar primero la corrección de la inclinación y luego la corrección del ángulo.

       En resumen, la corrección del ángulo de los códigos de barras mediante el algoritmo de Otsu puede mejorar eficazmente la tasa de reconocimiento y la precisión de los códigos de barras y proporcionar una garantía confiable para operaciones de decodificación posteriores.

3.programa central de matlab

function I_seg=Otsu(I)

I= double(I);
I= medfilt2(I);         % 二维中值滤波
h_Tmean = mean(mean(I));
[height,width] = size(I);
Size = height * width;  % 图像大小
h_T = sum(sum(I));      % 图像总灰度值
G_min = min(min(I));    % 最小灰度值
G_max = max(max(I));    % 最大灰度值
I_seg = zeros(height,width);     % the array to store the segmented image
thresh = 0;          % the threshold(边界)
num1 = 0;
num2 = 0;            % count the num of the pixel(像素) from the diffrient class
P1 = 0;
P2 = 0;              % the probability (概率)of the different class
h_T1 = 0;
h_T2 = 0;            % the total gray value of different class 
h_T1mean = 0;
h_T2mean = 0;        % the mean value of the class
Max = 0;
for thresh=G_min:G_max     % find the best threshold
    h_T1 = 0;
    h_T2 = 0;
    num1 = 0;
    for h=1:height
        for w=1:width
             if I(h,w) <= thresh
                  num1 = num1 + 1;
                  h_T1 = h_T1 + I(h,w);
             end
         end
     end
     num2 = Size - num1;
     h_T2 = h_T - h_T1;
     P1 = num1/Size;
     P2 = num2/Size;
     h_T1mean = h_T1/num1;
     h_T2mean = h_T2/num2;
     D1 = P1*P2*(h_T1mean - h_T2mean)^2;%类间方差            
     if D1 > Max
         Max = D1;
         T_best = thresh;   % T record the best thresh
     end
 end
 
 %%%%%%% Seg the image %%%%%%%%%
 for i=1:height
     for j=1:width
         if I(i,j) > T_best
             I_seg(i,j) =255;
         end
     end
 end
up2208

4. Resultados de la prueba de algoritmo

->

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/133445754
Recomendado
Clasificación