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 zapewnia wbudowane filtry korekcji obrazu, takie jak SharpenFilter i ContrastFilter, które programowo poprawiają rozmyte lub niedoskonałe obrazy kodów kreskowych, poprawiając dokładność odczytu bez potrzeby korzystania z zewnętrznego oprogramowania do edycji obrazów lub przechwytywania obrazów na nowo.

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 IronBarcode's SharpenFilter i ContrastFilter, używając 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, zainicjuj klasę ImageFilterCollection i utwórz instancje każdego filtra indywidualnie. Następnie przypisz obiekt do właściwości ImageFilters obiektu BarcodeReaderOptions. Przekaż obiekt opcji do metody Read razem 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.

Rozmyty kod kreskowy z numerem 4900203187590 pokazujący słabą jakość obrazu przed poprawą filtrowania

Obraz wydaje się dość rozmyty. Jednak jasność jest akceptowalna, a kolory biały i czarny są rozróżnialne. Dlatego zastosuj co najmniej SharpenFilter i ContrastFilter, aby poprawić czytelność kodu kreskowego. 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.

Rozmyty obraz kodu kreskowego z numerem 4902030187590 demonstrujący słabą jakość obrazu
Kod kreskowy o poprawionej czytelności po zastosowaniu filtrów obrazu, pokazujący wyraźne pionowe linie i numer 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ść, w jakiej filtry są stosowane, zależy od ich umiejscowienia wewnątrz 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, która automatycznie ustala próg do binaryzacji 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.

Pionowe linie przedstawiające różne wyniki filtra progu adaptacyjnego z wzorami ciągłymi i przerywanymi
Niskiej jakości obraz kodu kreskowego przedstawiający numer UPC 902030187590 ze znacznymi zniekształceniami wizualnymi

Konstruktor akceptuje dodatkowe parametry konfiguracyjne:

  • Upper: Górny (biały) kolor dla progowania.
  • Lower: Dolny (czarny) kolor dla progowania.
  • Threshold: Limit progu (0.0-1.0) dla binaryzacji.
  • Rectangle: Obszar prostokątny, na który ma zostać zastosowany procesor.

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?

Filtr BinaryThresholdFilter filtruje obraz, rozdzielając piksele w podanym progu, porównując luminancję elementu kolorowego. Podobnie jak AdaptiveThresholdFilter, ten filtr może wprowadzać nowe lub niepożądane szumy, 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 AdaptiveThresholdFilter, BinaryThresholdFilter akceptuje te same dodatkowe parametry konfiguracji:

  • Upper: Górny (biały) kolor dla progowania.
  • Lower: Dolny (czarny) kolor dla progowania.
  • Threshold: Limit progu (0.0-1.0) dla binaryzacji.
  • Rectangle: Obszar prostokątny, na który ma zostać zastosowany procesor.
: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.

Trzy przykłady wyników filtra progu binarnego przedstawiające rzadkie, kropkowane i gęste wzory pionowych linii
Obraz kodu kreskowego przetworzony filtrem progu binarnego 0.9 pokazujący kontrast czerni i bieli

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 konstruktóra 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
Rozmyty kod kreskowy z numerem produktu 4902030187590, demonstrujący niską jasność lub słabą jakość obrazu

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

ContrastFilter reguluje poziom kontrastu na obrazie. 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.

Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący domyślne ustawienia filtra kontrastu
Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący niski kontrast obrazu

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 bez potrzeby 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.

Rozmyty kod kreskowy UPC pokazujący numer 480203187590 - oryginalny obraz przed zastosowaniem filtra inwersji
Rozmyty odwrócony kod kreskowy pokazujący białe słupki na ciemnym tle z sekwencją numeryczną 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

Poniższy obrazek to wyostrzona wersja przykładowego obrazka wejściowego.

Rozmyty obraz kodu kreskowego demonstrujący nieostrą jakość przed zastosowaniem filtra wyostrzania
Przykład rozmytego kodu kreskowego pokazujący skutki pogorszenia jakości obrazu

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 razem z innymi filtrami w klasie ImageFilterCollection.

Do czego służy filtr Erode?

ErodeFilter usuwa małe zakłócenia białe i pogrubia paski kodu kreskowego, usuwając piksele w pobliżu krawędzi kształtów. Ten filtr jest najlepszy w scenariuszach, gdzie tło kodu kreskowego ma dużo białych plamek lub jeśli obraz kodu kreskowego jest zbyt niskiej rozdzielczości lub rozmyty, co skutkuje złączonymi paskami. 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. Zwróć uwagę, że kernelSize jest kwadratem i w tym przykładzie byłby to jądro 5x5.

