如何使用 C# | IronOcr 提升影像品質以獲得更好的 OCR 結果

C# 改善 OCR 讀取的影像修正篩選器。

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

IronOCR 提供五種基本的影像修正濾鏡 (銳化、增強解析度、去噪、擴張和侵蝕),可在文字擷取之前預先處理影像,藉由增強文字清晰度和降低雜訊,大幅提升 OCR 準確度。

快速入門:套用銳利化濾鏡以獲得清晰文字

使用 IronOCR 的 OcrImageInput 只需一行代碼即可銳化模糊的影像。 本範例展示影像增強以達到精確的 OCR。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronOCR

    PM > Install-Package IronOcr

  2. 複製並運行這段程式碼。

    new IronOcr.OcrImageInput("sample.png").Sharpen().SaveAsImages("output.png");
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronOCR,免費試用!
    arrow pointer


如何套用銳化濾鏡?

此濾鏡可增加影像邊緣的對比度,創造出更明確的文字邊界。 它能改善文字的清晰度,使字元辨識更準確。

為什麼銳化可以提高 OCR 精確度?

銳化濾鏡透過增強邊緣對比,強調文字與背景之間的邊界。字元識別演算法需要清晰、鮮明的字母形狀才能正常運作。 掃描文件或低品質照片中常見的邊緣模糊文字會導致 OCR 引擎誤判字元邊界。 若要瞭解更多關於 OCR 最佳影像處理的資訊,請參閱我們關於 OCR 影像最佳化篩選器的綜合指南。

若要套用銳化濾鏡,請呼叫 OcrImageInput 物件的 Sharpen 方法:

:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-sharpen-filter.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("sample.jpg");
// Apply sharpen filter
imageInput.Sharpen();

// Export filtered image
imageInput.SaveAsImages("sharpen.jpg");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.jpg")
' Apply sharpen filter
imageInput.Sharpen()

' Export filtered image
imageInput.SaveAsImages("sharpen.jpg")
$vbLabelText   $csharpLabel

何時應該使用銳化篩選器?

對於稍微失焦的影像、文字邊緣較軟的掃描文件,或在光線不足的情況下拍攝的照片,請使用銳化處理。 避免將清晰的文字過度銳化,因為這樣會產生假象並降低精確度。 對於極度模糊的掃描,請結合銳化與其他濾鏡,或參閱我們的修復低品質掃描與影像指南。

使用 SaveAsImages 方法匯出篩選過的影像。 以下是翻譯前後的比較。

Blurred text sample showing business article content before applying sharpen filter
Text sample after sharpen filter application showing improved edge definition and character clarity

如何增強解析度以獲得更好的 OCR?

此濾鏡可增加像素密度,提高銳利度和清晰度。 它可以幫助 OCR 引擎更準確地讀取低解析度影像中的文字。

OCR 應以何種 DPI 為目標?

OCR 引擎在 300 DPI(每英吋點數)下效能最佳。 較低的解析度會造成字元辨識錯誤; 較高的解析度會減慢處理速度,卻不會提高精確度。 IronOCR 的增強濾鏡可將影像智慧地提升至最佳 DPI 水準。 如需詳細指引,請參閱我們的 DPI 設定指南

調用 EnhanceResolution 方法來套用此過濾器。 預設目標為 225 DPI:

using IronOcr;

// Create OCR input
var imageInput = new OcrImageInput("low-res-scan.jpg");

// Apply enhance resolution filter with default 225 DPI
imageInput.EnhanceResolution();

// Or specify a custom DPI
imageInput.EnhanceResolution(300);

// Combine with OCR reading
var ocr = new IronTesseract();
var result = ocr.Read(imageInput);
Console.WriteLine($"Extracted text: {result.Text}");
using IronOcr;

// Create OCR input
var imageInput = new OcrImageInput("low-res-scan.jpg");

// Apply enhance resolution filter with default 225 DPI
imageInput.EnhanceResolution();

// Or specify a custom DPI
imageInput.EnhanceResolution(300);

// Combine with OCR reading
var ocr = new IronTesseract();
var result = ocr.Read(imageInput);
Console.WriteLine($"Extracted text: {result.Text}");
Imports IronOcr

