Cómo usar Filtros de Corrección de Imágenes Para Código de Barras Usando C#

Uso de filtros de corrección de imágenes de C# para mejorar la decodificación de códigos de barras

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

Seamos honestos. No todas las imágenes son perfectas, y también es uno de los factores principales por los que una imagen de código de barras no puede ser leída por IronBarcode. Esto no es completamente culpa del usuario. En lugar de pasar por el tedio de volver a capturar la imagen o usar otro software de mejora de imágenes, IronBarcode ha ideado una característica que permite a los usuarios aplicar filtros a la imagen programáticamente. Esto ayudaría a IronBarcode a leer la imagen y mejorar la precisión.

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

Inicio rápido: Aplicar filtros de agudización y contraste para mejorar la lectura de códigos de barras

En solo un paso, aplica los filtros SharpenFilter y ContrastFilter de IronBarcode utilizando la ImageFilterCollection en BarcodeReaderOptions. Esto te proporciona una mejora en el escaneo de códigos de barras con una configuración mínima y sin necesidad de herramientas externas.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronBarcode con el gestor de paquetes NuGet

    PM > Install-Package BarCode

  2. Copie y ejecute este fragmento de código.

    BarcodeResults results = IronBarCode.BarcodeReader.Read("input.png", new IronBarCode.BarcodeReaderOptions { ImageFilters = new IronBarCode.ImageFilterCollection() { new IronBarCode.SharpenFilter(3.5f), new IronBarCode.ContrastFilter(2.0f) } });
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronBarcode en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

Usar filtros de imagen para mejorar el ejemplo de lectura

Para aplicar el filtro, instancia la clase ImageFilterCollection y crea instancias de cada filtro individualmente. Luego asigna el objeto a la propiedad ImageFilters del objeto BarcodeReaderOptions. Pasa el objeto de opciones al método Read junto con la imagen de muestra.

Usemos la imagen a continuación como nuestra imagen de muestra.

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 filtro de agudización y el filtro de contraste para mejorar la legibilidad del código de barras. Consulta el fragmento de código a continuación 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
$vbLabelText   $csharpLabel

Del 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 las imágenes de muestra y las filtradas se puede ver a continuación.

Imagen de muestra
Muestra filtrada

Explorar 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 necesitarán entender cómo funcionan estos filtros para seleccionar el filtro adecuado y evitar problemas de rendimiento debido al uso de demasiados filtros o al uso del filtro incorrecto. A continuación se listan los filtros disponibles:

  • Filtro de umbral adaptativo
  • Filtro de umbral binario
  • Filtro de brillo
  • Filtro de contraste
  • Filtro de inversión
  • Filtro de afilado
  • Filtro de erosión
  • Filtro de dilatación
  • Filtro de ecualización del histograma
  • Filtros de desenfoque
    • Filtro de desenfoque gaussiano
    • Filtro bilateral
    • Filtro de desenfoque mediano

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

Filtro de umbral adaptativo

Filtro de umbral adaptativo es uno de los filtros disponibles en IronBarcode que aplica la técnica Umbral adaptativo de 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")
$vbLabelText   $csharpLabel

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

Default Adaptive Threshold
0.9 Adaptive Threshold

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

  • Upper: Color superior (blanco) para el umbral.
  • Lower: Color inferior (negro) para el umbral.
  • Threshold: Límite de umbral (0.0-1.0) para la binarización.
  • Rectángulo: Región en la que aplicar el procesador.

Como se ve en la imagen de salida anterior, la imagen está binarizada para tener solo colores negro y blanco. Si bien todavía no parece ser ideal para la lectura de códigos de barras, ya que los filtros deben usarse en combinaciones. Los usuarios necesitarán experimentar con la sensibilidad de los parámetros para lograr los mejores resultados.

Filtro de umbral binario

El Filtro de umbral binario filtra una imagen dividiendo los píxeles en el umbral dado, donde se usa para comparar la luminancia de un componente de color. Similar al Filtro de umbral adaptativo, este filtro puede introducir ruido nuevo o no deseado si no se utiliza correctamente. Sin embargo, IronBarcode ha establecido valores predeterminados para las propiedades del filtro.