Jako przykład, użyj ErodeFilter z większym rozmiarem jądra, aby pokazać efekty 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
Rozmyty kod kreskowy pokazujący numer 4002030187590 - przykład demonstracji filtra erozji
Rozmyty kod kreskowy pokazujący pionowe czarno-białe paski z kodem numerycznym

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. Testuj i ulepszaj efekt, zmieniając wartość rozmiaru jądra wprowadzoną do ErodeFilter.

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

DilateFilter funkcjonuje jako odwrotność ErodeFilter, działając poprzez rozbudowę jasnych obszarów—zwykle tła—poprzez dodawanie 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.

Dla przykładu poniżej, użyj większego rozmiaru jądra, aby pokazać efekty 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
Rozmyty obraz kodu kreskowego pokazujący numer 4902030187590 - przykład przetwarzania filtrem dylatacji
Rozmyty kod kreskowy z sekwencją numeryczną pod pionowymi słupkami

Jak pokazano na powyższym obrazie, agresywne użycie DilateFilter może potencjalnie zniszczyć strukturę kodu kreskowego, łącząc blisko położone paski i tworząc strefy ciche w kodach kreskowych. 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?

HistogramEqualizationFilter poprawia kontrast obrazu poprzez redystrybuowanie intensywności pikseli w celu poprawy czytelnoś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
Rozmyty kod kreskowy z numerem 4902030187590 użyty jako obraz testowy dla filtra wyrównania histogramu
Kod kreskowy z pionowymi czarno-białymi paskami pokazujący numer 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?

GaussianBlurFilter stosuje rozmycie Gaussa do obrazu. 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 daje 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.

Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący słabą jakość obrazu
Obraz kodu kreskowego z zastosowanym filtrem rozmycia gaussowskiego, pokazujący rozmyte pionowe linie i zniekształcone cyfry

Kiedy powinienem użyć filtra bilateralnego?

BilateralFilter wygładza obrazy przy jednoczesnym zachowaniu krawędzi. 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 wpływ różnicy kolorów (domyślnie: 75,0).
  • SigmaSpace: Wpływ przestrzenny określający wpływ 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.

Rozmyty kod kreskowy demonstrujący słabą jakość obrazu z pionowymi liniami i cyframi 4902030187590
Rozmyty kod kreskowy z cyframi 4902030187590 demonstrujący słabą jakość obrazu

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ąsiadujących 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 dla obliczenia mediany (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.

Przykład rozmytego kodu kreskowego pokazujący słabą jakość obrazu z cyfrowymi artefaktami i zmniejszoną czytelnością
Kod kreskowy z zastosowanym filtrem rozmycia medianowego pokazujący rozmyte pionowe linie i numer 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 wyjściowych. 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
Rozmyty kod kreskowy z numerem 4902030187590
Blurry UPC barcode showing number 4902030187590
Przykład zdegradowanego kodu kreskowego pokazujący słabą jakość obrazu z numerem 9020301875905
Mocno spikselowany kod kreskowy z numerem UPC 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.

Jakie są korzyści z użycia IronBarcode do operacji na kodach kreskowych?

IronBarcode oferuje korzyści takie jak łatwość integracji, wsparcie dla wielu formatów kodów kreskowych, generowanie obrazów wysokiej jakości oraz solidne możliwości odczytu, co czyni go kompleksowym narzędziem do operacji na kodach kreskowych w C#.

Czy IronBarcode oferuje wsparcie dla dostosowywania wyglądu kodów kreskowych?

Tak, IronBarcode oferuje rozległe opcje dostosowywania wyglądu kodów kreskowych, w tym kolory, rozmiar i adnotacje tekstowe, pozwalając dostosować kody kreskowe do konkretnych wymagań projektowych.

Jak IronBarcode może pomóc w poprawie efektywności procesów biznesowych?

IronBarcode zwiększa efektywność procesów biznesowych, umożliwiając szybkie i dokładne generowanie i odczyt kodów kreskowych, redukując błędy ręcznego wprowadzania danych i poprawiając śledzenie zapasów i aktywów.

Jakie umiejętności programistyczne są potrzebne do zaimplementowania IronBarcode w projekcie?

Podstawowa znajomość programowania w C# jest wystarczająca do zaimplementowania IronBarcode w projekcie, ponieważ oferuje on nieskomplikowane metody i kompleksową dokumentację do prowadzenia deweloperów.

Czy IronBarcode jest odpowiedni zarówno dla małych projektów, jak i dużych aplikacji korporacyjnych?

IronBarcode jest zaprojektowany do bycia skalowalnym i wszechstronnym, dzięki czemu jest odpowiedni zarówno dla małych projektów, jak i dużych aplikacji korporacyjnych, które wymagają solidnych rozwiązań kodów kreskowych.

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,331,688 | Wersja: 2026.7 właśnie wydany
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.