Wykorzystanie filtrów korekcji obrazu w języku C# do poprawy dekodowania BarCode
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.
-
Install IronBarcode with NuGet Package Manager
PM > Install-Package BarCode -
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) } }); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Pobierz bibliotekę C#, aby korzystać z filtrów korekcji obrazu
- Poznaj wszystkie dostępne filtry korekcji obrazu
- Skonfiguruj każdy filtr z niestandardowymi wartościami
- Zastosuj filtry do niedoskonałych przykładów obrazów
- Pobieranie wartości BarCode z ulepszonych obrazów
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.
Przykładowy obrazek
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
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.
Przykładowy obrazek
Przefiltrowana próbka
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ą:
AdaptiveThresholdFilterBinaryThresholdFilterBrightnessFilterContrastFilterInvertFilterSharpenFilterErodeFilterDilateFilterHistogramEqualizationFilter- Filtry rozmycia
GaussianBlurFilterBilateralFilterMedianBlurFilter
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")
Poniżej znajdują się wyniki zastosowania filtra przy użyciu różnych wartości.
Wartość domyślna
Wartość 0,9
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")
Poniżej znajduje się przykładowy wynik zastosowania filtrów do przykładowego obrazu.
Wartość domyślna
Wartość 0,9
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")
Poniżej znajduje się obrazek wynikowy po zastosowaniu tego filtra do przykładowego danych wejściowych.
Wartość domyślna
1.5 wartość
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")
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
Wartość domyślna
1.5 wartość
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")
Poniższy obrazek jest wynikiem zastosowania tego filtra do przykładowego obrazka wejściowego.
Oryginalny obraz
Odwrócone
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")
The image below is the sharpened version of the sample input image.
Wartość domyślna
Wartość 0,5
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")
Oryginalny obraz
Zastosowano filtr Erode
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")
Oryginalny obraz
Zastosowano filtr rozszerzenia
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")
Oryginalny obraz
Zastosowano filtr wyrównujący histogram
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")
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
Wyostrzenie obrazu
Obraz GaussianBlur
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")
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
Wyostrzenie obrazu
Obraz Bilateral
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")
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
Wyostrzenie obrazu
Obraz MedianBlur
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")
Filtry są stosowane w kolejności określonej przez kod, a obrazy wynikowe odzwierciedlają wyniki każdej iteracji:
Sharpen-> PoSharpenSharpen+AdaptiveThreshold-> PoAdaptiveThresholdSharpen+AdaptiveThreshold+Contrast-> PoContrast
Przykładowy obrazek
Po wyostrzeniu
Po progowaniu adaptacyjnym
Po kontrastowaniu
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.