Similar al Filtro de umbral adaptativo, el Filtro de umbral binario acepta los mismos parámetros adicionales para la configuración:

  • Upper: Color superior (blanco) para el umbral.
  • Lower: Color inferior (negro) para el umbral.
  • Threshold: Límite de umbral (0.0-1.0) para la binarización.
  • Rectángulo: Región en 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")
$vbLabelText   $csharpLabel

A continuación se muestra el ejemplo de salida de aplicar filtros a la imagen de muestra.

Default Binary Threshold
0.9 Binary Threshold

Observando la imagen de salida anterior, podemos ver que la muestra se ha binarizado en color negro y blanco. Sin embargo, se puede ver que claramente este filtro no es adecuado para esta imagen debido a que las barras del código de barras también se eliminan así como algo de ruido nuevo es introducido.

Filtro de brillo

.Filtro de brillo es otro filtro esencial en la colección de filtros de imágenes 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, lo que deja la imagen sin cambios. Un valor de 0 creará una imagen completamente negra, mientras que los valores por encima de 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")
$vbLabelText   $csharpLabel

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

Default Brightness
1.5 Brightness

Filtro de contraste

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

El valor por defecto es 1, lo que deja la imagen sin cambios. Un valor de 0 creará una imagen completamente gris, mientras que los valores por encima de 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")
$vbLabelText   $csharpLabel

Aplicar este filtro a la entrada de muestra producirá la imagen abajo.

Default Contrast
1.5 Contrast

Filtro de inversión

Este filtro se usa para invertir los colores dentro de una imagen, haciendo que los colores opuestos, como el blanco se conviertan en negro y el negro se convierta en blanco. Es particularmente útil cuando los usuarios están tratando de leer una imagen de código de barras con un color de fondo. A diferencia del Filtro de umbral binario, este filtro invierte los colores directamente sin la necesidad de especificar sensibilidad. Además, este filtro se puede usar con un CropRectangle para especificar la ubicación en la imagen que necesita que el color sea invertido, en lugar de invertir los colores para 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")
$vbLabelText   $csharpLabel

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

Imagen original
Invertido

Filtro de nitidez

También proporcionamos un filtro de agudización en IronBarcode. Este filtro mejora la nitidez de una imagen y es muy útil al tratar con imágenes borrosas. Los usuarios pueden manipular este filtro para ajustar la nitidez de una imagen ajustando el valor de Sigma al instanciar el objeto del filtro. El valor por defecto es 3. Aumenta el valor 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")
$vbLabelText   $csharpLabel

Image below is the sharpened version of the sample input image.

Default Sharpen
0.5 Sharpen

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

Filtro de erosión

El Filtro de erosión elimina el pequeño ruido blanco y engruesa las barras de los códigos de barras eliminando los píxeles cerca del borde de las formas. Este filtro se usa mejor en escenarios donde el fondo del código de barras tiene mucho ruido blanco o si la imagen del código de barras en sí tiene una resolución demasiado baja o está borroso, resultando en algunas barras que están unidas. El Filtro de erosión tiene el efecto de hacer las barras más gruesas al mismo tiempo que elimina las manchas blancas en el fondo.

Los usuarios también pueden aumentar el efecto de la erosión ingresando un número entero que represente kernelSize para el filtro. Cuanto mayor sea el tamaño del kernel, más fuerte será el efecto en la imagen de entrada. También hay que tener en cuenta que el kernelSize es un cuadrado y en este ejemplo, sería un kernel de 5x5.

Como ejemplo, usemos el Filtro de erosión con un tamaño de kernel más grande para mostrar los efectos del filtro.

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

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

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

// Export file to disk
results.ExportFilterImagesToDisk("erodeFilter.jpg");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel
Imagen original
Invertido

Comparando las imágenes de entrada y salida anteriores, podemos ver que algunas barras son visiblemente más gruesas debido a la naturaleza más agresiva de ingresar un tamaño de kernel más grande para filtrar. Sin embargo, las manchas blancas en la imagen general han disminuido. Por la naturaleza del filtro de erosión, cuanto mayor sea el tamaño del kernel, podrías encontrar problemas borrando barras delgadas si se aplica de manera muy agresiva, como se ve en la imagen anterior, por lo tanto, los desarrolladores deberían probar y refinar el efecto que desean cambiando el valor del tamaño del kernel que ingresan al Filtro de erosión.

Filtro de dilatación

