Jak używać filtrów korekcji obrazów dla kodów kreskowych w C#

Wykorzystanie filtrów korekcji obrazu w języku C# do poprawy dekodowania BarCode

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

IronBarcode dostarcza wbudowane filtry korekcji obrazu jak SharpenFilter i ContrastFilter, które programowo poprawiają rozmyte lub niedoskonałe obrazy kodów kreskowych, zwiększając dokładność odczytu bez potrzeby używania zewnętrznych programów do edycji obrazów czy ponownego przechwytywania obrazów.

Nie każdy obraz jest idealny, a słaba jakość obrazu jest jednym z głównych czynników uniemożliwiających pomyślne odczytanie kodów kreskowych w IronBarcode. Zamiast ponownego przechwytywania obrazów lub korzystania z zewnętrznego oprogramowania do poprawy jakości obrazu, IronBarcode oferuje wbudowane filtry, które programowo poprawiają jakość obrazu. Filtry te pomagają IronBarcode odczytywać trudne obrazy i poprawiają ogólną dokładność.

Czytaj dalej, aby dowiedzieć się więcej o filtrach korekcji obrazu dostępnych w IronBarcode, ich wpływie na obrazy oraz o tym, jak je stosować. Aby zapoznać się z bardziej kompleksowymi technikami odczytu kodów kreskowych, zapoznaj się z naszym samouczkiem Odczyt kodów kreskowych.

Szybki start: Zastosuj filtry wyostrzania i kontrastu, aby poprawić odczyty BarCode-ów

W zaledwie jednym kroku zastosuj SharpenFilter i ContrastFilter z IronBarcode przy użyciu ImageFilterCollection w BarcodeReaderOptions. Usprawnia skanowanie kodów kreskowych przy minimalnej konfiguracji i bez konieczności korzystania z narzędzi zewnętrznych.

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode
  2. Skopiuj i uruchom ten fragment kodu.

    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. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak zastosować filtry obrazu, aby poprawić odczyt BarCode'ów?

Aby zastosować filtry, utwórz instancję klasy ImageFilterCollection i utwórz instancje każdego filtra osobno. Następnie przypisz obiekt do właściwości ImageFilters obiektu BarcodeReaderOptions. Przekaż obiekt z opcjami do metody Read wraz z przykładowym obrazem. Aby zapoznać się z zaawansowanymi opcjami instalacji, odwiedź nasz przewodnik po pakietach NuGet.

Jako przykładowy obrazek użyj poniższego obrazka.

Blurred barcode with number 4900203187590 showing poor image quality before filtering enhancement

Obraz wydaje się dość rozmyty. Jednak jasność jest akceptowalna, a kolory biały i czarny są rozróżnialne. W związku z tym należy zastosować co najmniej filtry SharpenFilter i ContrastFilter, aby poprawić czytelność BarCodes. Zapoznaj się z poniższym fragmentem kodu, aby zastosować filtry do obrazu, odczytać go i wyświetlić wyniki w konsoli.

: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

Powyższy fragment kodu stosuje filtry, odczytuje BARCODE i eksportuje przefiltrowany obraz na dysk. Poniżej przedstawiono porównanie obrazów przykładowych i przefiltrowanych.

Blurry barcode image with number 4902030187590 demonstrating poor image quality
Barcode with improved readability after applying image filters, showing clear vertical lines and number 4902030187590

Jakie filtry korekcji obrazu są dostępne w IronBarcode?

IronBarcode oferuje wiele filtrów obrazu zaprojektowanych specjalnie do korekcji obrazów. Filtry te pomagają w odczytywaniu niedoskonałych obrazów BarCode i zwiększają dokładność odczytu. Należy jednak zrozumieć, jak działają te filtry, aby wybrać odpowiednie i uniknąć problemów z wydajnością wynikających z użycia zbyt wielu filtrów lub użycia niewłaściwego filtra. Dostępne filtry obejmują:

  • AdaptiveThresholdFilter
  • BinaryThresholdFilter
  • BrightnessFilter
  • ContrastFilter
  • InvertFilter
  • SharpenFilter
  • ErodeFilter
  • DilateFilter
  • HistogramEqualizationFilter
  • Filtry rozmycia
    • GaussianBlurFilter
    • BilateralFilter
    • MedianBlurFilter

