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

用於提升 OCR 讀取精準度的 C# 影像校正濾鏡

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

IronOCR 提供五種關鍵的影像校正濾鏡(dilate 以及 erode),這些濾鏡會對影像進行預處理,透過在文字擷取前提升文字清晰度並降低雜訊,從而顯著提高 OCR 準確度。

快速入門:套用"Sharpen"濾鏡以獲得清晰文字 using IronOCR 的 OcrImageInput,僅需一行程式碼即可銳化模糊的影像。 此範例展示如何透過影像增強技術來提升 OCR 辨識精準度。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

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

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer


如何套用 Sharpen 濾鏡?

此濾鏡可增強影像邊緣的對比度,使文字邊界更加清晰。 這能提升文字清晰度,使字元辨識更為精準。

為何銳化能提升 OCR 準確度?

"銳化"濾鏡透過增強邊緣對比度,突顯文字與背景之間的界線。字元辨識演算法需要清晰、分明的字母輪廓才能正常運作。 邊緣模糊的文字(常見於掃描文件或低畫質照片)會導致 OCR 引擎錯誤識別字元邊界。 若想進一步了解 OCR 的最佳影像處理方法,請參閱我們關於 OCR 影像優化濾鏡的完整指南。

若要套用 sharpen 篩選器,請呼叫 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

何時該使用 Sharpen 濾鏡?

針對略微失焦的影像、文字邊緣模糊的掃描文件,或光線不足下拍攝的照片,請使用銳化功能。 請避免對明文進行過度優化,此舉會引入人工痕跡並降低準確性。 若掃描檔極度模糊,請將銳化功能與其他濾鏡結合使用,或參閱我們的《修復低品質掃描檔與圖片》指南。 using 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 影像 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 方法。 預設形態為 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.Co/nfidence}%");
}
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.Co/nfidence}%");
}
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 攝影產生的顆粒感
  • 背景紋理採用再生紙素材

若需自動雜訊偵測功能,請探索我們的"濾波精靈"。

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.Co/nfiguration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocrTesseract.Co/nfiguration.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.Co/nfiguration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocrTesseract.Co/nfiguration.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 濾鏡?

侵蝕處理可縮小影像中的亮部區域,藉此精修過粗或變形的字元,並改善字元間的分離度。

為何"侵蝕"能幫助處理粗體文字?

侵蝕效果會使文字筆畫變細,並將相鄰的字元分開。 此過濾器在以下方面表現出色:

  • 墨水過多的列印文件
  • 字元溢出的影印本
  • 顯示為合併的粗體文字
  • 傳真傳輸品質不佳

細緻的字形修整能恢復字元間距並提升單一字母的辨識度,從而避免整WORD被誤讀。

請使用 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.Co/nfiguration.BlackListCharacters = "~`@#$%^&*()_+-={}[]|\\:\";<>?,./";
ocrTesseract.Co/nfiguration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";

var ocrResult = ocrTesseract.Read(photocopyInput);

// Extract with confidence check
var highConfidenceText = ocrResult.Blocks
    .Where(b => b.Co/nfidence > 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.Co/nfiguration.BlackListCharacters = "~`@#$%^&*()_+-={}[]|\\:\";<>?,./";
ocrTesseract.Co/nfiguration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ";

var ocrResult = ocrTesseract.Read(photocopyInput);

// Extract with confidence check
var highConfidenceText = ocrResult.Blocks
    .Where(b => b.Co/nfidence > 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 之間做出選擇?

在以下情況下節省資源 (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 之前驗證改善效果。

套用影像濾鏡的最簡工作流程為何?

using IronOCR 的最簡工作流程包含 5 個步驟:下載程式庫、匯入 PDF 或圖片、套用所需濾鏡(銳化、提升解析度、去噪、膨脹、蝕蝕)、匯出修正後的圖片以供檢視,以及使用 Read 方法進行 OCR 處理。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

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

準備開始了嗎?
Nuget 下載 5,888,303 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。