' Create OCR input
Dim imageInput As New OcrImageInput("low-res-scan.jpg")

' Apply enhance resolution filter with default 225 DPI
imageInput.EnhanceResolution()

' Or specify a custom DPI
imageInput.EnhanceResolution(300)

' Combine with OCR reading
Dim ocr As New IronTesseract()
Dim result = ocr.Read(imageInput)
Console.WriteLine($"Extracted text: {result.Text}")
$vbLabelText   $csharpLabel

何時增強解析度最重要?

解析度的提升對於以下方面至關重要:

  • 以螢幕解析度 (72-96 DPI) 擷取的螢幕截圖
  • 從網際網路下載的網頁影像
  • 以低解析度掃描的歷史文件
  • 傳真傳輸本身解析度低

OCR Tesseract Image DPI 實例讓您深入瞭解 DPI 如何影響各種文件類型的精確度。

Low-resolution text sample showing blurry, pixelated business article requiring OCR enhancement
Resolution-enhanced text showing clearer characters after DPI improvement for better OCR accuracy

如何去除影像雜訊?

去噪濾鏡可減少影像中不想要的人工影像。 降低雜訊可將文字與背景干擾隔離,產生更乾淨、更精準的 OCR 結果。

2x2 和 3x3 語法有何差異?

形態大小決定去噪強度。 2x2 形態學應用溫和的降噪技術,在保留精細文字的同時,將人工雜訊降到最低。 3x3 形態可為嚴重退化的文件提供積極的雜訊去除,但可能會影響非常小的文字。

若要套用去噪濾波器,請使用DeNoise方法。 預設 morphology 為 2x2。若要使用 3x3 形態,請傳入 'true':

using IronOcr;

// Load noisy document
var imageInput = new OcrImageInput("noisy-scan.pdf");

// Apply denoise filter with default 2x2 morphology
imageInput.DeNoise();

// Apply stronger denoising with 3x3 morphology
imageInput.DeNoise(true);

// Combine with other filters for severely degraded images
imageInput.DeNoise()
         .Sharpen()
         .EnhanceResolution(300);

// Process with OCR
var ocr = new IronTesseract();
var result = ocr.Read(imageInput);

// Check confidence levels
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page confidence: {page.Confidence}%");
}
using IronOcr;

// Load noisy document
var imageInput = new OcrImageInput("noisy-scan.pdf");

// Apply denoise filter with default 2x2 morphology
imageInput.DeNoise();

// Apply stronger denoising with 3x3 morphology
imageInput.DeNoise(true);

// Combine with other filters for severely degraded images
imageInput.DeNoise()
         .Sharpen()
         .EnhanceResolution(300);

// Process with OCR
var ocr = new IronTesseract();
var result = ocr.Read(imageInput);

// Check confidence levels
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page confidence: {page.Confidence}%");
}
Imports IronOcr

' Load noisy document
Dim imageInput As New OcrImageInput("noisy-scan.pdf")

' Apply denoise filter with default 2x2 morphology
imageInput.DeNoise()

' Apply stronger denoising with 3x3 morphology
imageInput.DeNoise(True)

' Combine with other filters for severely degraded images
imageInput.DeNoise() _
         .Sharpen() _
         .EnhanceResolution(300)

' Process with OCR
Dim ocr As New IronTesseract()
Dim result = ocr.Read(imageInput)

' Check confidence levels
For Each page In result.Pages
    Console.WriteLine($"Page confidence: {page.Confidence}%")
Next
$vbLabelText   $csharpLabel

我如何知道我的影像是否需要去噪化?

尋找這些噪音指標:

  • 背景上有隨機的斑點或小點
  • 因掃描不良而產生的鹽粒雜訊
  • 高 ISO 攝影所產生的紋理
  • 背景紋理來自回收紙

如需自動偵測雜訊,請探索我們的 Filter Wizard

Noisy scanned document with speckles and artifacts degrading text about Japanese tech executives
Clean document after denoise filter removes background speckles and improves text clarity

如何使用 Dilate 過濾器?

縮放可擴大影像中的明亮區域。 它可以加厚文字,使其更加突出,並讓 OCR 軟體更容易詮釋。

