Comment utiliser les filtres de correction d'image

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

par Hairil Hasyimi Bin Omar

Ne nous voilons pas la face. Toutes les images ne sont pas parfaites, et c'est aussi l'un des principaux facteurs qui font qu'une image de code-barres ne peut pas être lue par IronBarcode. Ce n'est pas entièrement la faute de l'utilisateur. Au lieu d'avoir à recapturer l'image ou d'utiliser d'autres logiciels d'amélioration de l'image, IronBarcode a mis au point une fonction 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.

Poursuivez votre lecture pour découvrir les filtres de correction d'image disponibles dans IronBarcode, leurs effets sur les images et la manière de les appliquer.

Bibliothèque NuGet C# pour

Installer avec NuGet

Install-Package BarCode
ou
Java PDF JAR

Télécharger DLL

Télécharger la DLL

Installation manuelle dans votre projet

Bibliothèque NuGet C# pour

Installer avec NuGet

Install-Package BarCode
ou
Java PDF JAR

Télécharger DLL

Télécharger la DLL

Installation manuelle dans votre projet

Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Découvrez IronBarcode sur NuGet pour une installation rapide et un déploiement facile. Avec plus de 8 millions de téléchargements, il transforme avec C#.

Bibliothèque NuGet C# pour nuget.org/packages/BarCode/
Install-Package BarCode

Envisagez d'installer le IronBarcode DLL directement. Téléchargez et installez-le manuellement pour votre projet ou sous forme de GAC : {{lienDllAfficher}}

Installation manuelle dans votre projet

Télécharger la DLL

Utiliser des 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. Assignez ensuite l'objet à la propriété ImageFilters de l'objet BarcodeReaderOptions. passer l'objet options dans la méthode Read avec l'échantillon d'image.

Utilisons l'image ci-dessous comme exemple d'image.

Exemple d'image

À première vue, l'image semble assez floue. Cependant, la luminosité est acceptable et les couleurs blanche et noire sont bien distinctes. Par conséquent, nous devons appliquer au moins les filtres SharpenFilter et ContrastFilter pour améliorer la lisibilité des codes-barres. Reportez-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);

// 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
VB   C#

Dans l'extrait de code ci-dessus, outre l'application de filtres et la lecture du code-barres, nous avons également exporté l'image filtrée vers le disque. La comparaison entre l'échantillon et les images filtrées est illustrée ci-dessous.

Exemple d'image
Échantillon filtré

Explorer les filtres de correction d'image

IronBarcode propose plusieurs filtres d'image spécialement conçus pour la correction d'image. Ces filtres peuvent aider à lire des images de codes-barres imparfaites et à améliorer la précision de la lecture. Toutefois, les utilisateurs devront comprendre le fonctionnement de ces filtres afin de pouvoir

sélectionner le filtre approprié et éviter les problèmes de performance dus à l'utilisation d'une trop grande quantité de filtre ou à l'utilisation d'un mauvais filtre. Vous trouverez ci-dessous tous les filtres disponibles :

  • Filtre à seuil adaptatif
  • Filtre à seuil binaire
  • Filtre de luminosité
  • Filtre de contraste
  • InvertFilter
  • Filtre d'affinage

    L'ordre dans lequel ces filtres sont appliqués est basé sur leur emplacement dans la ImageFilterCollection.

Filtre à seuil adaptatif

AdaptiveThresholdFilter est l'un des filtres disponibles dans IronBarcode qui s'applique Seuil adaptatif Bradley à l'image, qui détermine automatiquement le seuil de binarisation d'une image. Ce filtre est idéal pour les images présentant un éclairage non uniforme et des niveaux d'intensité d'arrière-plan 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")
VB   C#

Vous trouverez ci-dessous les résultats de l'application du filtre en utilisant différentes valeurs.

Seuil d'adaptation par défaut
0.9 Seuil adaptatif

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

  • Supérieure : Supérieure (blanc) couleur pour le seuillage.
  • Inférieur : Plus bas (noir) couleur pour le seuillage.
  • Seuil : Seuil limite (0.0-1.0) à prendre en compte pour la binarisation.
  • Rectangle : Région rectangulaire sur laquelle appliquer le processeur.

    Comme le montre l'image de sortie ci-dessus, l'image est binarisée pour n'avoir que les couleurs noir et blanc. Il ne semble toutefois pas idéal pour la lecture des codes-barres, car les filtres doivent être utilisés en combinaison. Les utilisateurs devront expérimenter la sensibilité des paramètres pour obtenir les meilleurs résultats.

