Cómo utilizar los filtros de corrección de imagen
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.
Cómo utilizar los filtros de corrección de imagen
- Descargar la biblioteca C# para utilizar filtros de corrección de imágenes
- Explora todos los filtros de corrección de imagen disponibles
- Configurar cada filtro de corrección de imagen con valores personalizados
- Aplicar los filtros a la muestra de imagen imperfecta
- Recuperar el valor del código de barras de la imagen con ayuda de filtros
Instalar con NuGet
Install-Package BarCode
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](/static-assets/barcode/how-to/image-correction/sample.webp)
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);
// Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png");
// 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)
' Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png")
' Write the result value to console
For Each result As BarcodeResult In results
Console.WriteLine(result.Text)
Next result
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](/static-assets/barcode/how-to/image-correction/sample.webp)
Imagen de muestra
![Muestra filtrada](/static-assets/barcode/how-to/image-correction/filteredSample.webp)
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()
{
// Choose which filters are to be applied (in order)
ImageFilters = new ImageFilterCollection() {
new AdaptiveThresholdFilter(0.9f),
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);
// Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
Imports IronBarCode
Private myOptionsExample As New BarcodeReaderOptions() With {
.ImageFilters = New ImageFilterCollection() From {New AdaptiveThresholdFilter(0.9F)}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)
' Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png")
A continuación se muestran los resultados de aplicar el filtro utilizando diferentes valores.
![Umbral adaptativo por defecto](/static-assets/barcode/how-to/image-correction/adaptiveThreshold.webp)
Valor por defecto
![0,9 Umbral adaptativo](/static-assets/barcode/how-to/image-correction/adaptiveThreshold_0.9.webp)
Valor 0,9
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()
{
// Choose which filters are to be applied (in order)
ImageFilters = new ImageFilterCollection() {
new BinaryThresholdFilter(0.9f)
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);
// Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
Imports IronBarCode
Private myOptionsExample As New BarcodeReaderOptions() With {
.ImageFilters = New ImageFilterCollection() From {New BinaryThresholdFilter(0.9F)}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)
' Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png")
A continuación se muestra el resultado de la aplicación de filtros a la imagen de muestra.
![Umbral binario por defecto](/static-assets/barcode/how-to/image-correction/binaryThreshold.webp)
Valor por defecto
![0,9 Umbral binario](/static-assets/barcode/how-to/image-correction/binaryThreshold_0.9.webp)
Valor 0,9
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()
{
// Choose which filters are to be applied (in order)
ImageFilters = new ImageFilterCollection() {
new BrightnessFilter(1.5f),
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);
// Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png");
Imports IronBarCode
Private myOptionsExample As New BarcodeReaderOptions() With {
.ImageFilters = New ImageFilterCollection() From {New BrightnessFilter(1.5F)}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)
' Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png")
A continuación se muestra la imagen de salida después de aplicar este filtro a la entrada de muestra.
![Brillo por defecto](/static-assets/barcode/how-to/image-correction/sample.webp)
Valor por defecto
![1,5 Brillo](/static-assets/barcode/how-to/image-correction/brightness_1.5.webp)
1,5 valor
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()
{
// Choose which filters are to be applied (in order)
ImageFilters = new ImageFilterCollection() {
new ContrastFilter(1.5f),
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", myOptionsExample);
// Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png");
Imports IronBarCode
Private myOptionsExample As New BarcodeReaderOptions() With {
.ImageFilters = New ImageFilterCollection() From {New ContrastFilter(1.5F)}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", myOptionsExample)
' Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png")
La aplicación de este filtro a la entrada de muestra producirá la imagen siguiente.
![Contraste por defecto](/static-assets/barcode/how-to/image-correction/sample.webp)
Valor por defecto
![1,5 Contraste](/static-assets/barcode/how-to/image-correction/contrast_1.5.webp)
1,5 valor
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()
{
// Choose which filters are to be applied (in order)
ImageFilters = new ImageFilterCollection() {
new InvertFilter(),
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample1.png", myOptionsExample);
// Export file to disk
results.ExportFilterImagesToDisk("invert.png");
Imports IronBarCode
Private myOptionsExample As New BarcodeReaderOptions() With {
.ImageFilters = New ImageFilterCollection() From {New InvertFilter()}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample1.png", myOptionsExample)
' Export file to disk
results.ExportFilterImagesToDisk("invert.png")
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](/static-assets/barcode/how-to/image-correction/sample.webp)
Imagen original
![Invertido](/static-assets/barcode/how-to/image-correction/invert.webp)
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()
{
new SharpenFilter((float)3.5),
new ContrastFilter(2)
},
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);
// Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png");
// 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(CSng(3.5)),
New ContrastFilter(2)
}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)
' Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png")
' Write the result value to console
For Each result As BarcodeResult In results
Console.WriteLine(result.Text)
Next result
La imagen de abajo es el afilado de la imagen de entrada de muestra.
![Enfoque por defecto](/static-assets/barcode/how-to/image-correction/sharpen.webp)
Valor por defecto
![0,5 Afilar](/static-assets/barcode/how-to/image-correction/sharpen_0.5.webp)
Valor 0,5
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.