何時應該對文字進行縮放?

縮放對於在下列情況中發現的細小或斷裂的文字字元效果最佳:

  • 墨水不一致的舊打字機文件
  • 褪色的收據和熱感紙列印輸出
  • 使用髮線字型的文件
  • 影像格式的過度壓縮文字

縮放可填補字元間的小空隙,並強化薄弱的筆劃連接。 這可防止 OCR 引擎將斷字誤解為多個符號。

若要套用膨脹濾波器,請使用Dilate方法。 預設語態為 2x2; 為 3x3 傳 'true':

using IronOcr;

// Create OCR engine
var ocrTesseract = new IronTesseract();

// Apply dilate filter
var imageInput = new OcrImageInput("thin-text.jpg");
imageInput.Dilate();

// For more aggressive dilation
imageInput.Dilate(true);

// Practical example for faded receipt processing
var receiptInput = new OcrImageInput("faded-receipt.jpg");
receiptInput.Dilate()
           .DeNoise()
           .EnhanceResolution(300);

// Configure for better receipt reading
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocrTesseract.Configuration.ReadBarCodes = true;

// Perform OCR
var result = ocrTesseract.Read(receiptInput);
using IronOcr;

// Create OCR engine
var ocrTesseract = new IronTesseract();

// Apply dilate filter
var imageInput = new OcrImageInput("thin-text.jpg");
imageInput.Dilate();

// For more aggressive dilation
imageInput.Dilate(true);

// Practical example for faded receipt processing
var receiptInput = new OcrImageInput("faded-receipt.jpg");
receiptInput.Dilate()
           .DeNoise()
           .EnhanceResolution(300);

// Configure for better receipt reading
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocrTesseract.Configuration.ReadBarCodes = true;

// Perform OCR
var result = ocrTesseract.Read(receiptInput);
Imports IronOcr

' Create OCR engine
Dim ocrTesseract As New IronTesseract()

' Apply dilate filter
Dim imageInput As New OcrImageInput("thin-text.jpg")
imageInput.Dilate()

' For more aggressive dilation
imageInput.Dilate(True)

' Practical example for faded receipt processing
Dim receiptInput As New OcrImageInput("faded-receipt.jpg")
receiptInput.Dilate() _
           .DeNoise() _
           .EnhanceResolution(300)

' Configure for better receipt reading
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock
ocrTesseract.Configuration.ReadBarCodes = True

' Perform OCR
Dim result = ocrTesseract.Read(receiptInput)
$vbLabelText   $csharpLabel

過度擴張的常見問題有哪些?

過度擴張可能會導致:

  • 相鄰字母合併時的字符出血
  • 內部細節的遺失('e"或"8'的孔洞)
  • 降低粗體文字的精確度

監控結果並作相應調整。 對於混合文字重量的文件,請選擇性使用我們的影像品質修正篩選器。

Document with thin text strokes that would benefit from dilation filtering for OCR
Text after dilation filter showing thickened character strokes and improved legibility

如何套用 Erode 過濾器?

侵蝕可以縮小圖像中明亮區域的大小,精細粗大或扭曲的字元並改善字元分離。

為什麼侵蝕有助於處理厚文本?

侵蝕會使文字筆劃變細,並分開觸碰的字元。 此過濾器的優點在於

  • 過墨印刷文件
  • 字體出血的影印本
  • 出現合併的粗體文字
  • 低品質傳真傳輸

仔細的侵蝕可恢復字元間的分隔,並提高個別字母的辨識度,避免整個字詞被誤讀。

使用 Erode 方法套用此過濾器。 預設語態為 2x2; 為 3x3 傳 'true':

using IronOcr;

// Create OCR instance
var ocrTesseract = new IronTesseract();

// Load image with thick text
var imageInput = new OcrImageInput("thick-text.jpg");

// Apply erode filter
imageInput.Erode();

// Stronger erosion for heavily bleeding text
imageInput.Erode(true);

// Example: Processing a poor-quality photocopy
var photocopyInput = new OcrImageInput("thick-text-photocopy.pdf");