Kolejność stosowania filtrów zależy od ich umieszczenia w kolekcji ImageFilterCollection. Szczegółowa dokumentacja API dotycząca tych filtrów znajduje się w naszym przewodniku API.

Jak działa filtr adaptacyjnego progu?

AdaptiveThresholdFilter to filtr dostępny w IronBarcode, który stosuje technikę Bradley Adaptive Threshold do obrazu, automatycznie określając próg binarizacji obrazu. Ten filtr jest idealny do obrazów o nierównomiernym oświetleniu i zmiennym poziomie intensywności tła.

: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

Poniżej znajdują się wyniki zastosowania filtra przy użyciu różnych wartości.

Vertical lines showing different adaptive threshold filter outputs with solid and dashed patterns
Low-quality barcode image showing UPC number 902030187590 with significant visual distortion

Konstruktor akceptuje dodatkowe parametry konfiguracyjne:

  • Upper: Górny (biały) kolor do progowania.
  • Lower: Dolny (czarny) kolor do progowania.
  • Threshold: Limit progu (0.0-1.0) do binaryzacji.
  • Rectangle: Obszar prostokątny do zastosowania procesora.

Jak widać na powyższym obrazku, obraz został zbinaryzowany, tak aby zawierał wyłącznie kolory czarny i biały. Chociaż nadal nie wydaje się to idealnym rozwiązaniem do odczytu BarCodes, filtry należy stosować w kombinacjach. Aby uzyskać najlepsze wyniki, należy eksperymentować z czułością parametrów.

Jak działa filtr progu binarnego?

BinaryThresholdFilter filtruje obraz, dzieląc piksele przy określonym progu, porównując luminancję składowej koloru. Podobnie jak w przypadku AdaptiveThresholdFilter, ten filtr może wprowadzać nowe lub niepożądane zakłócenia, jeśli nie jest używany prawidłowo. Jednak firma IronBarcode ustaliła domyślne wartości właściwości filtrów.

Podobnie jak w przypadku AdaptiveThresholdFilter, BinaryThresholdFilter akceptuje te same dodatkowe parametry do konfiguracji:

  • Upper: Górny (biały) kolor do progowania.
  • Lower: Dolny (czarny) kolor do progowania.
  • Threshold: Limit progu (0.0-1.0) do binaryzacji.
  • Rectangle: Obszar prostokątny do zastosowania procesora.
: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

Poniżej znajduje się przykładowy wynik zastosowania filtrów do przykładowego obrazu.

Three examples of binary threshold filter outputs showing sparse, dotted, and dense vertical line patterns
Barcode image processed with 0.9 binary threshold filter showing black and white contrast

Jak widać na powyższym obrazku, próbka została przekształcona na czarno-białą. Jednak ten filtr wyraźnie nie nadaje się do tego obrazu, ponieważ paski BARCODE zostały usunięte, a pojawiły się nowe zakłócenia. W przypadku trudnych sytuacji związanych z barcode'ami zapoznaj się z naszym przewodnikiem dotyczącym rozwiązywania problemów z nierozpoznanymi barcode'ami.

Jak dostosować jasność obrazu, aby poprawić odczyt BarCode'ów?

BrightnessFilter to kolejny niezbędny filtr w kolekcji filtrów obrazu w IronBarcode. Jak sugeruje nazwa, filtr ten reguluje jasność obrazu BarCode. Dane wejściowe tego konstruktora zmieniają poziom jasności obrazu wyjściowego. Wartością domyślną jest 1, co pozostawia obraz bez zmian. Wartość 0 tworzy całkowicie czarny obraz, natomiast wartości powyżej 1 rozjaśniają obraz.

: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

Poniżej znajduje się obrazek wynikowy po zastosowaniu tego filtra do przykładowego danych wejściowych.

Blurry UPC barcode sample showing default brightness level before filter enhancement
Blurry barcode with product number 4902030187590, demonstrating low brightness or poor image quality

