用於改進 OCR辨識效果的 C# 影像校正濾鏡:圖片轉文字前置處理
IronOCR提供五個基本的影像校正濾鏡(銳利化、提高解析度、去雜訊、膨脹和腐蝕),這些濾鏡可對影像進行預處理,從而在擷取圖片文字之前透過增強文字清晰度和減少雜訊來顯著提高 OCR辨識的準確性。
快速入門:應用銳利化濾鏡以清晰文字
使用 IronOCR 的 OcrImageInput,只需一行程式碼即可銳化模糊影像。 此範例示範如何透過影像增強實現準確的OCR辨識。
最簡工作流程(5個步驟)
- 下載一個用於使用濾波器進行影像校正的 C# 庫
- 導入PDF文件和圖像以供閱讀
- 應用所需的濾鏡,例如銳利化、提高解析度、降噪、膨脹和腐蝕。
- 匯出校正後的影像以供查看
- 使用`Read`方法進行 OCR 處理
如何應用銳利化濾鏡?
此濾鏡可增加影像邊緣的對比度,從而創造更清晰的文字邊界。 它提高了文字清晰度,使字元辨識更加準確。
為什麼銳化可以提高OCR辨識準確率?
銳利化濾鏡透過增強邊緣對比度來突出文字和背景之間的邊界。字元辨識演算法需要清晰、分明的字母形狀才能正常運作。 掃描文件或低品質照片中常見的模糊文字(邊緣柔和)會導致 OCR 引擎錯誤識別字元邊界。 要了解有關 OCR 最佳影像處理的更多信息,請查看我們關於OCR 影像優化濾鏡的綜合指南。
若要套用銳利化濾鏡,請呼叫 Sharpen 物件的 OcrImageInput 方法:
: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")
何時該使用銳利化濾鏡?
對於輕微失焦的影像、文字邊緣模糊的掃描文件或在光線不足的情況下拍攝的照片,可以使用銳利化功能。 避免過度銳化清晰的文本,因為這會引入偽影並降低準確性。 對於極度模糊的掃描件,可將銳利化與其他濾鏡結合使用,或參閱我們的《修復低品質掃描件和影像》指南。
使用 SaveAsImages 方法匯出過濾後的影像。 以下是前後對比圖。
前
後
如何提高解析度以獲得更好的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}")
分辨率提昇在什麼情況下最為重要?
解析度提升對於以下方面至關重要:
- 螢幕截圖解析度為(72-96 DPI)
- 從網路下載的網頁圖片
- 低解析度掃描的歷史文獻
- 解析度固有的低解析度傳真傳輸
OCR Tesseract 影像 DPI 範例提供了有關 DPI 如何影響不同文件類型的準確性的見解。
前
後
如何去除影像中的雜訊?
去雜訊濾波器可以減少影像中不需要的偽影。 降噪功能可將文字與背景幹擾隔離,產生更清晰、更準確的 OCR 結果。
2x2 和 3x3 形態學有什麼不同?
形態大小決定去噪強度。 2x2 形態學採用溫和的降噪技術,在保留精細文本的同時,最大限度地減少偽影。 3x3 形態學能夠有效去除嚴重損壞文件中的噪聲,但可能會影響非常小的文本。
若要套用去噪濾波器,請使用 DeNoise 方法。 預設形態為 2x2。傳遞"true"參數可啟用 3x3 形態:
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
如何判斷我的圖片是否需要降噪?
注意以下噪音指標: 背景上有隨機的斑點或小點 掃描不良導致的椒鹽噪音 高ISO感光度攝影造成的雜訊
- 背景紋理來自再生紙
如需自動噪音偵測,請探索我們的濾波器精靈。
前
後
如何使用擴張濾網?
影像膨脹會使影像中的明亮區域擴大。 它可以加粗文字,使其更加醒目,也更容易被 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)
過度擴張常見的問題有哪些?
過度擴張可能導致:
- 相鄰字母融合處的字元滲漏
- 內部細節缺失(例如字母"e"或"8"出現孔洞)
- 粗體文字的準確率降低
監測結果並據此進行調整。 對於文字粗細混合的文檔,請選擇性地使用我們的影像品質校正濾鏡。
前
後
如何應用侵蝕濾鏡?
腐蝕可以減少圖像中明亮區域的大小,從而改善粗體或扭曲的字符,並提高字符分離度。
為什麼腐蝕對處理粗體字有幫助?
腐蝕會使文字筆畫變細,並使相鄰的字元分離。 此篩選器在以下方面表現出色: 列印文檔墨跡過多 影印件出現字跡模糊的狀況
- 粗體文字顯示為合併狀態
- 低品質傳真傳輸
精細的腐蝕可以恢復字元分離,提高單個字母的辨識率,防止整個單字被誤讀。
使用 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)
如何平衡文本的可讀性和防侵蝕性?
確定合適的侵蝕程度需要仔細測試:
- 從預設的 2x2 形態開始
- 對代表性文件樣本進行測試
- 檢查標點符號是否仍可見 確保細字體不會出現斷字現象。
對於混合文字粗細的文檔,請參閱我們的進階設定選項。
前
後
如何將篩選後的影像儲存為可搜尋的PDF?
IronOCR可讓您儲存套用了濾鏡的修改後的 PDF 文件,或儲存其原始狀態的 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")
如何選擇過濾後的PDF文件還是原始PDF文件?
儲存時啟用篩選條件: 原始文件品質差
- 文件外觀需保持一致
- 過濾後的版本顯著提高了可讀性
- 文件歸檔以進行長期存儲
儲存時不使用篩選條件(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 處理。

