C# ガイド: IronOCR 画像フィルターを使用して OCR を向上させる

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

IronOCR は、フィルターの形で前処理が必要な可能性のある画像を読み取るために必要なツールを提供します。 画像を処理可能な状態にするための、さまざまなフィルターから選択できます。

クイックスタート: フィルターを適用して OCR 画像をクリーンアップする

たった 1 回の簡単な呼び出しチェーンで、DeNoise、Binarize、Deskew フィルターを適用し、OCR の前にスキャンの鮮明度を向上させることができます。 この例では、IronOCR の組み込みフィルターを使用して画像を簡単に強化し、すぐに開始できる方法を示します。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronOCR をインストールします

    PM > Install-Package IronOcr

  2. このコード スニペットをコピーして実行します。

    using var input = new IronOcr.OcrInput("scan.jpg"); input.DeNoise(true).Binarize().Deskew(45); var result = new IronOcr.IronTesseract().Read(input);
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronOCR を使い始めましょう
    arrow pointer

OCR画像フィルターのリスト

次の画像フィルターを使用すると、パフォーマンスを大幅に向上できます。

  • Filters to change the Image Orientation
    • Rotate - 画像を時計回りに指定角度回転します。反時計回りに回転する場合は、負の数を入力してください。
    • Deskew - 画像を正しい向きで直交するように回転します。 Tesseract の斜めスキャンの許容度は 5 度まで低いため、これは OCR に非常に役立ちます。
    • Scale - OCR 入力ページを比例的に拡大縮小します。
  • Filters to manipulate Image Colors
    • Binarize - この画像フィルターは、すべてのピクセルを中間のない黒または白に変換します。 これにより、テキストと背景のコントラストが非常に低い場合に OCR のパフォーマンスが向上する可能性があります。
    • ToGrayScale - この画像フィルターは、すべてのピクセルをグレーの階調に変換します。 OCR の精度が向上する可能性は低いですが、速度は向上する可能性があります。
    • Invert - すべての色を反転します。 たとえば、白は黒になり、黒は白になります。
    • ReplaceColor - 特定のしきい値内で、画像内の色を別の色に置き換えます。
  • Filters to improve Contrast in an Image
    • Contrast - コントラストを自動的に上げます。 このフィルターにより、低コントラストのスキャンでの OCR 速度と精度が向上することがよくあります。
    • Dilate - 高度な形態学。 膨張 は、画像内のオブジェクトの境界にピクセルを追加します。 Erode の反対。
    • Erode - 高度な形態学。 Erosion はオブジェクトの境界からピクセルを削除します。 Dilate の反対。
  • Filters to reduce Image Noise
    • Sharpen - ぼやけた OCR ドキュメントをシャープ化し、アルファ チャネルを白に平坦化します。
    • DeNoise - デジタルノイズを除去します。このフィルターは、ノイズが予想される場合にのみ使用してください。
    • DeepCleanBackgroundNoise - 重度のバックグラウンド ノイズを除去します。 このフィルターは、クリーンなドキュメントの OCR 精度を低下させる可能性があり、CPU を大量に消費するため、ドキュメントの背景に極端なノイズがあることがわかっている場合にのみ使用してください。
    • EnhanceResolution - 低品質の画像の解像度を高めます。 OcrInput.MinimumDPI OcrInput.TargetDPI は低解像度の入力を自動的にキャッチして解決するため、このフィルターが必要になることはあまりありません。

フィルターの例と使用方法

次の例では、コード内でフィルターを適用する方法を示します。

: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

デバッグ フィルター / フィルターは何をしているのですか?

プログラム内で画像やバーコードを読み取るのが難しい場合は、フィルタリングされた結果の画像を保存する方法があります。 この方法により、各フィルターが何を実行し、どのように画像を操作しているかを正確にデバッグして確認できます。

: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

フィルターの使用例

回転

APIリファレンス

フィルターの説明

回転は、画像に既知の回転を手動で設定して、画像を真っ直ぐに近づけるために使用されるフィルターです。 IronOCR にはDeskew()を実行する機能がありますが、その許容範囲はかなり狭く、ほぼ完全にまっすぐな画像 (15 度以内程度) に最適です。 入力画像が 90 度ずれているか、上下逆さまになっている場合は、 Rotate()を呼び出す必要があります。

ユースケースコード例

これは、Rotate を呼び出して上下逆さまの画像を修正する例です。

: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
Input.Rotate(180) `Before``` Input.Rotate(180) `After```
Screenshot related to ユースケースコード例 Screenshot Rotated related to ユースケースコード例

デスキュー

APIリファレンス

フィルターの説明

ハフ変換を使用して、一定の許容範囲内で画像をまっすぐにしようとします。 傾いた文書は読み間違える可能性があるため、画像が完全にまっすぐでない場合はこれが重要です。

ご注意このメソッドはブール値を返します。フィルターが適用された場合は true、画像の向きを検出できないために適用に失敗した場合は false を返します。 ページに方向を定義するコンテンツがない場合、これは失敗します。

ユースケースコード例

これは、Desew を呼び出して、傾いた画像を修正する例です。

: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
Deskew() `Before``` Deskew() `After```
Paragraph Skewed related to ユースケースコード例 Paragraph Deskewed related to ユースケースコード例

Scale

APIリファレンス

フィルターの説明