Jak używać filtra kontrastu do poprawiania jakości obrazów BarCode?

ContrastFilter dostosowuje poziom kontrastu obrazu. Kontrast obrazu odnosi się do różnicy w intensywności kolorów między różnymi elementami obrazu. Zwiększenie poziomu kontrastu poprawia widoczność szczegółów, sprawiając, że obraz wydaje się żywy i wyrazisty, natomiast zmniejszenie kontrastu sprawia, że obraz wydaje się bardziej miękki i stonowany. Aby uzyskać więcej informacji na temat dostosowywania kodów kreskowych, zapoznaj się z naszym przewodnikiem dotyczącym dostosowywania stylów kodów kreskowych.

Wartością domyślną jest 1, co pozostawia obraz bez zmian. Wartość 0 tworzy całkowicie szary obraz, natomiast wartości powyżej 1 zwiększają kontrast obrazu.

: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

Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.

Blurry barcode with number 4902030187590 demonstrating default contrast filter settings
Blurry barcode with number 4902030187590 demonstrating low contrast image quality

Kiedy należy używać filtra odwrócenia?

Ten filtr odwraca kolory wewnątrz obrazu, zamieniając je na przeciwne, np. biel staje się czernią, a czerń bielą. Jest to szczególnie przydatne podczas odczytywania obrazu BarCode z kolorowym tłem. W przeciwieństwie do BinaryThresholdFilter, ten filtr odwraca kolory bezpośrednio, bez konieczności określania czułości. Ponadto filtr ten można używać z CropRectangle w celu określenia miejsca na obrazie, w którym należy odwrócić kolory, zamiast odwracać kolory na całym obrazie. Dowiedz się więcej o określaniu obszarów przycięcia w naszym samouczku dotyczącym obszarów przycięcia.

: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

Poniższy obrazek jest wynikiem zastosowania tego filtra do przykładowego obrazka wejściowego.

Blurry UPC barcode showing number 480203187590 - original image before invert filter application
Blurry inverted barcode showing white bars on dark background with number sequence 4902030187590

Jak poprawić rozmyte obrazy BarCode za pomocą filtra wyostrzającego?

IronBarcode udostępnia filtr wyostrzający. Ten filtr poprawia ostrość obrazu i jest bardzo przydatny w przypadku rozmytych zdjęć. Manipuluj tym filtrem, aby dostosować ostrość obrazu poprzez zmianę wartości Sigma podczas instancjonowania obiektu filtru. Wartość domyślna to 3. Zwiększ wartość sigmy, aby zwiększyć ostrość obrazu. Aby zapoznać się z innymi opcjami optymalizacji wydajności, zapoznaj się z naszym przewodnikiem dotyczącym opcji szybkości czytania.

: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

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

Blurry barcode image demonstrating unsharpened quality before applying sharpen filter
Blurred barcode example showing effects of image quality degradation

Porównując powyższy obrazek z oryginalnym, widać, że jest on ostrzejszy i ułatwia odczyt BARCODE-ów za pomocą IronBarcode. W większości przypadków SharpenFilter jest zawsze stosowany wraz z innymi filtrami w klasie ImageFilterCollection.

Do czego służy filtr Erode?

Filtr ErodeFilter usuwa drobny szum i pogrubia kreski BarCode poprzez usuwanie pikseli w pobliżu krawędzi kształtów. Filtr ten najlepiej sprawdza się w sytuacjach, gdy tło BarCode zawiera wiele białych plamek lub gdy obraz BarCode ma zbyt niską rozdzielczość lub jest rozmyty, co powoduje zlewanie się kresek. ErodeFilter pogrubia paski, jednocześnie usuwając białe plamki w tle. Więcej informacji na temat postępowania z niedoskonałymi obrazami można znaleźć w naszym przykładzie dotyczącym niedoskonałych BARCODE-ów.

Zwiększ efekt erozji, wprowadzając liczbę całkowitą reprezentującą kernelSize dla filtra. Im większy rozmiar jądra, tym silniejszy efekt na obrazie wejściowym. Zauważ, że kernelSize jest kwadratem i w tym przykładzie byłby jądrem 5x5.