El filtro de dilatación funciona como el inverso del filtro de erosión, operando al expandir regiones brillantes — generalmente el fondo — mediante la adición de píxeles a las fronteras de los objetos. Si bien este filtro es útil para reparar códigos de barras dañados o débiles al llenar pequeños espacios o mejorar áreas de bajo contraste, es importante señalar que su efecto en las barras del código de barras difiere de la intuición. Dado que la dilatación agranda los espacios brillantes, indirectamente adelgaza los elementos oscuros como las barras negras de los códigos de barras (asumiendo que es un fondo blanco). Esto hace que el filtro sea particularmente efectivo en escenarios donde las barras del código de barras parecen excesivamente gruesas o unidas, pero un uso excesivo puede degradar la precisión del escaneo al adelgazarlas de manera excesiva.

Similar a lo anterior, los usuarios pueden aumentar el efecto del filtro ingresando un valor entero que represente el kernelSize para el filtro.

Para el ejemplo a continuación, utilizaremos un tamaño de kernel más grande para mostrar los efectos del filtro de dilatación.

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

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

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

// Export file to disk
results.ExportFilterImagesToDisk("dilateFilter.jpg");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel
Imagen original
Invertido

Como puedes ver en la imagen anterior, el uso agresivo del filtro de dilatación puede potencialmente destruir la estructura del código de barras, fusionar barras cercanas y crear zonas silenciosas en los códigos de barras. Los usuarios deberían probar y refinar los efectos que desean en la imagen cambiando el valor del tamaño del kernel para ser más grande o más pequeño, dependiendo de la imagen de entrada.

Filtro de ecualización de histograma

El filtro de ecualización del histograma es un filtro que mejora el contraste de la imagen redistribuyendo las intensidades de los píxeles para mejorar la claridad. Se utiliza más comúnmente cuando el código de barras es de bajo contraste, como imágenes descoloridas o apagadas, o imágenes con iluminación desigual, como sombras oscuras o reflejos brillantes. Al analizar el histograma de la imagen, que es la distribución del brillo de los píxeles, redistribuye los valores de los píxeles aumentando el contraste estirando el rango de intensidad, donde los píxeles oscuros se vuelven más oscuros y los píxeles claros se vuelven más claros.

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

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

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

// Export file to disk
results.ExportFilterImagesToDisk("histogramEqualizationFilter.jpg");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel
Imagen original
Invertido

Como puedes ver en la imagen anterior, las barras negras son visiblemente más oscuras, y los espacios son visiblemente más brillantes en comparación con la imagen original.

Filtros de desenfoque

Filtros de desenfoque gaussiano

El Filtro de desenfoque gaussiano se utiliza para aplicar un desenfoque gaussiano a una imagen. Este filtro se usa 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 por defecto es de 3x3 píxeles, y el valor Sigma por defecto 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 kernel para controlar el tamaño del vecindario que el filtro de desenfoque promedia.

: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")
$vbLabelText   $csharpLabel

Aplicar este filtro a la entrada de muestra producirá la imagen abajo.

Default Sharpen
Imagen de desenfoque gaussiano

Filtros bilaterales

El filtro bilateral se utiliza para suavizar imágenes mientras preserva los bordes. A diferencia de las técnicas de desenfoque simples, que afectan a todos los píxeles de manera uniforme, el filtro bilateral tiene en cuenta tanto las diferencias de color como la distancia entre píxeles, lo que lo hace efectivo para suavizado con preservación de bordes.

El método se basa en tres factores ajustables:

  • Diámetro del vecindario: Especifica el diámetro del vecindario de píxeles utilizado para el filtrado. Un diámetro más grande incluye más píxeles circundantes en el filtro. El valor por defecto es 5.
  • SigmaColor: Esto representa la influencia del color. Determina cuánto afecta el color la diferencia entre píxeles vecinos al filtrado. Un valor más alto significa que los píxeles con colores diferentes se influirán más entre sí. El valor por defecto 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 alejados se influirán más entre sí. El valor por defecto 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")
$vbLabelText   $csharpLabel

Aplicar este filtro a la entrada de muestra produce la imagen a continuación.

Default Sharpen
Imagen bilateral

Filtros de desenfoque medio

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

  • Tamaño del kernel: 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 por defecto 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")
$vbLabelText   $csharpLabel