Filtre à seuil binaire

Le BinaryThresholdFilter filtre une image en divisant les pixels au seuil donné, où il est utilisé pour comparer la luminance d'une composante de couleur. Comme le filtre AdaptiveThresholdFilter, ce filtre peut introduire des bruits nouveaux ou indésirables s'il n'est pas utilisé correctement. Cependant, IronBarcode a défini des valeurs par défaut pour les propriétés du filtre.

Comme le filtre AdaptiveThresholdFilter, le filtre BinaryThresholdFilter accepte les mêmes paramètres supplémentaires pour la configuration.

  • Supérieure : Supérieure (blanc) couleur pour le seuillage.
  • Inférieur : Plus bas (noir) couleur pour le seuillage.
  • Seuil : Seuil limite (0.0-1.0) à prendre en compte pour la binarisation.
  • Rectangle : Région rectangulaire sur laquelle appliquer le processeur.
: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")
VB   C#

Vous trouverez ci-dessous un exemple de résultat de l'application de filtres à l'image d'exemple.

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 noir et blanc. Cependant, on peut constater que ce filtre n'est clairement pas adapté à cette image en raison de l'élimination des barres du code-barres et de l'introduction d'un nouveau bruit.

Filtre de luminosité

BrightnessFilter est un autre filtre essentiel dans la collection de filtres d'images d'IronBarcode. Comme son nom l'indique, ce filtre ajuste la luminosité de l'image du code-barres. L'entrée de ce constructeur peut faire varier la Montée de la 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 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")
VB   C#

Voici l'image de sortie après application de ce filtre à l'échantillon d'entrée.

Luminosité par défaut
1.5 Luminosité

Filtre de contraste

Le filtre Contraste permet de régler le niveau de contraste d'une image. Le contraste de l'image fait référence à la différence d'intensité des couleurs entre les différents éléments d'une image. L'augmentation du niveau de contraste améliore la visibilité des détails, rendant l'image vivante et frappante, tandis que la réduction du contraste rend l'image plus douce et plus terne.

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

: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")
VB   C#

L'application de ce filtre à l'entrée de l'échantillon produit l'image ci-dessous.

Contraste par défaut
1.5 Contraste

Inverser le filtre

Ce filtre est utilisé pour inverser les couleurs à l'intérieur d'une image, en rendant les couleurs opposées, comme le blanc devient noir et le noir devient blanc. Il 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 directement les couleurs sans qu'il soit nécessaire de spécifier la sensibilité. De plus, ce filtre peut être utilisé avec un CropRectangle pour spécifier l'endroit de l'image où la couleur doit être inversée, au lieu d'inverser les couleurs de l'image entière.

: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")
VB   C#

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

Image originale
Inversé

Filtre de netteté

Le dernier filtre de correction d'image dans IronBarcode est le SharpenFilter. Ce filtre améliore la netteté d'une image et est très utile pour les 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 filtre. La valeur par défaut est 3. Augmentez les valeurs sigma pour améliorer 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()
    {
        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
VB   C#

L'image ci-dessous est la aiguisé de l'échantillon d'image d'entrée.

Accentuation par défaut
0.5 Aiguiser

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

En dehors de Filtres d'images les utilisateurs peuvent également ajouter d'autres propriétés dans BarcodeReaderOptions pour une lecture plus précise, voir ceci article pour plus d'informations.

Hairil Hasyimi Bin Omar

Ingénieur logiciel

Comme tous les grands ingénieurs, Hairil est un fervent apprenant. Il affine ses connaissances en C#, Python et Java, et les utilise pour apporter une valeur ajoutée aux membres de l'équipe d'Iron Software. Hairil a rejoint l'équipe d'Iron Software en provenance de l'Universiti Teknologi MARA en Malaisie, où il a obtenu une licence en génie chimique et des procédés.