// Apply erosion followed by sharpening for best results
photocopyInput.Erode()
              .Sharpen()
              .EnhanceResolution(300);

// Configure OCR for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`@#$%^&*()_+-={}[]|\\:\";<>?,./";
ocrTesseract.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";

var ocrResult = ocrTesseract.Read(photocopyInput);

// Extract with confidence check
var highConfidenceText = ocrResult.Blocks
    .Where(b => b.Confidence > 90)
    .Select(b => b.Text);
using IronOcr;

// Create OCR instance
var ocrTesseract = new IronTesseract();

// Load image with thick text
var imageInput = new OcrImageInput("thick-text.jpg");

// Apply erode filter
imageInput.Erode();

// Stronger erosion for heavily bleeding text
imageInput.Erode(true);

// Example: Processing a poor-quality photocopy
var photocopyInput = new OcrImageInput("thick-text-photocopy.pdf");

// Apply erosion followed by sharpening for best results
photocopyInput.Erode()
              .Sharpen()
              .EnhanceResolution(300);

// Configure OCR for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`@#$%^&*()_+-={}[]|\\:\";<>?,./";
ocrTesseract.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";

var ocrResult = ocrTesseract.Read(photocopyInput);

// Extract with confidence check
var highConfidenceText = ocrResult.Blocks
    .Where(b => b.Confidence > 90)
    .Select(b => b.Text);
Imports IronOcr

' Create OCR instance
Dim ocrTesseract As New IronTesseract()

' Load image with thick text
Dim imageInput As New OcrImageInput("thick-text.jpg")

' Apply erode filter
imageInput.Erode()

' Stronger erosion for heavily bleeding text
imageInput.Erode(True)

' Example: Processing a poor-quality photocopy
Dim photocopyInput As New OcrImageInput("thick-text-photocopy.pdf")

' Apply erosion followed by sharpening for best results
photocopyInput.Erode() _
              .Sharpen() _
              .EnhanceResolution(300)

' Configure OCR for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`@#$%^&*()_+-={}[]|\:"";<>?,./"
ocrTesseract.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 "

Dim ocrResult = ocrTesseract.Read(photocopyInput)

' Extract with confidence check
Dim highConfidenceText = ocrResult.Blocks _
    .Where(Function(b) b.Confidence > 90) _
    .Select(Function(b) b.Text)
$vbLabelText   $csharpLabel

如何平衡侵蝕與文字可讀性?

找到正確的侵蝕程度需要仔細的測試:

  • 從預設的 2x2 形態開始
  • 在代表性的文件樣本上進行測試
  • 檢查標點符號是否可見
  • 確保細字型不會破損

對於混合文字重量的文件,請參閱我們的 進階組態選項

Document with merged/thick characters that would benefit from erosion filter processing
Text after erosion filter showing separated characters and refined stroke thickness

如何將篩選的影像儲存為可搜尋的 PDF?

IronOCR 可讓您儲存已套用過濾器修改過的 PDF 檔案或其原始狀態。 SaveAsSearchablePdf 方法的第二個參數會決定是否以過濾器儲存。

保留篩選器變更有什麼好處?

保留過濾器變更提供了幾個優點:

  • 建立更簡潔、更易閱讀的文件
  • 保持不同文件批次的一致性
  • 提供文字品質改善的視覺確認
  • 可進行品質控制比較

建立可搜尋的 PDF,嵌入 OCR 文字層,同時保持視覺外觀。 請參閱我們的 建立可搜尋的 PDF 指南,瞭解更多資訊。

using IronOcr;

var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load a PDF file
ocrInput.LoadPdf("invoice.pdf");

// Apply multiple filters for comprehensive improvement
ocrInput.ToGrayScale()
        .DeNoise()
        .Sharpen()
        .EnhanceResolution(300);

// Perform OCR
OcrResult result = ocr.Read(ocrInput);

// Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputFiltered.pdf", true);

// Or save without filters to preserve original appearance
result.SaveAsSearchablePdf("outputOriginal.pdf", false);

// Export to other formats
result.SaveAsTextFile("extracted-text.txt");
result.SaveAsHocrFile("output.html");
using IronOcr;

var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load a PDF file
ocrInput.LoadPdf("invoice.pdf");