Aplicar este filtro a la entrada de muestra produce la imagen a continuación.

Default Sharpen
Imagen de desenfoque medio

Guardar iteraciones

Al aplicar múltiples filtros al código de barras, puede ser difícil ver la salida después de cada método de filtro. Esta función permite guardar la imagen filtrada después de que se aplique cada filtro, en el orden en que se procesan. Para habilitar esta función, primero pasa true al constructor de ImageFilterCollection. Luego, usa 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")
$vbLabelText   $csharpLabel

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

  • Agudización -> Después de Agudización
  • Agudización + Umbral adaptativo -> Después de Umbral adaptativo
  • Agudización + Umbral adaptativo + Contraste -> Después de Contraste
Imagen de muestra
1.5 Contrast
Imagen de muestra
1.5 Contrast

Además de las propiedades ImageFilters, los usuarios también pueden agregar otras propiedades a BarcodeReaderOptions para una lectura más precisa; consulta este artículo para más información.

Preguntas Frecuentes

¿Cómo puedo mejorar la legibilidad del código de barras en .NET C#?

Puede mejorar la legibilidad del código de barras en .NET C# aplicando filtros de corrección de imagen usando IronBarcode. Estos filtros, como AdaptiveThresholdFilter y BrightnessFilter, pueden abordar imperfecciones de la imagen y mejorar la precisión del escaneo de códigos de barras.

¿Cuáles son los pasos para aplicar filtros de corrección de imagen programáticamente?

Para aplicar filtros de corrección de imagen programáticamente con IronBarcode, debe descargar la biblioteca, instanciar la clase ImageFilterCollection, configurar sus filtros deseados y aplicarlos a través de BarcodeReaderOptions antes de procesar la imagen del código de barras.

¿Qué filtros están disponibles para mejorar la calidad de imagen en IronBarcode?

IronBarcode proporciona una variedad de filtros para mejorar la calidad de imagen, incluyendo AdaptiveThresholdFilter, BinaryThresholdFilter, BrightnessFilter, ContrastFilter, InvertFilter, SharpenFilter y varios filtros de desenfoque como GaussianBlurFilter y BilateralFilter.

¿Cómo configuro el filtro de umbral adaptativo en C#?

En IronBarcode, el AdaptiveThresholdFilter puede configurarse utilizando la técnica del umbral adaptativo de Bradley. Este filtro determina automáticamente el umbral para binarizar una imagen, particularmente útil para condiciones de iluminación desiguales.

¿Es posible guardar imágenes en cada paso de filtrado?

Sí, IronBarcode le permite guardar imágenes en cada paso de filtrado habilitando el guardado de iteración en el ImageFilterCollection y usando el método ExportFilterImagesToDisk.

¿Qué consideraciones deben hacerse al aplicar múltiples filtros?

Al aplicar múltiples filtros en IronBarcode, es importante evitar usar demasiados o filtros inapropiados, ya que esto puede introducir ruido o afectar el rendimiento. Comprender la función de cada filtro ayuda a aplicar solo los necesarios para obtener resultados óptimos.

¿Cómo afecta el filtro de enfoque una imagen?

El SharpenFilter en IronBarcode mejora la claridad de la imagen ajustando la nitidez. Puede configurarse con un valor de Sigma y es útil para mejorar la definición de los bordes en imágenes de códigos de barras.

¿Cuál es el papel del filtro invertido en el procesamiento de códigos de barras?

El InvertFilter en IronBarcode invierte los colores de la imagen, convirtiendo el blanco en negro y el negro en blanco. Esto es particularmente útil para códigos de barras con esquemas de colores o fondos no estándar.

¿Cómo mejoran los filtros de desenfoque Gaussiano y Bilateral el procesamiento de imágenes?

En IronBarcode, el GaussianBlurFilter reduce el ruido de la imagen aplicando un desenfoque gaussiano, mientras que el BilateralFilter suaviza las imágenes preservando los bordes, considerando tanto las diferencias de color como la distancia entre píxeles.

Hairil Hasyimi Bin Omar
Ingeniero de Software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está refinando su conocimiento de C#, Python y Java, usando ese conocimiento para agregar valor a los miembros del equipo en Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA en Malasia, donde se ...
Leer más
¿Listo para empezar?
Nuget Descargas 1,979,979 | Version: 2025.11 recién lanzado