C# Guide: Using IronOCR Image Filters for Better OCR

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

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 jednym prostym łańcuchu wywołań, możesz zastosować filtry DeNoise, Binarize i Deskew, aby poprawić jakość skanu przed OCR. Ten przykład pokazuje, jak łatwo jest ulepszyć obrazy, korzystając z wbudowanych filtrów IronOCR i od razu zacząć.

  1. Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr
  2. 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);
  3. Wdrożenie do testowania w środowisku produkcyjnym

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

    arrow pointer

Lista filtrów obrazów do OCR

Następujące filtry obrazów mogą naprawdę poprawić wydajność:

  • Filters to change the Image Orientation
    • Rotate - Obraca obrazy o pewną 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ł w orientacji pionowej i pod kątem prostym. Jest to bardzo przydatne dla OCR, ponieważ tolerancja Tesseract na przekrzywione skany może wynosić nawet 5 stopni.
    • Scale - Proporcjonalnie skaluje strony wejściowe OCR.
  • Filters to manipulate Image Colors
    • Binarize - Ten filtr obrazu ustawia każdy piksel na czarny lub biały bez odcieni pośrednich. Może to poprawić wydajność OCR w przypadkach bardzo niskiego kontrastu między tekstem a tłem.
    • ToGrayScale - Ten filtr obrazu przekształca każdy piksel w odcienie szarości. Raczej nie poprawi to dokładności OCR, ale może zwiększyć szybkość.
    • Invert - Odwraca wszystkie kolory. Np. Biały staje się czarny i vice versa.
    • ReplaceColor - Zastępuje kolor w obrazie innym kolorem, w ramach pewnego progu.
  • Filters to improve Contrast in an Image
    • Contrast - 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 Noise
    • Sharpen - Wyostrza rozmyte dokumenty OCR i spłaszcza kanały alfa do białego.
    • DeNoise - Usuwa cyfrowy szum. Ten filtr powinien być używany tylko w scenariuszach, gdzie spodziewany jest szum.
    • EnhanceResolution - Poprawia rozdzielczość niskiej jakości obrazów. Ten filtr nie jest często potrzebny, ponieważ OcrInput.MinimumDPI i OcrInput.TargetDPI automatycznie przechwytują 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)
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

Przypadki użycia filtrów

Obrót

Dokumentacja API

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 posiada funkcjonalność do uruchamiania Deskew(), jednakże stopień tolerancji na to jest raczej wąski i najlepiej używać go do obrazów prawie doskonale prostych (w granicach 15 stopni lub mniej). Dla obrazów wejściowych, które są przechylone o 90 stopni, lub są do góry nogami, powinniśmy wywołać Rotate().

Przykład kodu dla przypadku użycia

Jest to przykład wywołania Rotate(), aby poprawić obraz, który jest do góry nogami:

: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)
$vbLabelText   $csharpLabel
Przed Input.Rotate(180) Po Input.Rotate(180)
Screenshot related to Przykład kodu dla przypadku użycia Screenshot Rotated related to Przykład kodu dla przypadku użycia

Wyrównanie

Dokumentacja API

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.

Zwróć uwagęMetoda ta zwraca wartość logiczną, która jest prawdziwa, jeśli filtr został zastosowany, i fałszywa, jeśli nie udało się zastosować z powodu niemożności wykrycia orientacji obrazu. To nie powiedzie się, jeśli strona nie zawiera żadnych treści do określenia orientacji.

Przykład kodu dla przypadku użycia

Jest to przykład wywołania Deskew(), aby poprawić przechylony obraz:

: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
$vbLabelText   $csharpLabel

Skalowanie

Dokumentacja API

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.

Zwróć uwagęJest odpowiednia wielkość dla rozmiarów kodu kreskowego 1000px x 1000px, gdzie kody kreskowe mogą być dobrze czytane, co powinno być uwzględnione, jeśli twój kod kreskowy nie jest znaleziony.

Przykład kodu dla przypadku użycia

Jest to przykład wywołania Scale(), aby powiększyć odstępy między belkami 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)
$vbLabelText   $csharpLabel

Binarization

Dokumentacja API

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

Jest to przykład wywołania Binarize(), aby dopasować kolorowy tekst i usunąć tła oraz szumy:

: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)
$vbLabelText   $csharpLabel
Przed Binarize() Po Binarize()
No Binarize related to Przykład kodu dla przypadku użycia After Binarize related to Przykład kodu dla przypadku użycia

Odwróć

Dokumentacja API

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

Jest to przykład wywołania Invert(), aby zamienić biały na czarnym na czarny 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)
$vbLabelText   $csharpLabel
Before After
Before Invert related to Przykład kodu dla przypadku użycia After Invert related to Przykład kodu dla przypadku użycia

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, ToGrayScałe i Binarize w IronOCR, dostosowują kolory obrazu w celu poprawy czytelności tekstu. Invert zmienia schematy kolorów, ToGrayScałe 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.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Sprawdzone przez
Jeff Fritz
Jeffrey T. Fritz
Główny Menedżer Programu - Zespół .NET Community
Jeff jest również Głównym Menedżerem Programu dla zespołów .NET i Visual Studio. Jest producentem wykonawczym wirtualnej serii konferencji .NET Conf i prowadzi 'Fritz and Friends', transmisję na żywo dla deweloperów emitowaną dwa razy w tygodniu, gdzie rozmawia o technologii i pisze kod razem z widzami. Jeff pisze warsztaty, prezentacje i planuje treści dla największych wydarzeń Microsoft dla deweloperów, w tym Microsoft Build, Microsoft Ignite, .NET Conf i Microsoft MVP Summit.
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 6,151,372 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronOcr
uruchom próbkę obserwuj, jak twój obraz staje się tekstem z możliwością wyszukiwania.