Cómo utilizar los filtros de corrección de imagen

This article was translated from English: Does it need improvement?
Translated
View the article in English

por Hairil Hasyimi Bin Omar

Seamos realistas. No todas las imágenes son perfectas, y también es uno de los principales factores por los que una imagen de código de barras no puede ser leída por IronBarcode. Esto no es del todo culpa del usuario. En lugar de pasar por la molestia de volver a capturar la imagen o utilizar otro software de mejora de imágenes, IronBarcode ha ideado una función que permite a los usuarios aplicar filtros a la imagen mediante programación. Esto ayudaría a IronBarcode a leer la imagen y mejorar la precisión.

Continúe leyendo para conocer los filtros de corrección de imagen disponibles en IronBarcode, sus efectos sobre las imágenes y cómo aplicarlos.

Empezar a utilizar IronBarcode

Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer


Utilice filtros de imagen para mejorar el ejemplo de lectura

Para aplicar el filtro, instancie la clase ImageFilterCollection y cree instancias de cada filtro individualmente. A continuación, asigne el objeto a la propiedad ImageFilters del objeto BarcodeReaderOptions. pasar el objeto options al método Read junto con la imagen de muestra.

Utilicemos la siguiente imagen como ejemplo.

Imagen de muestra

A primera vista, la imagen parece bastante borrosa. Sin embargo, el brillo es aceptable y los colores blanco y negro son distinguibles. Por lo tanto, necesitamos aplicar al menos el SharpenFilter y el ContrastFilter para mejorar la legibilidad del código de barras. Consulte el siguiente fragmento de código para aplicar los filtros a la imagen, leerla y mostrarla en la consola.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-apply-filter.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection()
    {
        new SharpenFilter(3.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Write the result value to console
foreach (BarcodeResult result in results)
{
    Console.WriteLine(result.Text);
}
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection() From {
		New SharpenFilter(3.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Write the result value to console
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
VB   C#

En el fragmento de código anterior, además de aplicar filtros y leer el código de barras, también exportamos la imagen filtrada al disco. La comparación entre la muestra y las imágenes filtradas puede verse a continuación.

Imagen de muestra
Muestra filtrada

Explorar los filtros de corrección de imagen

IronBarcode ofrece múltiples filtros de imagen específicamente diseñados para la corrección de imágenes. Estos filtros pueden ayudar a leer imágenes de códigos de barras imperfectas y mejorar la precisión de la lectura. Sin embargo, los usuarios tendrán que entender cómo funcionan estos filtros para

seleccionar el filtro adecuado y evitar problemas de rendimiento debidos al uso de un filtro excesivo o incorrecto. A continuación se muestran todos los filtros disponibles:

  • Filtro de umbral adaptativo
  • Filtro de umbral binario
  • Filtro de luminosidad
  • Filtro de contraste
  • Filtro inversor
  • AfilarFiltro
  • Filtros de desenfoque
  • FiltroDesenfoqueGaussiano
  • Filtro Bilateral
  • FiltroDesenfoqueMediano

    El orden en el que se aplican estos filtros se basa en su ubicación dentro de ImageFilterCollection.

Filtro de umbral adaptativo

AdaptiveThresholdFilter es uno de los filtros disponibles en IronBarcode que aplicaUmbral adaptativo Bradley a la imagen, que determina automáticamente el umbral para binarizar una imagen. Este filtro es ideal para imágenes con iluminación no uniforme y niveles de intensidad de fondo variables.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-adaptive-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new AdaptiveThresholdFilter(0.9f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New AdaptiveThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png")
VB   C#

A continuación se muestran los resultados de aplicar el filtro utilizando diferentes valores.

Umbral adaptativo por defecto
0,9 Umbral adaptativo

El constructor también acepta parámetros adicionales para la configuración:

  • Superior: Superior(blanco) color para el umbral.
  • Inferior: Inferior(negro) color para el umbral.
  • Umbral: Umbral límite(0.0-1.0) a considerar para la binarización.
  • Rectángulo: Región rectangular sobre la que aplicar el procesador.

    Como se ve en la imagen de salida de arriba, la imagen se binariza para que sólo tenga negro y blanco. Aunque todavía no parece ser ideal para la lectura de códigos de barras, ya que es necesario utilizar filtros combinados. Los usuarios tendrán que experimentar con la sensibilidad de los parámetros para obtener los mejores resultados.

Filtro de umbral binario

El BinaryThresholdFilter filtra una imagen dividiendo los píxeles en el umbral dado, donde se utiliza para comparar la luminancia de un componente de color. Al igual que el AdaptiveThresholdFilter, este filtro puede introducir ruido nuevo o no deseado si no se utiliza correctamente. Sin embargo, IronBarcode ha establecido valores por defecto para las propiedades del filtro.

De forma similar al AdaptiveThresholdFilter, el BinaryThresholdFilter acepta los mismos parámetros adicionales para su configuración.

  • Superior: Superior(blanco) color para el umbral.
  • Inferior: Inferior(negro) color para el umbral.
  • Umbral: Umbral límite(0.0-1.0) a considerar para la binarización.
  • Rectángulo: Región rectangular sobre la que aplicar el procesador.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-binary-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BinaryThresholdFilter(0.9f)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BinaryThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png")
VB   C#

A continuación se muestra el resultado de la aplicación de filtros a la imagen de muestra.

Umbral binario por defecto
0,9 Umbral binario

Observando la imagen de salida anterior, podemos ver que la muestra ha sido binarizada en color blanco y negro. Sin embargo, puede verse que este filtro no es adecuado para esta imagen, ya que se han eliminado las barras del código de barras y se ha introducido ruido nuevo.

Filtro de luminosidad

BrightnessFilter es otro filtro esencial en la colección de filtros de imagen en IronBarcode. Como su nombre indica, este filtro ajusta el brillo de la imagen del código de barras. La entrada a este constructor puede variar la Cantidad de brillo en la imagen de salida. El valor por defecto es 1, que deja la imagen sin cambios. Un valor de 0 creará una imagen completamente negra, mientras que valores superiores a 1 harán que la imagen sea más brillante.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-brightness.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BrightnessFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BrightnessFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png")
VB   C#

A continuación se muestra la imagen de salida después de aplicar este filtro a la entrada de muestra.

Brillo por defecto
1,5 Brillo

Filtro de contraste

El ContrastFilter se utiliza para ajustar el nivel de contraste de una imagen. El contraste de imagen se refiere a la diferencia de intensidad de color entre varios elementos de una imagen. Aumentar el nivel de contraste mejora la visibilidad de los detalles, haciendo que la imagen aparezca vívida y llamativa, mientras que reducir el contraste hace que la imagen aparezca más suave y tenue.

El valor por defecto es 1, que deja la imagen sin cambios. Un valor de 0 creará una imagen completamente gris, mientras que valores superiores a 1 aumentarán el contraste de la imagen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-contrast.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new ContrastFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New ContrastFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png")
VB   C#

La aplicación de este filtro a la entrada de muestra producirá la imagen siguiente.

Contraste por defecto
1,5 Contraste

Invertir filtro

Este filtro se utiliza para invertir los colores dentro de una imagen, haciendo que los colores opuestos, como el blanco se convierta en negro y el negro en blanco. Es especialmente útil cuando los usuarios intentan leer una imagen de código de barras con un color de fondo. A diferencia del BinaryThresholdFilter, este filtro invierte los colores directamente sin necesidad de especificar la sensibilidad. Además, este filtro se puede utilizar con un CropRectangle para especificar la ubicación en la imagen que necesita que se invierta el color, en lugar de invertir los colores de toda la imagen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-invert.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new InvertFilter(),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("invert.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New InvertFilter()}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("invert.png")
VB   C#

La imagen de salida que se muestra a continuación es el resultado de aplicar este filtro a la imagen de entrada de muestra.

Imagen original
Invertido

Filtro Sharpen

El último filtro de corrección de imagen en IronBarcode es el SharpenFilter. Este filtro mejora la nitidez de una imagen y es muy útil para utilizarlo con imágenes borrosas. Los usuarios pueden manipular este filtro para ajustar la nitidez de una imagen ajustando el valor Sigma al instanciar el objeto filtro. El valor por defecto es 3. Aumente los valores sigma para aumentar la nitidez de la imagen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-sharpen.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(0.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png");
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New SharpenFilter(0.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png")
VB   C#

La imagen de abajo es el afilado de la imagen de entrada de muestra.

Enfoque por defecto
0,5 Afilar

Comparando la imagen de arriba con la imagen original, parece más nítida y definitivamente ayudaría en la lectura de códigos de barras usando IronBarcode. En la mayoría de los casos, SharpenFilter se aplica siempre junto con otros filtros de la clase ImageFilterCollection.

Filtros de desenfoque

Filtros GaussianBlur

El GaussianBlurFilter se utiliza para aplicar un desenfoque gaussiano a una imagen. Este filtro se utiliza comúnmente para reducir el ruido en una imagen.

El filtro funciona promediando los valores de los píxeles vecinos en la imagen utilizando una función gaussiana. El método se basa en dos factores ajustables:

  • Kernel: una matriz utilizada para promediar los píxeles.
  • Sigma: un valor que controla la intensidad del desenfoque.

    El tamaño del kernel predeterminado es de 3x3 píxeles, y el valor Sigma predeterminado es 3.0, lo que produce un desenfoque moderado. Aumentar el valor de Sigma resultará en un efecto de desenfoque más fuerte. También puedes personalizar el núcleo para controlar el tamaño del vecindario que promedia el filtro de desenfoque.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-gaussianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new GaussianBlurFilter(3, 3, 3.0f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New GaussianBlurFilter(3, 3, 3.0F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png")
VB   C#

La aplicación de este filtro a la entrada de muestra producirá la imagen siguiente.

Enfoque por defecto
Imagen de desenfoque gaussiano

Filtros bilaterales

El BilateralFilter se utiliza para suavizar imágenes mientras se preservan los bordes. A diferencia de las técnicas de desenfoque simples, que afectan a todos los píxeles de manera uniforme, el Filtro Bilateral considera tanto las diferencias de color como la distancia entre píxeles, lo que lo hace efectivo para un alisado que preserva los bordes.

El método se basa en tres factores ajustables:

  • NeighborhoodDiameter: Especifica el diámetro del vecindario de píxeles utilizado para el filtrado. Un diámetro mayor incluye más píxeles circundantes en el filtro. El valor predeterminado es 5.
  • SigmaColor: Esto representa la influencia del color. Determina cuánto afecta la diferencia de color entre píxeles vecinos al filtrado. Un valor más alto significa que los píxeles con diferentes colores se influenciarán más entre sí. El valor predeterminado es 75.0.
  • SigmaSpace: Esto representa la influencia espacial. Determina cuánto afecta la distancia entre píxeles al filtrado. Un valor más alto significa que los píxeles que están más distantes se influenciarán más entre sí. El valor predeterminado es 75.0.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-bilateral.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BilateralFilter(5, 75, 75),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("bilateral.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BilateralFilter(5, 75, 75)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("bilateral.png")
VB   C#

La aplicación de este filtro a la entrada de muestra producirá la imagen siguiente.

Enfoque por defecto
Imagen bilateral

Filtros MedianBlur

El MedianBlurFilter es un filtro utilizado para reducir el ruido en una imagen al reemplazar el valor de cada píxel con el valor mediano de los píxeles circundantes. Este filtro es particularmente efectivo para preservar los bordes mientras elimina el ruido.

  • KernelSize: Define el tamaño del vecindario alrededor de cada píxel utilizado para calcular la mediana. El valor debe ser un número impar mayor que 0. El valor predeterminado es 5.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-medianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new MedianBlurFilter(5),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New MedianBlurFilter(5)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png")
VB   C#

La aplicación de este filtro a la entrada de muestra producirá la imagen siguiente.

Enfoque por defecto
Imagen MedianBlur

Guardar iteraciones

Cuando aplicas múltiples filtros al código de barras, puede ser difícil ver el resultado después de cada método de filtrado. Esta función permite guardar la imagen filtrada después de aplicar cada filtro, en el orden en que se procesan. Para habilitar esta función, primero pase true al constructor de ImageFilterCollection. Luego, use el método ExportFilterImagesToDisk para proporcionar la ruta y el nombre de las imágenes de salida.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-save-iterations.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(3.5f),
        new AdaptiveThresholdFilter(0.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {
		New SharpenFilter(3.5F),
		New AdaptiveThresholdFilter(0.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png")
VB   C#

Los filtros se aplican en el orden del código y las imágenes de salida reflejan los resultados de cada iteración.

  • Afilado -> Después de Afilado
  • Afilado + Umbral Adaptativo -> Después del Umbral Adaptativo
  • Afilado + Umbral Adaptativo + Contraste -> Después del Contraste
    Imagen de muestra
    1,5 Contraste
    Imagen de muestra
    1,5 Contraste

    Además de Filtros de imagen los usuarios también pueden añadir otras propiedades en BarcodeReaderOptions para una lectura más precisa, vea esto artículo para más información.

Hairil related to Guardar iteraciones

Hairil Hasyimi Bin Omar

Ingeniero de software

Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está perfeccionando sus conocimientos de C#, Python y Java, y los utiliza para añadir valor a los miembros del equipo de Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA de Malasia, donde se licenció en Ingeniería Química y de Procesos.