Jako przykład użyj filtru ErodeFilter z większym rozmiarem jądra, aby zaprezentować działanie filtra.

: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");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New ErodeFilter(5)
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("erodeFilter.jpg")
$vbLabelText   $csharpLabel
Blurry barcode showing number 4002030187590 - example for erode filter demonstration
Blurred barcode showing vertical black and white stripes with numerical code

Porównując powyższe obrazy wejściowe i wyjściowe, niektóre paski są wyraźnie grubsze ze względu na bardziej agresywny charakter filtrowania przy użyciu większego rozmiaru jądra. Jednak białe plamki na całym obrazie zmniejszyły się. Ze względu na charakter filtra erozji, im większy rozmiar jądra, tym większe ryzyko usunięcia cienkich pasków w przypadku zbyt agresywnego zastosowania, jak pokazano na powyższym obrazku. Sprawdź i dopracuj efekt, zmieniając wartość rozmiaru jądra wprowadzaną do ErodeFilter.

W jaki sposób filtr Dilate pomaga w odczytywaniu BarCodes?

Funkcja DilateFilter działa jako odwrotność funkcji ErodeFilter, rozszerzając jasne obszary — zazwyczaj tło — poprzez dodanie pikseli do granic obiektów. Chociaż filtr ten naprawia uszkodzone lub słabo widoczne BARCODE-y poprzez wypełnianie niewielkich luk lub wzmacnianie obszarów o niskim kontraście, należy pamiętać, że jego wpływ na kreski BARCODE-a różni się od tego, czego można by się intuicyjnie spodziewać. Ponieważ rozszerzenie powiększa jasne obszary, pośrednio rozrzedza ciemne elementy, takie jak czarne paski BARCODE (przy założeniu białego tła). Dzięki temu filtr jest szczególnie skuteczny w sytuacjach, gdy kreski BarCode'a wydają się zbyt grube lub połączone, ale nadmierne stosowanie może obniżyć dokładność skanowania poprzez zbytnie zwężenie kresek.

Podobnie jak powyżej, zwiększ efekt filtra, wprowadzając liczbę całkowitą reprezentującą kernelSize dla filtra.

W poniższym przykładzie użyj większego rozmiaru jądra, aby pokazać działanie filtra 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");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New DilateFilter(5)
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("dilateFilter.jpg")
$vbLabelText   $csharpLabel
Blurry barcode image showing number 4902030187590 - example for dilate filter processing
Blurred barcode with numerical sequence below vertical bars

Jak widać na powyższym obrazku, agresywne użycie DilateFilter może potencjalnie zniszczyć strukturę BARCODE, łącząc blisko położone kreski i tworząc strefy ciszy w BARCODE. Przetestuj i dopracuj efekty na obrazie, zmieniając wartość rozmiaru jądra na większą lub mniejszą, w zależności od obrazu wejściowego.

Kiedy należy używać filtra HistogramEqualization?

Filtr HistogramEqualizationFilter poprawia kontrast obrazu poprzez redystrybucję intensywności pikseli w celu zwiększenia wyrazistości. Najczęściej stosuje się go, gdy BARCODE ma niski kontrast, np. w przypadku wyblakłych lub wyblakłych obrazów, lub obrazów o nierównomiernym oświetleniu, takich jak ciemne cienie lub jasne odblaski. Analizując histogram obrazu, czyli rozkład jasności pikseli, redystrybuuje wartości pikseli poprzez zwiększenie kontrastu poprzez rozszerzenie zakresu intensywności, gdzie ciemne piksele stają się ciemniejsze, a jasne piksele stają się jaśniejsze.

: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");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New HistogramEqualizationFilter()
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("histogramEqualizationFilter.jpg")
$vbLabelText   $csharpLabel
Blurry barcode with number 4902030187590 used as test image for histogram equalization filter
Barcode with vertical black and white stripes showing number 4902030187590

