C# Guide: Using IronOCR Image Filters for Better OCR
IronOCR dostarcza narzędzi potrzebnych do odczytywania obrazów, które mogą wymagać wstępnego przetworzenia w formie filtrów. Możesz wybrać spośród szerokiej gamy filtrów, które mogą modyfikować obrazy, by stały się przetwarzalne.
Szybki start: Zastosuj filtry do oczyszczenia obrazów OCR
W zaledwie jednej prostej sekwencji wywołań, możesz zastosować filtry DeNoise, Binarize i Deskew, aby poprawić klarowność skanów przed rozpoznawaniem tekstu (OCR). Ten przykład pokazuje, jak łatwo jest ulepszyć obrazy, korzystając z wbudowanych filtrów IronOCR i od razu zacząć.
-
Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr -
Skopiuj i uruchom ten fragment kodu.
using var input = new IronOcr.OcrInput("scan.jpg"); input.DeNoise(true).Binarize().Deskew(45); var result = new IronOcr.IronTesseract().Read(input); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronOCR w swoim projekcie już dziś z darmową wersją próbną
Lista filtrów obrazów do OCR
Następujące filtry obrazów mogą naprawdę poprawić wydajność:
Filters to change the Image OrientationRotate- Obraca obrazy o określoną liczbę stopni zgodnie z ruchem wskazówek zegara. Dla przeciwnie do ruchu wskazówek zegara użyj liczb ujemnych.Deskew- Obraca obraz tak, aby był odpowiednio ułożony i ortogonalny. Jest to bardzo przydatne dla OCR, ponieważ tolerancja Tesseract na przekrzywione skany może wynosić nawet 5 stopni.Scale- Skaluje strony wejściowe do OCR proporcjonalnie.
Filters to manipulate Image ColorsBinarize- Ten filtr obrazu zmienia każdy piksel na czarny lub biały, bez stanów pośrednich. Może to poprawić wydajność OCR w przypadkach bardzo niskiego kontrastu między tekstem a tłem.ToGrayScale- Ten filtr obrazu zmienia każdy piksel na odcienie szarości. Raczej nie poprawi to dokładności OCR, ale może zwiększyć szybkość.Invert- Odwraca każdy kolor. Np. Biały staje się czarny i vice versa.ReplaceColor- Zastępuje kolor na obrazie innym kolorem, w ramach określonego progu.
Filters to improve Contrast in an ImageContrast- Automatycznie zwiększa kontrast. Ten filtr często poprawia szybkość i dokładność OCR w skanach o niskim kontraście.Dilate- Zaawansowana morfologia. Dylatacja dodaje piksele do granic obiektów na obrazku. Przeciwieństwo erozji.Erode- Zaawansowana morfologia. Erozja usuwa piksele z granic obiektów. Przeciwieństwo dylatacji.
Filters to reduce Image NoiseSharpen- Wyostrza rozmyte dokumenty OCR i wyrównuje kanały alfa do bieli.DeNoise- Usuwa cyfrowy szum. Ten filtr powinien być używany tylko w sytuacjach, gdzie spodziewany jest szum.EnhanceResolution- Poprawia rozdzielczość niskiej jakości obrazów. Ten filtr często nie jest potrzebny, ponieważOcrInput.MinimumDPIiOcrInput.TargetDPIautomatycznie wychwytują i rozwiązują obrazy o niskiej rozdzielczości.
Przykład i wykorzystanie filtrów
W poniższym przykładzie pokazujemy, jak zastosować filtry w kodzie.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("my_image.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("my_image.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Debugowanie filtra / Co robi filtr?
Jeśli masz trudności z czytaniem obrazów lub kodów kreskowych w swoim programie, istnieje sposób na zapisanie obrazu z wynikiem zastosowania filtra. W ten sposób możesz debugować i dokładnie zobaczyć, co każdy filtr robi i jak manipuluje twoim obrazem.
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-2.cs
using IronOcr;
using System;
var file = "skewed_image.tiff";
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(file, pageindices);
// Here we apply the filter: Deskew
input.Deskew();
// Save the input with filter(s) applied
input.SaveAsImages("my_deskewed");
// We read, then print the text to the console
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private file = "skewed_image.tiff"
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames(file, pageindices)
' Here we apply the filter: Deskew
input.Deskew()
' Save the input with filter(s) applied
input.SaveAsImages("my_deskewed")
' We read, then print the text to the console
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Przypadki użycia filtrów
Obrót
Wyjaśnienie filtra
Obrót to filtr używany do ręcznego ustawienia znanego obrotu obrazu, aby zbliżyć go do doskonałego prostokątnego ułożenia. IronOCR ma funkcjonalność uruchamiania Deskew(), jednak tolerancja dla tego jest dość wąska i najlepiej jest używana dla obrazów, które są prawie idealnie proste (w zakresie około 15 stopni). Dla obrazów wejściowych, które są przesunięte o 90 stopni lub odwrócone do góry nogami, powinniśmy użyć Rotate().
Przykład kodu dla przypadku użycia
Oto przykład wywołania Rotate() w celu skorygowania odwróconego obrazu:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-3.cs
using IronOcr;
using System;
var image = "screenshot.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Rotate 180 degrees because image is upside-down
input.Rotate(180);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Rotate 180 degrees because image is upside-down
input.Rotate(180)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
| `` | `` |
|---|---|
![]() |
![]() |
Deskew
Wyjaśnienie filtra
Używa transformacji Hougha do próby wyprostowania obrazu w ramach określonego zakresu tolerancji. Jest to ważne dla obrazów, które nie są całkowicie proste, ponieważ przechylenie dokumentu może skutkować błędnym odczytem.
Przykład kodu dla przypadku użycia
Oto przykład wywołania Deskew() w celu skorygowania przekrzywionego obrazu:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-4.cs
using IronOcr;
using System;
var image = @"paragraph_skewed.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply deskew with 15 degree snap
bool didDeskew = input.Deskew(15);
if (didDeskew)
{
// Read image into variable: result
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
else
{
Console.WriteLine("Deskew not applied because Image Orientation could not be determined.");
}
Imports IronOcr
Imports System
Private image = "paragraph_skewed.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply deskew with 15 degree snap
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
' Read image into variable: result
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Else
Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
Skalowanie
Wyjaśnienie filtra
Skalowanie to przydatny filtr manipulacji obrazem, który pomaga zmieniać rozmiar obrazu przy użyciu już dostępnych pikseli. Można to używać, gdy kod kreskowy nie jest skanowany, ponieważ obraz ma tylko kilkadziesiąt pikseli szerokości, z każdą kreską jako jednym pikselem, lub gdy tekst jest zbyt mały bez antyaliasingu.
1000px x 1000px, w którym kody kreskowe można dobrze odczytać, co należy brać pod uwagę, jeśli twój kod kreskowy nie jest odnajdowany.Przykład kodu dla przypadku użycia
Oto przykład wywołania Scale() w celu powiększenia odstępów między kreskami w kodzie kreskowym do skanowania:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-5.cs
using IronOcr;
using System;
var image = @"small_barcode.png";
var ocr = new IronTesseract();
// Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply scale
input.Scale(400); // 400% is 4 times larger
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "small_barcode.png"
Private ocr = New IronTesseract()
' Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = True
Dim input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply scale
input.Scale(400) ' 400% is 4 times larger
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Binarization
Wyjaśnienie filtra
Filtr Binarization klasyfikuje wszystkie piksele na obrazie jako czarne lub białe, w zależności od adaptacyjnego algorytmu. To usuwa wszystkie kolory i rozdziela tło na płaską biel, a wszystko, co rozpoznaje jako tekst, ma kolor pełnej czerni dla łatwego odczytu.
Przykład kodu dla przypadku użycia
Oto przykład wywołania Binarize() w celu wyrównania kolorowanego tekstu i usunięcia kolorów i szumów na tle:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-6.cs
using IronOcr;
using System;
var image = @"no-binarize.jpg";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply Binarize
input.Binarize();
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Binarize
input.Binarize()
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
| `` | `` |
|---|---|
![]() |
![]() |
Invert
Wyjaśnienie filtra
IronOCR czyta najlepiej, gdy obraz jest black text on a white background. Filtr Invert jest używany do osiągnięcia tego poprzez odwrócenie wszystkich kolorów na obrazie.
Przykład kodu dla przypadku użycia
Oto przykład wywołania Invert() w celu przekształcenia białego na czarnym w czarne na białym:
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-7.cs
using IronOcr;
using System;
var image = @"before-invert.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply Invert
input.Invert(true);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "before-invert.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Invert
input.Invert(True)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Before |
After |
|---|---|
![]() |
![]() |
Często Zadawane Pytania
W jaki sposób filtry obrazu mogą poprawić dokładność OCR w języku C#?
Filtry obrazów w IronOCR mogą wstępnie przetwarzać obrazy w celu poprawy ich jakości, zwiększając tym samym dokładność OCR. Filtry takie jak Binarize i Contrast zwiększają czytelność poprzez dostosowanie kolorów i kontrastu, natomiast Rotate i Deskew korygują orientację obrazu.
Jakie filtry są dostępne do korygowania orientacji obrazu?
IronOCR udostępnia filtry Rotate i Deskew do korygowania problemów z orientacją obrazu. Rotate pozwala na ręczną regulację kątów obrazu, natomiast Deskew automatycznie prostuje lekko przechylone obrazy.
Jak filtr Binarize wpływa na przetwarzanie wstępne obrazu?
Filtr Binarize w IronOCR konwertuje piksele obrazu na czerń i biel, co usuwa kolory tła i poprawia widoczność tekstu, zwiększając w szczególności dokładność OCR w warunkach niskiego kontrastu.
Kiedy należy stosować filtry redukujące szumy?
W przypadku występowania szumów cyfrowych w obrazach należy zastosować filtry redukujące szumy, takie jak Sharpen i DeNoise. Filtry te oczyszczają obraz, sprawiając, że tekst staje się wyraźniejszy, co zapewnia lepsze wyniki OCR w IronOCR.
Czy poprawa rozdzielczości obrazu może wpłynąć na wydajność OCR?
Tak, użycie filtra EnhanceResolution może poprawić wydajność OCR poprzez zwiększenie rozdzielczości obrazów o niskiej jakości. Chociaż domyślne ustawienia MinimumDPI i TargetDPI w IronOCR często wystarczają, filtr ten może zapewnić dodatkowe zwiększenie rozdzielczości w razie potrzeby.
Jaką rolę odgrywają filtry manipulacji kolorami w OCR?
Filtry do manipulacji kolorami, takie jak Invert, ToGrayScale i Binarize w IronOCR, dostosowują kolory obrazu w celu poprawy czytelności tekstu. Invert zmienia schematy kolorów, ToGrayScale konwertuje obrazy do skali szarości, a Binarize redukuje obrazy do czerni i bieli.
Jaka jest różnica między filtrami Contrast i Sharpen?
Filtr Contrast w IronOCR zwiększa różnicę między jasnymi i ciemnymi obszarami, poprawiając czytelność tekstu, natomiast filtr Sharpen wyostrza krawędzie, aby tekst był bardziej wyraźny, co pomaga w lepszym rozpoznawaniu OCR.
Jak zapisywać i debugować przefiltrowane obrazy w IronOCR?
Aby zapisać i debugować przefiltrowane obrazy w IronOCR, należy użyć funkcji SaveAsImages po zastosowaniu filtrów. Pomaga to wizualizować efekty filtrów i zapewnia, że etapy przetwarzania wstępnego poprawiły jakość obrazu dla OCR.
Jakie zaawansowane filtry morfologiczne są dostępne w IronOCR?
IronOCR oferuje zaawansowane filtry morfologiczne, takie jak Dilate i Erode. Dilate dodaje piksele do granic obiektów w celu uwydatnienia cech, natomiast Erode je usuwa; oba służą do wyostrzenia szczegółów obrazu w celu poprawy dokładności OCR.







