C# 指南:使用 IronOCR 影像濾鏡提升 OCR 辨識效果

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

IronOCR 提供讀取影像所需的工具,這些影像可能需要以濾鏡的形式進行預處理。 您可以從各種各樣的濾鏡中進行選擇,這些濾鏡可以處理您的影像,使其可以進行後續處理。

快速入門:應用濾鏡清理 OCR 影像

只需一個簡單的呼叫鏈,即可套用DeNoiseBinarizeDeskew過濾器來提高 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 - 將影像旋轉成正確的方向和正交角度。 這對於 OCR 非常有用,因為 Tesseract 對傾斜掃描的容忍度可以低至 5 度。
    • Scale - 按比例縮放 OCR 輸入頁。 Filters to manipulate Image Colors Binarize - 此影像濾鏡將每個像素變為黑色或白色,沒有中間色。 這可以提高文字與背景對比度非常低時的 OCR 效能。
    • ToGrayScale - 此影像濾鏡將每個像素轉換為灰階。 不太可能提高OCR識別準確率,但可能會提高速度。
    • Invert - 反轉所有顏色。 例如,白色變成黑色,反之亦然。
    • ReplaceColor - 將影像中的一種顏色替換為在一定閾值範圍內的另一種顏色。
  • Filters to improve Contrast in an Image
    • Contrast - 自動增加對比。 此濾鏡通常可以提高低對比度掃描影像的 OCR 速度和準確性。
    • Dilate - 高階形態學。 膨脹操作是指在影像中物件的邊界上新增像素。 與侵蝕相反。
    • Erode - 高階形態學。 腐蝕會從物體邊界移除像素。 與擴張相反。
  • Filters to reduce Image Noise
    • Sharpen - 銳利化模糊的 OCR 文檔,並將 alpha 通道展平為白色。
    • DeNoise - 去除數位雜訊。此濾波器僅套用於預期會出現雜訊的場景。
    • 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);
$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);
$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);
$vbLabelText   $csharpLabel
在輸入Before旋轉(180)``輸入After旋轉(180)``
Screenshot related to 用例程式碼範例Screenshot Rotated related to 用例程式碼範例

桌子

API 參考

篩選說明

使用霍夫變換來嘗試在一定容差範圍內矯正影像。 對於不完全水平的影像來說,這一點很重要,因為傾斜的文件可能會導致誤讀。

[{i:(此方法傳回一個布林值,如果應用了過濾器,則傳回 true;如果由於無法偵測影像方向而未能套用,則傳回 false。 如果頁面沒有內容來定義方向,此操作將會失敗。

用例程式碼範例

這是一個呼叫Deskew()函數來校正傾斜影像的範例:

: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.");
}
$vbLabelText   $csharpLabel

規模

API 參考

篩選說明

縮放是一個有用的影像處理濾鏡,它可以利用影像已有的像素來調整影像大小。 當條碼無法掃描時(因為圖像只有幾十個像素寬,每個條形佔一個像素),或者文字太小而沒有抗鋸齒,可以使用這種方法。

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

二值化

API 參考

篩選說明

二值化濾波器根據自適應演算法將影像中的所有像素分類為黑色或白色。 這會移除所有顏色,並將背景變成純白色,所有被識別為文字的部分都會變成全黑色,以便於閱讀。

用例程式碼範例

這是一個呼叫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);
$vbLabelText   $csharpLabel
在二值化Before ()``二進位化After ()``
No Binarize related to 用例程式碼範例After Binarize related to 用例程式碼範例

倒置

API 參考

篩選說明

IronOCR 辨識black text on a white background影像效果最佳。 Invert濾鏡透過反轉影像上的所有顏色來實現這一效果。

用例程式碼範例

這是一個呼叫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);
$vbLabelText   $csharpLabel
BeforeAfter
Before Invert related to 用例程式碼範例After Invert related to 用例程式碼範例

常見問題解答

如何在C#中使用影像濾波器來提高OCR辨識準確率?

IronOCR中的影像濾鏡可對影像進行預處理,以提升影像質量,從而提高OCR辨識準確率。例如,二值化和對比度濾鏡透過調整顏色和對比度來提高影像的可讀性,而旋轉和傾斜校正濾鏡則可以校正影像方向。

有哪些濾鏡可用來校正影像方向?

IronOCR 提供旋轉和校正傾斜濾鏡來修正影像方向問題。旋轉功能可手動調整影像角度,而校正傾斜功能則會自動矯正輕微傾斜的影像。

二值化濾波器如何影響影像預處理?

IronOCR 中的二值化濾鏡將影像像素轉換為黑白,從而去除背景色彩並增強文字可見性,尤其是在低對比度條件下提高 OCR 準確性。

何時適合使用降噪濾波器?

當影像中存在數位雜訊時,應使用銳利化和去雜訊等降噪濾鏡。這些濾鏡可以淨化影像,使文字更清晰,從而在 IronOCR 中獲得更好的 OCR 辨識效果。

提高影像解析度會影響OCR效能嗎?

是的,使用 EnhanceResolution 濾鏡可以透過提高低品質影像的解析度來提升 OCR 性能。雖然 IronOCR 的預設 MinimumDPI 和 TargetDPI 設定通常足夠,但如果需要,則該濾鏡可以提供額外的解析度增強。

顏色處理濾鏡在OCR中扮演什麼角色?

IronOCR 中的顏色處理濾鏡,例如“反轉”、“轉灰度”和“二值化”,可以調整圖像顏色,從而提高文字的可讀性。 「反轉」濾鏡會改變色彩方案,「轉灰度」濾鏡會將影像轉換為灰階影像,「二值化」濾鏡會將影像簡化為黑白影像。

對比濾鏡和銳利化濾鏡有什麼差別?

IronOCR 中的對比度濾鏡可以增加明暗區域之間的差異,提高文字清晰度;而銳利化濾鏡可以增強邊緣,使文字更加清晰,兩者都有助於提高 OCR 識別率。

如何在 IronOCR 中保存和調試已過濾的圖像?

若要在 IronOCR 中儲存和調試經濾鏡處理的影像,請在套用濾鏡後使用SaveAsImages功能。這有助於可視化濾鏡效果,並確保預處理步驟提高了 OCR 的影像品質。

IronOCR 中有哪些高階形態學濾鏡?

IronOCR 提供諸如膨脹和腐蝕等高級形態學濾鏡。膨脹功能會在物體邊界添加像素以增強特徵,而腐蝕功能則會移除像素,這兩種功能都用於清晰化影像細節,從而提高 OCR 的準確率。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。

經審核
傑夫·弗里茨
傑弗裡·T·弗里茨
.NET 社群團隊首席專案經理
Jeff 同時也是 .NET 和 Visual Studio 團隊的首席專案經理。他是 .NET Conf 虛擬會議系列的執行製片人,並主持每週兩次的開發者直播節目“Fritz and Friends”,在節目中他會與觀眾一起探討技術並編寫程式碼。 Jeff 也為包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 在內的微軟大型開發者活動撰寫研討會、簡報並策劃內容。
準備好開始了嗎?
Nuget 下載 5,299,091 | 版本: 2025.12 剛剛發布