// Apply multiple filters for comprehensive improvement
ocrInput.ToGrayScale()
        .DeNoise()
        .Sharpen()
        .EnhanceResolution(300);

// Perform OCR
OcrResult result = ocr.Read(ocrInput);

// Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputFiltered.pdf", true);

// Or save without filters to preserve original appearance
result.SaveAsSearchablePdf("outputOriginal.pdf", false);

// Export to other formats
result.SaveAsTextFile("extracted-text.txt");
result.SaveAsHocrFile("output.html");
Imports IronOcr

Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()

' Load a PDF file
ocrInput.LoadPdf("invoice.pdf")

' Apply multiple filters for comprehensive improvement
ocrInput.ToGrayScale() _
        .DeNoise() _
        .Sharpen() _
        .EnhanceResolution(300)

' Perform OCR
Dim result As OcrResult = ocr.Read(ocrInput)

' Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputFiltered.pdf", True)

' Or save without filters to preserve original appearance
result.SaveAsSearchablePdf("outputOriginal.pdf", False)

' Export to other formats
result.SaveAsTextFile("extracted-text.txt")
result.SaveAsHocrFile("output.html")
$vbLabelText   $csharpLabel

如何在篩選過的 PDF 和原始 PDF 之間進行選擇?

當:使用篩選條件儲存 (true) 時

  • 原始文件品質不佳
  • 各文件的外觀必須一致
  • 篩選版本大幅提升可讀性
  • 長期儲存的文件歸檔

不使用篩選條件儲存 (false) 時:

  • 法律上要求保持原貌
  • 顏色資訊很重要
  • 必須保持文件的真實性
  • 僅需使用篩選器來達到 OCR 精確度

如需進階的 PDF 處理選項,請參閱我們的 PDF OCR 文字擷取指南。 有關最佳篩選器組合,請參閱 篩選器精靈教學

常見問題解答

哪些影像濾鏡可以提高 C# 的 OCR 準確度?

IronOCR 提供五種基本的影像修正濾鏡:銳化、增強解析度、去噪、擴展和侵蝕。這些濾鏡可在文字擷取之前,先預先處理影像,藉由增強文字清晰度和降低雜訊,大幅提升 OCR 準確度。

如何銳化模糊的影像以獲得更好的文字辨識度?

您可以使用 IronOCR 的 OcrImageInput 銳化模糊的影像,只需一行程式碼:new IronOcr.OcrImageInput("sample.png").Sharpen()。此濾鏡可增加影像邊緣的對比度,建立更明確的文字邊界,以改善字元辨識。

為什麼銳化可以提高 OCR 準確度?

IronOCR 中的銳化篩選器透過增強邊緣對比度來強調文字與背景之間的邊界。這一點非常重要,因為字元識別演算法需要清晰、鮮明的字母形狀才能正常運作。邊緣柔和的模糊文字會導致 OCR 引擎錯誤辨識文字邊界。

何時應該使用 OCR 的銳化篩選器?

使用 IronOCR 的銳化濾鏡來處理稍微失焦的影像、文字邊緣較軟的掃描文件,或在光線較差的情況下拍攝的照片。避免過度銳化清晰的文字,因為這樣會產生假象並降低精確度。

為了達到最佳的 OCR 效能,我應該以什麼 DPI 為目標?

IronOCR 對於 300 DPI(每英吋點數)的影像表現最佳。較低的解析度會導致字元識別錯誤,而較高的解析度則會減慢處理速度,卻不會提高精確度。使用增強解析度篩選器可增加低解析度影像的像素密度。

套用修正後,我可以匯出篩選過的影像嗎?

是的,IronOCR 允許您使用 SaveAsImages 方法匯出篩選過的影像。這可讓您在執行 OCR 之前,檢視影像修正的前後比較,並驗證改善的效果。

應用影像濾鏡的最基本工作流程是什麼?

IronOCR 的最小工作流程包括 5 個步驟:下載程式庫、匯入您的 PDF 或影像、套用所需的濾鏡(銳化、提升解析度、去噪、擴展、侵蝕)、匯出修正後的影像以供檢視,並使用讀取方法進行 OCR 處理。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布