Jak widać na powyższym obrazku, czarne paski są wyraźnie ciemniejsze, a przestrzenie wyraźnie jaśniejsze w porównaniu z oryginalnym obrazem.

Które filtry rozmycia mogą pomóc w redukcji szumów w BarCode?

W jaki sposób filtr GaussianBlur redukuje szumy w obrazie?

Filtr GaussianBlurFilter nakłada rozmycie gaussowskie na obraz. Ten filtr zazwyczaj redukuje szumy na obrazie. Aby uzyskać kompleksowy przewodnik dotyczący postępowania z niedoskonałymi BARCODAMI, zapoznaj się z naszym samouczkiem dotyczącym korekcji orientacji obrazu.

Filtr działa poprzez uśrednianie wartości sąsiednich pikseli w obrazie przy użyciu funkcji Gaussa. Metoda opiera się na dwóch regulowanych czynnikach:

  • Kernel: macierz używana do uśredniania pikseli.
  • Sigma: wartość kontrolująca intensywność rozmycia.

Domyślny rozmiar kernel to 3x3 pikseli, a domyślna wartość Sigma to 3.0, co zapewnia umiarkowane rozmycie. Zwiększenie wartości Sigma skutkuje silniejszym efektem rozmycia. Możesz również dostosować kernel, aby kontrolować rozmiar sąsiedztwa, które filtr rozmycia uśrednia.

: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

Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.

Blurry barcode with number 4902030187590 demonstrating poor image quality
Barcode image with Gaussian blur filter applied, showing blurred vertical lines and distorted numbers

Kiedy powinienem użyć filtra bilateralnego?

BilateralFilter wygładza obrazy, jednocześnie zachowując krawędzie. W przeciwieństwie do prostych technik rozmycia dotyczących wszystkich pikseli jednolicie, Filtr Bilateralny uwzględnia zarówno różnice kolorów, jak i odległość pikseli, co czyni go skutecznym w wygładzaniu z zachowaniem krawędzi.

