Comment utiliser des filtres de correction d'image pour le code-barres en utilisant C#

How to use Image Correction Filters

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

Admettons-le. Toutes les images ne sont pas parfaites, et c'est aussi l'un des principaux facteurs qui empêche une image de code-barres d'être lue par IronBarcode. Cela n'est pas entièrement la faute de l'utilisateur. Au lieu de passer par la peine de reprendre l'image ou d'utiliser d'autres logiciels d'amélioration d'image, IronBarcode a proposé une fonctionnalité qui permet aux utilisateurs d'appliquer des filtres à l'image de manière programmatique. Cela aiderait IronBarcode à lire l'image et à améliorer la précision.

Continuez à lire pour en savoir plus sur les filtres de correction d'image disponibles dans IronBarcode, leurs effets sur les images et comment les appliquer.

en-tête :2(Démarrage rapide: Appliquer les filtres d'accentuation et de contraste pour améliorer les lectures de code-barres)

En une seule étape, appliquez les filtres SharpenFilter et ContrastFilter de IronBarcode en utilisant la ImageFilterCollection dans BarcodeReaderOptions. Cela vous permet d'améliorer la numérisation des codes-barres avec un minimum de configuration et sans besoin d'outils externes.

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. Copy and run this code snippet.

    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. Deploy to test on your live environment

    Start using IronBarcode in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

Flux de travail minimal (5 étapes)

  1. Téléchargez la bibliothèque C# pour utiliser les filtres de correction d'image
  2. Explorez tous les filtres de correction d'image disponibles
  3. Configurez chaque filtre de correction d'image avec des valeurs personnalisées
  4. Appliquez les filtres à l'échantillon d'image imparfaite
  5. Récupérez la valeur du code-barres de l'image à l'aide des filtres

Utiliser les filtres d'image pour améliorer l'exemple de lecture

Pour appliquer le filtre, instanciez la classe ImageFilterCollection et créez des instances de chaque filtre individuellement. Ensuite, assignez l'objet à la propriété ImageFilters de l'objet BarcodeReaderOptions. Passez l'objet options dans la méthode Read avec l'image d'échantillon.

Utilisons l'image ci-dessous comme notre image d'échantillon.

class="content-img-align-center">
class="center-image-wrapper"> Image d'échantillon

Au premier regard de l'image, elle semble assez floue. Cependant, la luminosité est acceptable, et les couleurs blanche et noire sont distinguables. Par conséquent, nous devons appliquer au moins le SharpenFilter et le ContrastFilter pour améliorer la lisibilité du code-barres. Référez-vous à l'extrait de code ci-dessous pour appliquer les filtres à l'image, la lire et l'afficher sur la console.

: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

À partir de l'extrait de code ci-dessus, en plus d'appliquer les filtres et de lire le code-barres, nous avons également exporté l'image filtrée sur disque. La comparaison entre les images d'échantillon et filtrée peut être vue ci-dessous.

class="competitors-section__wrapper-even-1">
Image d'échantillon
Echantillon filtré

Explorer les filtres de correction d'image

IronBarcode propose plusieurs filtres d'image spécifiquement conçus pour la correction d'image. Ces filtres peuvent aider à lire des images de code-barres imparfaites et à améliorer la précision de lecture. Cependant, les utilisateurs devront comprendre comment ces filtres fonctionnent afin de sélectionner le filtre approprié et éviter les problèmes de performance dus à l'utilisation de trop de filtres ou de l'utilisation d'un filtre incorrect. Ci-dessous se trouvent tous les filtres disponibles :

  • AdaptiveThresholdFilter
  • BinaryThresholdFilter
  • BrightnessFilter
  • ContrastFilter
  • InvertFilter
  • SharpenFilter
  • ErodeFilter
  • DilateFilter
  • HistogramEqualizationFilter
  • Blur Filters
    • GaussianBlurFilter
    • BilateralFilter
    • MedianBlurFilter

L'ordre dans lequel ces filtres sont appliqués est basé sur leur placement à l'intérieur de la ImageFilterCollection.

Filtre de seuil adaptatif

AdaptiveThresholdFilter est un des filtres disponibles dans IronBarcode qui applique la technique Bradley Adaptive Threshold à l'image, ce qui détermine automatiquement le seuil pour binariser une image. Ce filtre est idéal pour les images avec un éclairage non uniforme et des niveaux d'intensité de fond 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

Ci-dessous sont les résultats de l'application du filtre en utilisant différentes valeurs.

class="competitors-section__wrapper-even-1">
Seuil adaptatif par défaut
0.9 seuil adaptatif

Le constructeur accepte également des paramètres supplémentaires pour la configuration :

  • Upper : Couleur supérieure (blanc) pour le seuillage.
  • Lower : Couleur inférieure (noir) pour le seuillage.
  • Threshold : Limite de seuil (0.0-1.0) pour la binarisation.
  • Rectangle : Région rectangle pour appliquer le processeur.

Comme vous pouvez le voir dans l'image de sortie ci-dessus, l'image est binarisée pour n'avoir que des couleurs noires et blanches. Bien qu'elle ne semble toujours pas idéale pour la lecture de code-barres, car des filtres doivent être utilisés en combinaisons. Les utilisateurs devront expérimenter avec la sensibilité des paramètres pour obtenir les meilleurs résultats.

Filtre de seuil binaire

Le BinaryThresholdFilter filtre une image en séparant les pixels au seuil donné, où il est utilisé pour comparer la luminance d'un composant couleur. Similaire au AdaptiveThresholdFilter, ce filtre peut introduire de nouveaux bruits non désirés s'il n'est pas utilisé correctement. Cependant, IronBarcode a défini des valeurs par défaut pour les propriétés du filtre.

Similaire au AdaptiveThresholdFilter, le BinaryThresholdFilter accepte les mêmes paramètres supplémentaires pour la configuration :

  • Upper : Couleur supérieure (blanc) pour le seuillage.
  • Lower : Couleur inférieure (noir) pour le seuillage.
  • Threshold : Limite de seuil (0.0-1.0) pour la binarisation.
  • Rectangle : Région rectangle pour appliquer le processeur.
: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

Ci-dessous est l'exemple de sortie de l'application des filtres à l'image d'exemple.

class="competitors-section__wrapper-even-1">
Seuil binaire par défaut
0.9 Seuil binaire

En observant l'image de sortie ci-dessus, nous pouvons voir que l'échantillon a été binarisé en couleurs noire et blanche. Cependant, nous pouvons voir que ce filtre n'est clairement pas adapté à cette image car les barres du code-barres ont été éliminées ainsi que certains nouveaux bruits introduits.

Filtre de luminosité

BrightnessFilter est un autre filtre essentiel dans la collection de filtres d'image dans IronBarcode. Comme son nom l'indique, ce filtre ajuste la luminosité de l'image de code-barres. L'entrée de ce constructeur peut varier la Quantité de luminosité dans l'image de sortie. La valeur par défaut est 1, ce qui laisse l'image inchangée. Une valeur de 0 créera une image complètement noire, tandis que des valeurs supérieures à 1 rendront l'image plus lumineuse.

: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

Ci-dessous l'image de sortie après avoir appliqué ce filtre à l'entrée d'échantillon.

class="competitors-section__wrapper-even-1">
Luminosité par défaut
1.5 Luminosité

Filtre de contraste

Le ContrastFilter est utilisé pour ajuster le niveau de contraste dans une image. Le contraste d'image se réfère à la différence d'intensité de couleur entre divers éléments d'une image. Augmenter le niveau de contraste améliore la visibilité des détails, rendant l'image plus vive et frappante, tandis que réduire le contraste rend l'image plus douce et plus atténuée.

La valeur par défaut est 1, ce qui laisse l'image inchangée. Une valeur de 0 créera une image complètement grise, tandis que des valeurs supérieures à 1 augmenteront le contraste de l'image.

: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

Appliquer ce filtre à l'entrée d'échantillon produira l'image ci-dessous.

class="competitors-section__wrapper-even-1">
Contraste par défaut
1.5 Contraste

Filtre d'inversion

Ce filtre est utilisé pour inverser les couleurs dans une image, rendant les couleurs opposées, comme le blanc devient noir et le noir devient blanc. C'est particulièrement utile lorsque les utilisateurs essaient de lire une image de code-barres avec une couleur de fond. Contrairement au BinaryThresholdFilter, ce filtre inverse les couleurs directement sans avoir besoin de spécifier la sensibilité. De plus, ce filtre peut être utilisé avec un CropRectangle pour spécifier l'emplacement dans l'image où la couleur doit être inversée, au lieu d'inverser les couleurs pour l'ensemble de l'image.

: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

L'image de sortie ci-dessous est le résultat de l'application de ce filtre à l'image d'entrée d'échantillon.

class="competitors-section__wrapper-even-1">
Image originale
Inversée

Filtre d'accentuation

Nous fournissons également un filtre d'accentuation dans IronBarcode. Ce filtre améliore la netteté d'une image, ce qui est très utile lorsqu'il s'agit d'images floues. Les utilisateurs peuvent manipuler ce filtre pour ajuster la netteté d'une image en ajustant la valeur Sigma lors de l'instanciation de l'objet de filtre. La valeur par défaut est 3. Augmentez la valeur sigma pour augmenter la netteté de l'image.

: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.

class="competitors-section__wrapper-even-1">
Accentuation par défaut
0.5 Accentuation

En comparant l'image ci-dessus avec l'image originale, elle semble plus nette et aiderait certainement à la lecture de code-barres en utilisant IronBarcode. Dans la plupart des cas, SharpenFilter est toujours appliqué avec d'autres filtres dans la classe ImageFilterCollection.

Filtre d'érosion

Le ErodeFilter élimine les petits bruits blancs et épaissit les barres de code-barres en supprimant les pixels près du bord des formes. Ce filtre est mieux utilisé dans des scénarios où le fond du code-barres a beaucoup de taches blanches ou si l'image du code-barres elle-même est de basse résolution ou floue, entraînant certaines barres fusionnées. Le ErodeFilter a pour effet d'épaissir les barres tout en éliminant les taches blanches dans le fond.

Les utilisateurs peuvent également augmenter l'effet d'érosion en saisissant un entier représentant kernelSize pour le filtre. Plus la taille du noyau est grande, plus l'effet sur l'image d'entrée est fort. Notez également que le kernelSize est un carré et, dans cet exemple, ce serait un noyau 5x5.

À titre d'exemple, utilisons le ErodeFilter avec une taille de noyau plus grande pour montrer les effets du filtre.

: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
class="competitors-section__wrapper-even-1">
Image originale
Inversée

En comparant les images d'entrée et de sortie ci-dessus, nous pouvons voir que certaines barres sont visiblement plus épaisses en raison de la nature plus agressive de l'entrée d'une plus grande taille de noyau à filtrer. Cependant, le nombre de taches blanches dans l'image globale a diminué. En raison de la nature du filtre d'érosion, plus la taille du noyau est grande, plus vous pouvez rencontrer des problèmes d'effacement des barres fines si appliqué de manière trop agressive, comme montré dans l'image ci-dessus. Ainsi, les développeurs montrent tester et affiner l'effet qu'ils souhaitent obtenir en modifiant la valeur taille du noyau qu'ils saisissent dans le ErodeFilter.

Filtre de dilatation

Le DilateFilter fonctionne comme l'inverse du ErodeFilter, opérant en élargissant les régions brillantes - généralement l'arrière-plan - par l'ajout de pixels aux contours des objets. Bien que ce filtre soit utile pour réparer les codes-barres endommagés ou faibles en comblant de petits écarts ou en améliorant les zones faiblement contrastées, il est important de noter que son effet sur les barres de code-barres diffère de l'intuition. Puisque la dilatation agrandit les espaces brillants, elle amincit indirectement les éléments sombres tels que les barres de code-barres noir (en supposant qu'il s'agit d'un fond blanc). Cela rend le filtre particulièrement efficace dans les scénarios où les barres de code-barres semblent trop épaisses ou fusionnées, mais une utilisation excessive peut dégrader la précision de numérisation en rétrécissant de manière excessive les barres.

Similaire à ci-dessus, les utilisateurs peuvent augmenter l'effet du filtre en saisissant un entier représentant le kernelSize pour le filtre.

Pour l'exemple ci-dessous, nous allons utiliser une taille de noyau plus grande pour montrer les effets du DilateFilter.

: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
class="competitors-section__wrapper-even-1">
Image originale
Inversée

Comme vous pouvez le voir sur l'image ci-dessus, l'utilisation agressive du DilateFilter peut potentiellement détruire la structure du code-barres, en fusionnant des barres étroitement espacées et en créant des zones silencieuses dans les codes-barres. Les utilisateurs devraient tester et affiner les effets qu'ils souhaitent obtenir sur l'image en modifiant la valeur taille du noyau pour être plus grande ou plus petite, selon l'image d'entrée.

Filtre d'égalisation d'histogramme

Le HistogramEqualizationFilter est un filtre qui améliore le contraste de l'image en redistribuant les intensités des pixels pour améliorer la clarté. Il est le plus couramment utilisé lorsque le code-barres est soit de faible contraste, comme les images floues ou délavées, ou les images avec un éclairage inégal, comme des ombres sombres ou une forte éblouissement. En analysant l'histogramme de l'image, qui est la distribution de la luminosité des pixels, il redistribue les valeurs de pixels en augmentant le contraste en étirant la plage d'intensité, où les pixels sombres deviennent plus sombres et les pixels clairs deviennent plus clairs.

: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
class="competitors-section__wrapper-even-1">
Image originale
Inversée

Comme vous pouvez le voir sur l'image ci-dessus, les barres noires sont visiblement plus sombres, et les espaces sont visiblement plus lumineux par rapport à l'image originale.

Filtres de flou

Filtres de Flou Gaussien

Le GaussianBlurFilter est utilisé pour appliquer un flou gaussien à une image. Ce filtre est couramment utilisé pour réduire le bruit dans une image.

Le filtre fonctionne en moyennant les valeurs de pixels voisins dans l'image à l'aide d'une fonction gaussienne. La méthode repose sur deux facteurs ajustables :

  • Noyau : une matrice utilisée pour moyenniser les pixels.
  • Sigma : une valeur qui contrôle l'intensité du flou.

La taille du noyau par défaut est de 3x3 pixels, et la valeur Sigma par défaut est de 3.0, ce qui produit un flou modéré. Augmenter la valeur Sigma se traduira par un effet de flou plus fort. Vous pouvez également personnaliser le noyau pour contrôler la taille du voisinage que le filtre de flou moyenne.

: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

Appliquer ce filtre à l'entrée d'échantillon produira l'image ci-dessous.

class="competitors-section__wrapper-even-1">
Image d'accentuation par défaut
Image de flou gaussien

Filtres bilatéraux

Le BilateralFilter est utilisé pour lisser les images tout en préservant les contours. Contrairement aux techniques de flou simples, qui affectent tous les pixels uniformément, le filtre bilatéral prend en compte à la fois les différences de couleur et la distance entre les pixels, ce qui le rend efficace pour le lissage avec préservation des contours.

La méthode repose sur trois facteurs ajustables :

  • Diamètre du voisinage : Spécifie le diamètre du voisinage de pixels utilisé pour le filtrage. Un diamètre plus grand inclut plus de pixels environnants dans le filtre. La valeur par défaut est 5.
  • SigmaCouleur : Cela représente l'influence de la couleur. Il détermine à quel point la différence de couleur entre les pixels voisins affecte le filtrage. Une valeur plus élevée signifie que les pixels de différentes couleurs s'influenceront davantage. La valeur par défaut est 75.0.
  • SigmaEspace : Cela représente l'influence spatiale. Il détermine à quel point la distance entre les pixels affecte le filtrage. Une valeur plus élevée signifie que les pixels plus éloignés s'influenceront davantage. La valeur par défaut est 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

Appliquer ce filtre à l'entrée d'échantillon produit l'image ci-dessous.

class="competitors-section__wrapper-even-1">
Image d'accentuation par défaut
Image bilatérale

Filtres de flou médian

Le MedianBlurFilter est un filtre utilisé pour réduire le bruit dans une image en remplaçant la valeur de chaque pixel par la valeur médiane des pixels environnants. Ce filtre est particulièrement efficace pour préserver les contours tout en supprimant le bruit.

  • Taille du noyau : Définit la taille du voisinage autour de chaque pixel utilisé pour calculer la médiane. The value must be an odd number greater than 0. La valeur par défaut est 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

Appliquer ce filtre à l'entrée d'échantillon produit l'image ci-dessous.

class="competitors-section__wrapper-even-1">
Image d'accentuation par défaut
Image de flou médian

Sauvegarder les itérations

Lorsque vous appliquez plusieurs filtres au code-barres, il peut être difficile de visualiser la sortie après chaque méthode de filtre. Cette fonctionnalité permet de sauvegarder l'image filtrée après chaque application de filtre, dans l'ordre où ils sont traités. Pour activer cette fonctionnalité, passez d'abord true au constructeur ImageFilterCollection. Ensuite, utilisez la méthode ExportFilterImagesToDisk pour fournir le chemin et le nom des images de sortie.

: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

Les filtres sont appliqués dans l'ordre du code, et les images de sortie reflètent les résultats de chaque itération :

  • Sharpen -> Après Sharpen
  • Sharpen + Seuil adaptatif -> Après Seuil adaptatif
  • Sharpen + Seuil adaptatif + Contraste -> Après Contraste
Image d'échantillon
1.5 Contraste
class="competitors-section__wrapper-even-1">
Image d'échantillon
1.5 Contraste

En plus des propriétés ImageFilters, les utilisateurs peuvent également ajouter d'autres propriétés à BarcodeReaderOptions pour une lecture plus précise ; voir cet article pour plus d'informations.

Questions Fréquemment Posées

Comment puis-je améliorer la lisibilité des codes-barres dans .NET C# ?

Vous pouvez améliorer la lisibilité des codes-barres dans .NET C# en appliquant des filtres de correction d'image avec IronBarcode. Ces filtres, tels que AdaptiveThresholdFilter et BrightnessFilter, peuvent résoudre les imperfections d'image et améliorer la précision de la numérisation des codes-barres.

Quelles sont les étapes pour appliquer des filtres de correction d'image par programmation ?

Pour appliquer des filtres de correction d'image par programmation avec IronBarcode, vous devez télécharger la bibliothèque, instancier la classe ImageFilterCollection, configurer vos filtres souhaités, et les appliquer via BarcodeReaderOptions avant de traiter l'image du code-barres.

Quels filtres sont disponibles pour améliorer la qualité d'image dans IronBarcode ?

IronBarcode propose une variété de filtres pour améliorer la qualité d'image, y compris AdaptiveThresholdFilter, BinaryThresholdFilter, BrightnessFilter, ContrastFilter, InvertFilter, SharpenFilter, et plusieurs filtres de flou comme GaussianBlurFilter et BilateralFilter.

Comment configurer le filtre de seuil adaptatif en C# ?

Dans IronBarcode, le AdaptiveThresholdFilter peut être configuré en utilisant la technique de seuil adaptatif de Bradley. Ce filtre détermine automatiquement le seuil pour binariser une image, particulièrement utile dans des conditions d'éclairage inégales.

Est-il possible de sauvegarder des images à chaque étape du filtrage ?

Oui, IronBarcode vous permet de sauvegarder des images à chaque étape du filtrage en activant la sauvegarde par itération dans ImageFilterCollection et en utilisant la méthode ExportFilterImagesToDisk.

Quelles considérations doivent être prises en compte lors de l'application de plusieurs filtres ?

Lors de l'application de plusieurs filtres dans IronBarcode, il est important d'éviter d'utiliser trop de filtres ou des filtres inappropriés, car cela peut introduire du bruit ou affecter les performances. Comprendre la fonction de chaque filtre aide à n'appliquer que ceux qui sont nécessaires pour des résultats optimaux.

Comment le Sharpen Filter affecte-t-il une image ?

Le SharpenFilter dans IronBarcode améliore la clarté de l'image en ajustant la netteté. Il peut être configuré avec une valeur de Sigma et est utile pour améliorer la définition des contours dans les images de codes-barres.

Quel est le rôle du filtre Invert dans le traitement des codes-barres ?

Le InvertFilter dans IronBarcode inverse les couleurs de l'image, rendant le blanc noir et le noir blanc. Ceci est particulièrement utile pour les codes-barres avec des schémas de couleur ou des arrière-plans non standard.

Comment les filtres de flou gaussien et bilatéral améliorent-ils le traitement des images ?

Dans IronBarcode, le GaussianBlurFilter réduit le bruit de l'image en appliquant un flou gaussien, tandis que le BilateralFilter lisse les images tout en préservant les bords, en tenant compte à la fois des différences de couleur et de la distance des pixels.

Hairil Hasyimi Bin Omar
Ingénieur logiciel
Comme tous les grands ingénieurs, Hairil est un apprenant avide. Il affine ses connaissances en C#, Python et Java, utilisant ces connaissances pour apporter de la valeur aux membres de l'équipe dans toute Iron Software. Hairil a rejoint l'équipe d'Iron Software depuis l'Université Teknologi MARA en Malaisie, ...
Lire la suite
Prêt à commencer?
Nuget Téléchargements 1,935,276 | Version : 2025.11 vient de sortir