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

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.

Biblioteca NuGet C# para

Instalar con NuGet

Install-Package BarCode
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

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()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection()
    {
        new SharpenFilter(3.5f),
        new ContrastFilter(2)
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", options);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("filteredSample.png");

//  Escribe el valor del resultado en la consola
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)
	}
}

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

'  Exportar archivo a disco
results.ExportFilterImagesToDisk("filteredSample.png")

'  Escribe el valor del resultado en la consola
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

    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 aplica Umbral 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 myOptionsExample = new BarcodeReaderOptions()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection() {
    new AdaptiveThresholdFilter(0.9f),
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
Imports IronBarCode

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

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)

'  Exportar archivo a disco
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 myOptionsExample = new BarcodeReaderOptions()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection() {
        new BinaryThresholdFilter(0.9f)
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
Imports IronBarCode

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

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)

'  Exportar archivo a disco
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 myOptionsExample = new BarcodeReaderOptions()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection() {
    new BrightnessFilter(1.5f),
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("brightness_1.5.png");
Imports IronBarCode

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

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)

'  Exportar archivo a disco
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 myOptionsExample = new BarcodeReaderOptions()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection() {
    new ContrastFilter(1.5f),
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("contrast_1.5.png");
Imports IronBarCode

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

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)

'  Exportar archivo a disco
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 myOptionsExample = new BarcodeReaderOptions()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection() {
    new InvertFilter(),
    },
};

//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample1.png", myOptionsExample);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("invert.png");
Imports IronBarCode

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

'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample1.png", myOptionsExample)

'  Exportar archivo a disco
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()
{
    //  Elija los filtros que deben aplicarse (por orden)
    ImageFilters = new ImageFilterCollection()
    {
        new SharpenFilter((float)3.5),
        new ContrastFilter(2)
    },
};
//  Aplicar opciones y leer el código de barras
BarcodeResults results = BarcodeReader.Read("sample.png", options);

//  Exportar archivo a disco
results.ExportFilterImagesToDisk("filteredSample.png");

//  Escribe el valor del resultado en la consola
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(CSng(3.5)),
		New ContrastFilter(2)
	}
}
'  Aplicar opciones y leer el código de barras
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

'  Exportar archivo a disco
results.ExportFilterImagesToDisk("filteredSample.png")

'  Escribe el valor del resultado en la consola
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
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.

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.