スケールは、既存のピクセルを使用して画像のサイズを変更するのに役立つ便利な画像操作フィルターです。 これは、画像の幅が数十ピクセルしかなく、各バーが 1 ピクセルであるためバーコードがスキャンされない場合、またはテキストが小さすぎてアンチエイリアシングがない場合に使用できます。

ご注意バーコードが適切に読み取れる最適なサイズは1000px x 1000pxです。バーコードが見つからない場合は、このサイズを考慮する必要があります。

ユースケースコード例

これは、スキャン用にバーコードのバー間のギャップを拡大するために Scale を呼び出す例です。

: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
スケールBefore ()`` スケール() `After```
C Sharp Ocr Image Filters 1 related to ユースケースコード例 C Sharp Ocr Image Filters 2 related to ユースケースコード例

ビナライズ

APIリファレンス

フィルターの説明

2 値化フィルターは、適応アルゴリズムに応じて、画像内のすべてのピクセルを黒または白に分類します。 これにより、すべての色が削除され、背景がフラットな白に分離され、テキストとして認識されたものはすべて読みやすいように完全な黒になります。

ユースケースコード例

これは、Binarize を呼び出して色付きのテキストを揃え、背景色とノイズを除去する例です。

: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
Binarize() `Before``` Binarize() `After```
No Binarize related to ユースケースコード例 After Binarize related to ユースケースコード例

反転

APIリファレンス

フィルターの説明

IronOCR は、画像がblack text on a white backgroundである場合に最もよく読み取られます。 反転フィルターは、画像上のすべての色を反転することでこれを実現するために使用されます。

ユースケースコード例

これは、Invert を呼び出して、黒地の白を白地の黒に変換する例です。

: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 ユースケースコード例 After Invert related to ユースケースコード例

よくある質問

画像フィルターは C# で OCR の精度をどのように向上させますか?

IronOCR の画像フィルターは、画像を前処理して品質を向上させることで、OCR の精度を高めることができます。バイナライズやコントラストなどのフィルターは、色とコントラストを調整することで読みやすさを高め、回転や傾き補正は画像の向きを修正します。

画像の向きを修正するためにはどのフィルターが利用可能ですか?

IronOCR は、画像の向きの問題を解決するために、回転と傾き補正フィルターを提供します。回転は画像の角度を手動で調整し、傾き補正はわずかに傾いた画像を自動でまっすぐにします。

バイナライズフィルターは画像の前処理にどのような影響を与えますか?

IronOCR のバイナライズフィルターは、画像のピクセルを黒と白に変換し、背景色を除去してテキストの可視性を高め、特にコントラストの低い状況で OCR の精度を向上させます。

ノイズ削減フィルターを使用するのに適したタイミングはいつですか?

シャープ化やノイズ除去などのノイズ削減フィルターは、画像にデジタルノイズがある場合に使用するべきです。これらのフィルターは画像をクリーンアップし、テキストをより鮮明にして IronOCR の結果を向上させます。

画像の解像度を向上させることで OCR のパフォーマンスが影響を受けますか?

はい、解像度向上フィルターを使用することで、低品質な画像の解像度を上げて OCR のパフォーマンスを向上させることができます。IronOCR のデフォルト設定の MinimumDPI や TargetDPI が通常は十分ですが、必要に応じてこのフィルターによる追加の解像度の向上が可能です。

色調操作フィルターは OCR においてどのような役割を果たしますか?

IronOCR の反転、グレースケール化、バイナライズなどの色調操作フィルターは、テキストの読みやすさを向上させるために画像の色を調整します。反転はカラースキームを変更し、グレースケール化は画像をグレースケールに変換し、バイナライズは画像を黒白に減少させます。

コントラストフィルターとシャープ化フィルターの違いは何ですか?

IronOCR のコントラストフィルターは、明るい部分と暗い部分の違いを大きくし、テキストの明瞭さを向上させ、シャープ化フィルターはエッジを強調してテキストをより鮮明にし、両方ともより良い OCR 認識を支援します。

IronOCR でフィルターした画像を保存してデバッグする方法は?

フィルター適用後に SaveAsImages 関数を使用して、IronOCR でフィルター処理済みの画像を保存してデバッグします。これにより、フィルター効果を視覚化し、前処理ステップで画像品質が向上したことを確認できます。

IronOCR で利用可能な高度な形態学的フィルターは何ですか?

IronOCR は膨張と収縮のような高度な形態学的フィルターを提供します。膨張はオブジェクトの境界にピクセルを追加して特徴を強化し、収縮はそれを除去して、画像の詳細を明確にして OCR の精度を向上させるために使用されます。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

レビュー済み
Jeff Fritz
Jeffrey T. Fritz
プリンシパルプログラムマネージャー - .NETコミュニティチーム
Jeffはまた、.NETとVisual Studioチームのプリンシパルプログラムマネージャーです。彼は.NET Conf仮想会議シリーズのエグゼクティブプロデューサーであり、週に二回放送される開発者向けライブストリーム『Fritz and Friends』のホストを務め、テクノロジーについて話すことや視聴者と一緒にコードを書くことをしています。Jeffはワークショップ、プレゼンテーション、およびMicrosoft Build、Microsoft Ignite、.NET Conf、Microsoft MVPサミットを含む最大のMicrosoft開発者イベントのコンテンツを企画しています。
準備はできましたか?
Nuget ダウンロード 5,167,857 | Version: 2025.11 リリース