Metoda opiera się na trzech regulowanych czynnikach:

  • NeighborhoodDiameter: Średnica sąsiedztwa pikseli (domyślnie: 5).
  • SigmaColor: Wpływ koloru określający oddziaływanie różnicy kolorów (domyślnie: 75.0).
  • SigmaSpace: Wpływ przestrzenny określający oddziaływanie odległości (domyślnie: 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

Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.

Blurred barcode demonstrating poor image quality with vertical lines and numbers 4902030187590
Blurred barcode with numbers 4902030187590 demonstrating poor image quality

Co sprawia, że filtr MedianBlur jest inny dla redukcji szumów?

MedianBlurFilter redukuje szum w obrazie, zastępując wartość każdego piksela medianą wartości sąsiednich pikseli. Ten filtr szczególnie dobrze radzi sobie z zachowaniem krawędzi podczas usuwania szumów. Aby dowiedzieć się więcej o ustawieniach odczytu kodów kreskowych, odwiedź nasz przewodnik po ustawieniach odczytu kodów kreskowych.

  • KernelSize: Rozmiar sąsiedztwa do obliczeń median (musi być nieparzysty, domyślnie: 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

Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.

Blurry barcode example showing poor image quality with digital artifacts and reduced readability
Barcode with median blur filter applied showing blurred vertical lines and number 4902030187590

Jak mogę zapisywać filtrowane obrazy na każdym etapie przetwarzania?

Gdy stosujesz wiele filtrów do kodu kreskowego, przeglądanie wyników po każdej metodzie filtra może być trudne. Ta funkcja pozwala na zapisywanie filtrowanego obrazu po każdym zastosowaniu filtra, w kolejności, w jakiej są przetwarzane. Aby włączyć tę funkcję, najpierw przekaż true do konstruktora ImageFilterCollection. Następnie użyj metody ExportFilterImagesToDisk, aby podać ścieżkę i nazwę dla obrazów wynikowych. Aby uzyskać więcej przykładów na temat zapisywania kodów kreskowych, zobacz nasz przykład konwersji kodu kreskowego na obraz.

: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

Filtry są stosowane w kolejności określonej przez kod, a obrazy wynikowe odzwierciedlają wyniki każdej iteracji:

  • Sharpen -> Po Sharpen
  • Sharpen + AdaptiveThreshold -> Po AdaptiveThreshold
  • Sharpen + AdaptiveThreshold + Contrast -> Po Contrast
Blurry barcode with number 4902030187590
Blurry UPC barcode showing number 4902030187590
Degraded barcode example showing poor image quality with number 9020301875905
Heavily pixelated barcode with UPC number 902030187590

Oprócz właściwości ImageFilters dodaj inne właściwości do BarcodeReaderOptions dla dokładniejszego odczytu; zobacz ten artykuł po więcej informacji.

Często Zadawane Pytania

Czym są filtry korekcji obrazu i dlaczego są potrzebne do odczytu kodów kreskowych?

Filtry korekcji obrazu w IronBarcode to wbudowane narzędzia, które programowo poprawiają rozmyte lub niedoskonałe obrazy kodów kreskowych. Są niezbędne, ponieważ zła jakość obrazu jest jednym z głównych czynników uniemożliwiających udany odczyt kodów kreskowych. IronBarcode oferuje filtry, takie jak SharpenFilter i ContrastFilter, które poprawiają dokładność odczytu bez użycia zewnętrznego oprogramowania do edycji obrazów lub ponownego uchwycenia obrazów.

Jak stosować filtry korekcji obrazu, aby poprawić skanowanie kodów kreskowych?

Aby zastosować filtry w IronBarcode, utwórz instancję ImageFilterCollection i dodaj do niej pojedyncze instancje filtrów. Następnie przypisz tę kolekcję do właściwości ImageFilters w BarcodeReaderOptions i przekaż ją do metody Read. Na przykład: new BarcodeReaderOptions { ImageFilters = new ImageFilterCollection() { new SharpenFilter(3.5f), new ContrastFilter(2.0f) } }.

Jakie filtry obrazów są zalecane dla rozmytych obrazów kodów kreskowych?

W przypadku rozmytych obrazów BarCode firma IronBarcode zaleca stosowanie przynajmniej filtrów SharpenFilter i ContrastFilter. Filtr SharpenFilter poprawia wyrazistość krawędzi na rozmytych obrazach, natomiast filtr ContrastFilter zwiększa kontrast między jasnymi a ciemnymi obszarami. Filtry te działają wspólnie, aby uczynić BarCode bardziej czytelnym bez konieczności zewnętrznej obróbki obrazu.

Czy mogę dostosować siłę działania filtrów korekcji obrazu?

Tak, IronBarcode pozwala skonfigurować każdy filtr z niestandardowymi wartościami. Na przykład filtr SharpenFilter akceptuje parametr typu float (np. 3.5f) do sterowania intensywnością wyostrzania, a filtr ContrastFilter akceptuje parametr (np. 2.0f) do regulacji poziomów kontrastu. Ta personalizacja pomaga zoptymalizować skuteczność filtrów dla różnych warunków obrazu.

Czy potrzebuję zewnętrznych narzędzi do edycji obrazów, aby poprawić jakość obrazów BARCODE-ów?

Nie, IronBarcode eliminuje potrzebę korzystania z zewnętrznych narzędzi do edycji obrazów, oferując wbudowane filtry korekcji obrazu. Te programowe filtry, takie jak SharpenFilter i ContrastFilter, mogą poprawiać jakość obrazu bezpośrednio w aplikacji .NET, oszczędzając czas i pozwalając uniknąć zależności od oprogramowania innych firm.

Hairil Hasyimi Bin Omar
Inżynier oprogramowania
Jak wszyscy wielcy inżynierowie, Hairil jest zapalonym uczniem. Doskonali swoją wiedzę na temat C#, Pythona i Javy, wykorzystując tę wiedzę, aby dodawać wartości członkom zespołu Iron Software. Hairil dołączył do zespołu Iron Software z Universiti Teknologi MARA w Malezji, gdzie uzyskał tytuł licencjata ...
Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 2,145,441 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package BarCode
uruchom przykład zobacz, jak twoje ciągi zamieniają się w kody kreskowe.