# Wykorzystanie filtrów korekcji obrazu w języku C# do poprawy dekodowania BarCode
[IronBarcode](https://ironsoftware.com/csharp/barcode/docs/) 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](https://ironsoftware.com/csharp/barcode/tutorials/reading-barcodes/).
*as-heading:2(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.
```cs
:title=Boost Barcode Readability — Try Image Correction Now
BarcodeResults results = IronBarCode.BarcodeReader.Read("input.png", new IronBarCode.BarcodeReaderOptions { ImageFilters = new IronBarCode.ImageFilterCollection() { new IronBarCode.SharpenFilter(3.5f), new IronBarCode.ContrastFilter(2.0f) } });
```
<div class="hsg-featured-snippet">
<h3>Minimalny proces (5 kroków)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://www.nuget.org/packages/BarCode/">Pobierz bibliotekę C#, aby korzystać z filtrów korekcji obrazu</a></li>
<li>Poznaj wszystkie dostępne filtry korekcji obrazu</li>
<li>Skonfiguruj każdy filtr z niestandardowymi wartościami</li>
<li>Zastosuj filtry do niedoskonałych przykładów obrazów</li>
<li>Pobieranie wartości BarCode z ulepszonych obrazów</li>
</ol>
</div>
## 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](https://ironsoftware.com/csharp/barcode/get-started/advanced-installation-nuget/).
Jako przykładowy obrazek użyj poniższego obrazka.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy z numerem 4900203187590 pokazujący słabą jakość obrazu przed poprawą filtrowania" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic; margin-bottom: 20px;">Przykładowy obrazek</p>
</div>
</div>
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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-apply-filter.cs
```
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.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty obraz kodu kreskowego z numerem 4902030187590 demonstrujący słabą jakość obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Przykładowy obrazek</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/filteredSample.webp" alt="Kod kreskowy o poprawionej czytelności po zastosowaniu filtrów obrazu, pokazujący wyraźne pionowe linie i numer 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Przefiltrowana próbka</p>
</div>
</div>
## Jakie filtry korekcji obrazu są dostępne w IronBarcode?
IronBarcode oferuje wiele [filtrów obrazu](https://ironsoftware.com/csharp/barcode/features/filters/) 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](https://ironsoftware.com/csharp/barcode/object-reference/api/).
## Jak działa filtr adaptacyjnego progu?
`AdaptiveThresholdFilter` to filtr dostępny w IronBarcode, który stosuje technikę [Bradley Adaptive Threshold](https://saturncloud.io/blog/bradley-adaptive-thresholding-algorithm-a-powerful-tool-for-image-segmentation/#:~:text=The%20Bradley%20adaptive%20thresholding%20algorithm%2C%20proposed%20by%20Derek%20Bradley%20and,illumination%20or%20varying%20contrast%20levels.) 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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-adaptive-threshold.cs
```
Poniżej znajdują się wyniki zastosowania filtra przy użyciu różnych wartości.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/adaptiveThreshold.webp" alt="Pionowe linie przedstawiające różne wyniki filtra progu adaptacyjnego z wzorami ciągłymi i przerywanymi" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość domyślna</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/adaptiveThreshold_0.9.webp" alt="Niskiej jakości obraz kodu kreskowego przedstawiający numer UPC 902030187590 ze znacznymi zniekształceniami wizualnymi" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość 0,9</p>
</div>
</div>
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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-binary-threshold.cs
```
Poniżej znajduje się przykładowy wynik zastosowania filtrów do przykładowego obrazu.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/binaryThreshold.webp" alt="Trzy przykłady wyników filtra progu binarnego przedstawiające rzadkie, kropkowane i gęste wzory pionowych linii" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość domyślna</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/binaryThreshold_0.9.webp" alt="Obraz kodu kreskowego przetworzony filtrem progu binarnego 0.9 pokazujący kontrast czerni i bieli" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość 0,9</p>
</div>
</div>
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](https://ironsoftware.com/csharp/barcode/troubleshooting/barcode-not-recognized/).
## 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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-brightness.cs
```
Poniżej znajduje się obrazek wynikowy po zastosowaniu tego filtra do przykładowego danych wejściowych.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Blurry UPC barcode sample showing default brightness level before filter enhancement" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość domyślna</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/brightness_1.5.webp" alt="Rozmyty kod kreskowy z numerem produktu 4902030187590, demonstrujący niską jasność lub słabą jakość obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">1.5 wartość</p>
</div>
</div>
## 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](https://ironsoftware.com/csharp/barcode/how-to/customize-barcode-style/).
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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-contrast.cs
```
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący domyślne ustawienia filtra kontrastu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość domyślna</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/contrast_1.5.webp" alt="Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący niski kontrast obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">1.5 wartość</p>
</div>
</div>
## 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](https://ironsoftware.com/csharp/barcode/how-to/set-crop-region/).
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-invert.cs
```
Poniższy obrazek jest wynikiem zastosowania tego filtra do przykładowego obrazka wejściowego.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy UPC pokazujący numer 480203187590 - oryginalny obraz przed zastosowaniem filtra inwersji" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Oryginalny obraz</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/invert.webp" alt="Rozmyty odwrócony kod kreskowy pokazujący białe słupki na ciemnym tle z sekwencją numeryczną 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Odwrócone</p>
</div>
</div>
## 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](https://ironsoftware.com/csharp/barcode/how-to/reading-speed-options/).
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-sharpen.cs
```
Poniższy obrazek to *wyostrzona* wersja przykładowego obrazka wejściowego.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sharpen.webp" alt="Rozmyty obraz kodu kreskowego demonstrujący nieostrą jakość przed zastosowaniem filtra wyostrzania" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość domyślna</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sharpen_0.5.webp" alt="Przykład rozmytego kodu kreskowego pokazujący skutki pogorszenia jakości obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wartość 0,5</p>
</div>
</div>
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](https://ironsoftware.com/csharp/barcode/examples/imperfect-barcode-with-image-correction/) dotyczącym [niedoskonałych BARCODE-ów](https://ironsoftware.com/csharp/barcode/examples/imperfect-barcode-with-image-correction/).
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.
```cs
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-erode.cs
```
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy pokazujący numer 4002030187590 - przykład demonstracji filtra erozji" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Oryginalny obraz</p>
</div>
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/erodeFilter.webp" alt="Rozmyty kod kreskowy pokazujący pionowe czarno-białe paski z kodem numerycznym" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Zastosowano filtr Erode</p>
</div>
</div>
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`.
```cs
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-dilate.cs
```
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty obraz kodu kreskowego pokazujący numer 4902030187590 - przykład przetwarzania filtrem dylatacji" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Oryginalny obraz</p>
</div>
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/dilateFilter.webp" alt="Rozmyty kod kreskowy z sekwencją numeryczną pod pionowymi słupkami" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Zastosowano filtr rozszerzenia</p>
</div>
</div>
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.
```cs
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-histogram-equalization-filter.cs
```
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy z numerem 4902030187590 użyty jako obraz testowy dla filtra wyrównania histogramu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Oryginalny obraz</p>
</div>
<div class="competitors__card" style="width: 46%;">
<img src="/static-assets/barcode/how-to/image-correction/histogramEqualizationFilter.webp" alt="Kod kreskowy z pionowymi czarno-białymi paskami pokazujący numer 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Zastosowano filtr wyrównujący histogram</p>
</div>
</div>
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](https://ironsoftware.com/csharp/barcode/how-to/image-orientation-correction/).
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.
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-gaussianblur.cs
```
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sharpen.webp" alt="Rozmyty kod kreskowy z numerem 4902030187590 demonstrujący słabą jakość obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wyostrzenie obrazu</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/gaussianBlur.webp" alt="Obraz kodu kreskowego z zastosowanym filtrem rozmycia gaussowskiego, pokazujący rozmyte pionowe linie i zniekształcone cyfry" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Obraz GaussianBlur</p>
</div>
</div>
### 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).
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-bilateral.cs
```
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sharpen.webp" alt="Rozmyty kod kreskowy demonstrujący słabą jakość obrazu z pionowymi liniami i cyframi 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wyostrzenie obrazu</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/bilateral.webp" alt="Rozmyty kod kreskowy z cyframi 4902030187590 demonstrujący słabą jakość obrazu" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Obraz Bilateral</p>
</div>
</div>
### 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](https://ironsoftware.com/csharp/barcode/examples/barcode-reader-settings-csharp/).
- `KernelSize`: Rozmiar sąsiedztwa dla obliczenia mediany (musi być nieparzysty, domyślnie: 5).
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-medianblur.cs
```
Zastosowanie tego filtra do przykładowego tekstu daje obrazek poniżej.
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sharpen.webp" alt="Przykład rozmytego kodu kreskowego pokazujący słabą jakość obrazu z cyfrowymi artefaktami i zmniejszoną czytelnością" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Wyostrzenie obrazu</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/medianBlur.webp" alt="Kod kreskowy z zastosowanym filtrem rozmycia medianowego pokazujący rozmyte pionowe linie i numer 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Obraz MedianBlur</p>
</div>
</div>
## 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](https://ironsoftware.com/csharp/barcode/examples/csharp-convert-barcode-to-image/).
```csharp
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-save-iterations.cs
```
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`
<div class="competitors-section__wrapper-even-1" style="margin-bottom: 25px;">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/sample.webp" alt="Rozmyty kod kreskowy z numerem 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Przykładowy obrazek</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/filteredImage-1.webp" alt="Blurry UPC barcode showing number 4902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Po wyostrzeniu</p>
</div>
</div>
<div class="competitors-section__wrapper-even-1">
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/filteredImage-2.webp" alt="Przykład zdegradowanego kodu kreskowego pokazujący słabą jakość obrazu z numerem 9020301875905" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Po progowaniu adaptacyjnym</p>
</div>
<div class="competitors__card" style="width: 48%;">
<img src="/static-assets/barcode/how-to/image-correction/filteredImage-3.webp" alt="Mocno spikselowany kod kreskowy z numerem UPC 902030187590" class="img-responsive add-shadow" />
<p class="competitors__download-link" style="color: #181818; font-style: italic;">Po kontrastowaniu</p>
</div>
</div>
Oprócz właściwości `ImageFilters`, dodaj inne właściwości do `BarcodeReaderOptions` dla dokładniejszego odczytu; zobacz ten [artykuł](https://ironsoftware.com/csharp/barcode/how-to/read-barcodes-from-images/#setting-barcode-reader-options) po więcej informacji.
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.
1Install IronBarcode with NuGet Package Manager
PM > Install-Package BarCode
Install-Package BarCode
2Skopiuj 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) } });
BarcodeResults results = IronBarCode.BarcodeReader.Read("input.png", new IronBarCode.BarcodeReaderOptions { ImageFilters = new IronBarCode.ImageFilterCollection() { new IronBarCode.SharpenFilter(3.5f), new IronBarCode.ContrastFilter(2.0f) } });
C#
3Wdrożenie do testowania w środowisku produkcyjnym
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, 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.
Przykładowy obrazek
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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Write the result value to consoleforeach (BarcodeResult result in results){Console.WriteLine(result.Text);}
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);
}
ImportsIronBarCodeImportsSystemPrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection() From { New SharpenFilter(3.5F), New ContrastFilter(2) }}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Write the result value to consoleFor Each result AsBarcodeResultIn resultsConsole.WriteLine(result.Text)Next result
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ą:
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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
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");
ImportsIronBarCodePrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New AdaptiveThresholdFilter(0.9F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
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");
ImportsIronBarCodePrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New BinaryThresholdFilter(0.9F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("brightness_1.5.png");
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");
ImportsIronBarCodePrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New BrightnessFilter(1.5F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("contrast_1.5.png");
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");
ImportsIronBarCodePrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New ContrastFilter(1.5F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("invert.png");
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");
ImportsIronBarCodePrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New InvertFilter()}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("sharpen_0.5.png");
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");
ImportsIronBarCodeImportsSystemPrivate options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New SharpenFilter(0.5F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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")
Poniższy obrazek to wyostrzona wersja przykładowego obrazka wejściowego.
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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("erodeFilter.jpg");
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");
ImportsIronBarCodeDim options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From { New ErodeFilter(5) }}' Apply options and read the barcodeDim results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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. 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("dilateFilter.jpg");
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");
ImportsIronBarCodeDim options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From { New DilateFilter(5) }}' Apply options and read the barcodeDim results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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 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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.png", options);// Export file to diskresults.ExportFilterImagesToDisk("histogramEqualizationFilter.jpg");
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");
ImportsIronBarCodeDim options As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From { New HistogramEqualizationFilter() }}' Apply options and read the barcodeDim results AsBarcodeResults = BarcodeReader.Read("sample.png", options)' Export file to diskresults.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?
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.
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 barcodeBarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);// Export file to diskresults.ExportFilterImagesToDisk("gaussianBlur.png");
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");
ImportsIronBarCodePrivate myOptionsExample As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New GaussianBlurFilter(3, 3, 3.0F)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)' Export file to diskresults.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 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:
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).
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 barcodeBarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);// Export file to diskresults.ExportFilterImagesToDisk("bilateral.png");
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");
ImportsIronBarCodePrivate myOptionsExample As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New BilateralFilter(5, 75, 75)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)' Export file to diskresults.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ą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).
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 barcodeBarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);// Export file to diskresults.ExportFilterImagesToDisk("medianBlur.png");
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");
ImportsIronBarCodePrivate myOptionsExample As New BarcodeReaderOptions() With { .ImageFilters = New ImageFilterCollection(True) From {New MedianBlurFilter(5)}}' Apply options and read the barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)' Export file to diskresults.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 wyjściowych. Aby uzyskać więcej przykładów na temat zapisywania kodów kreskowych, zobacz nasz przykład konwersji kodu kreskowego na obraz.
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 barcodeBarcodeResults results = BarcodeReader.Read("sample.webp", myOptionsExample);// Export file to diskresults.ExportFilterImagesToDisk("filteredImage.png");
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");
ImportsIronBarCodePrivate 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 barcodePrivate results AsBarcodeResults = BarcodeReader.Read("sample.webp", myOptionsExample)' Export file to diskresults.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 -> Po Sharpen
Sharpen + AdaptiveThreshold -> Po AdaptiveThreshold
Sharpen + AdaptiveThreshold + Contrast -> Po Contrast
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.
When should I use the HistogramEqualization Filter?
The HistogramEqualization Filter enhances contrast by redistributing pixel intensities, making it suitable for barcodes with low contrast or uneven lighting. This filter stretches the intensity range to improve readability.
What does the GaussianBlur Filter do?
The GaussianBlur Filter reduces noise in an image by averaging pixel values using a Gaussian function. It is configurable via kernel size and sigma value, and it applies a moderate blur to help reduce image noise.
How does the Bilateral Filter differ from other blur filters?
The Bilateral Filter reduces noise while preserving edges and takes into account both color differences and pixel distance. It smooths images by considering neighborhood diameter, sigma color, and sigma space parameters.
What is the primary use of the MedianBlur Filter?
The MedianBlur Filter excels at preserving edges while minimizing noise by replacing each pixel's value with the median of its neighbors, making it effective for noise reduction with edge preservation.
How can I save images after each filter is applied in IronBarcode?
In IronBarcode, enable exporting images after each filter step by passing true to the ImageFilterCollection constructor, then use the ExportFilterImagesToDisk method to save the output images at each processing step.