如何於C#中修正OCR圖像方向

修正OCR中影像的方向,以C#進行

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

IronOCR通過旋轉、修正傾斜和縮放方法修正影像方向問題。 串接這些轉換來校正傾斜的掃描、顛倒的文件以及大小不正確的影像,以便在您的.NET應用程式中準確進行OCR文字擷取。

快速入門:一行內完成旋轉-修正傾斜-縮放

將IronOCR的OcrInput方法連結起來,在一次調用中旋轉、修正傾斜並縮放您的影像——準備影像以進行精確的OCR,無需樣板程式碼。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 複製並運行這段程式碼片段。

    var result = new IronOcr.OcrInput().LoadImage("skewed.png").Rotate(90).Deskew(45).Scale(150).Let(input => new IronOcr.IronTesseract().Read(input));
  3. 部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronOCR,透過免費試用

    arrow pointer


如何在IronOCR中旋轉影像?

旋轉通過特定的角度改變影像的方向,以確保文字是直立且正確對齊的。 這可以修正放置在掃描儀上的錯誤文件或以不恰當角度拍攝的照片。

將度數值傳遞給Rotate方法。 正值順時針旋轉;負值逆時針旋轉。旋轉是在影像的中心點進行,保持原始尺寸同時調整內容的方向。

何時應該使用影像旋轉?

影像旋轉可糾正以錯誤方向掃描或拍攝的文件。 常見場景包括:

  • 文件上下顛倒或側向掃描
  • 需要改變方向的手機照片
  • 複頁文件,頁面方向不一致
  • 掃描標準各異的歷史檔案
  • 護照掃描中右相方向的變化
  • 識別車牌從不同攝影機角度

要自動旋轉檢測,使用IronOCR的DetectPageOrientation方法通過文字分析確定正確方向。

哪些度數值效果最好?

常見的旋轉值是90度的倍數(90, 180, 270)來解決標準方向問題。 IronOCR支援任意度數值以進行精細調整:

  • 90/-270度:橫向轉換為縱向
  • 180度:顛倒的文件
  • 270/-90度:縱向轉換為橫向
  • 小角度(1-10度):小調整,雖然修正傾斜通常更適用於輕微傾斜

對於來自舊裝置的掃描文件,將旋轉與其他預處理步驟結合使用。

旋轉如何影響OCR準確性?

適當的旋轉對於OCR準確性至關重要。 IronOCR的Tesseract 5引擎預期文字的流向是從左到右、從上到下。 文字未對齊會導致:

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

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

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel

使用SaveAsImages方法匯出修改後的影像。 下圖顯示輪轉前後的影像。

旋轉校正前的原始傾斜文字文件
帶有旋轉 180 度文字的文件,顯示需要 IronOCR 旋轉校正的上下顛倒內容

如何修正傾斜影像?

修正傾斜將使傾斜或歪曲的圖片變得平直,糾正傾斜以確保水平文字對齊。 這能修正放置在掃描儀上的歪斜文件或稍微傾斜拍攝的照片。

使用Deskew方法應用修正傾斜。 傳遞一個指定最大傾斜角度的整數來進行修正。 較高的數值允許更多修正但會降低處理速度且有翻轉頁面的風險。 預設的15度最大值能有效應付大多數情況。

修正傾斜應參考哪些角度值?

最佳的小角度取決於文件品質和需求:

  • 預設(不帶參數):自動偵測大多數文件
  • 5-15度:略微傾斜的掃描,在準確性和速度間取得平衡
  • 15-30度:嚴重歪曲的文件; 考慮對超過20度的角度進行旋轉
  • 30度以上:可能過度修正; 使用影像過濾器替代

對於嚴重偏斜的文件,將修正傾斜與影像優化過濾器結合。 過濾器嚮導可以幫助識別最佳的預處理步驟。

什麼時候修正傾斜最有效?

修正傾斜在以下情況中效果最佳:

  • 文字密集且有清晰水平線的文件
  • 表格和結構化文件
  • 掃描自書籍或雜誌的頁面
  • 一致傾斜的多頁TIFF檔
  • 需要精確對齊的財務文件

對於以下情況效果不佳:

  • 底線不規則的手寫文字
  • 含有多種文字方向的圖片
  • 含有大量圖形或表格的文件
  • 已正確對齊的截圖

如何避免修正傾斜過當問題?

防止修正傾斜問題的方法:

  1. 從保守的角度範圍開始(10-15度)
  2. 使用OcrResult信心水平進行校正驗證
  3. 在旋轉後應用修正傾斜來解決複合問題
  4. 在批量處理前測試樣本文件
  5. 使用進度追踪處理大量批量
  6. 使用中止憑證對長時間運行的操作
:path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-rotate-image.cs
using IronOcr;

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

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel
具有明顯傾斜、需要進行傾斜校正的原始文件
Document after deskew correction showing properly aligned horizontal text

如何更新影像以進行更好的OCR?

縮放調整影像尺寸以標準化尺寸以確保一致的文字識別。 適當的縮放確保文字既不太小以致於難以準確偵測也不太大而使得處理效率低下。

使用百分比值(100%表示無效果)的Scale方法實現縮放。 第二個參數ScaleCropArea決定是否縮放作物區域等比例(推薦設為'true')。 使用ScaleCropArea保持縮放過程中原始DPI的元資料。 縮放保持寬高比以防止文字變形。

最佳的縮放百分比是多少?

最佳縮放取決於源解析度和OCR需求:

  • 50-80%:高解析度掃描(600+ DPI)以便更快的處理
  • 100%:無縮放,原始尺寸
  • 120-150%:低解析度圖片以增強字元識別
  • 200%+:非常小的文字,雖然DPI設置可能效果更佳

針對最佳結果,目標文字高度為20-30像素。 詳情請參見優化Tesseract圖像DPI

縮放如何衝擊OCR的表現?

縮放影響準確性和速度:

  • 降縮(低於100%):更快的處理速度但可能失去細節
  • 提升(高於100%):對於小文字準確性更高但處理速度更慢
  • 記憶體使用量:隨著影像尺寸呈平方增長
  • 處理時間:隨著尺寸增大而增加

為優化性能,請參見快速OCR配置加速多執行緒

什麼時候應該使用ScaleCropArea?

在以下情況使用ScaleCropArea

除非需要原始作物座標,請設置為true

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

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

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel

不同縮放值如何比較?

下方比較顯示縮放怎樣影響尺寸和文字清晰度。 適度的縮放保持可讀性同時調整處理需求:

比較顯示以50%、100%和150%縮放的文件在尺寸上的不同
以不同縮放渲染的文字並排比較,顯示OCR品質在3D透視中的保留

如何進行最佳的綜合修正?

按照以下順序應用修正以獲得最佳結果:

  1. 首先進行旋轉來修正主要方向問題
  2. 修正傾斜以微調對齊
  3. 縮放以優化OCR處理

此序列確保每個修正在前一個修正的基礎上不產生誤差積累。 對於複雜的處理需求,探索IronOCR的綜合影像過濾器和圖像質量修正工具

如何綜合所有方位的修正?

串接多個修正來準備綜合影像:

:path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-5.cs
/* :path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-combined.cs */
using IronOcr;

// Create OCR engine with optimized configuration
IronTesseract ocrTesseract = new IronTesseract();

// Load and process image with all corrections
using var imageInput = new OcrImageInput("skewed_document.png");

// Apply corrections in optimal sequence
imageInput
    .Rotate(90)           // Fix major orientation
    .Deskew(15)          // Correct minor tilts
    .Scale(150, true);   // Enhance for OCR

// Perform OCR on corrected image
OcrResult result = ocrTesseract.Read(imageInput);

// Access extracted text
string extractedText = result.Text;
Imports IronOcr

' Create OCR engine with optimized configuration
Dim ocrTesseract As New IronTesseract()

' Load and process image with all corrections
Using imageInput As New OcrImageInput("skewed_document.png")

    ' Apply corrections in optimal sequence
    imageInput _
        .Rotate(90) _          ' Fix major orientation
        .Deskew(15) _          ' Correct minor tilts
        .Scale(150, True)      ' Enhance for OCR

    ' Perform OCR on corrected image
    Dim result As OcrResult = ocrTesseract.Read(imageInput)

    ' Access extracted text
    Dim extractedText As String = result.Text

End Using
$vbLabelText   $csharpLabel

哪些額外的預處理可以改善結果?

除了方向修正外,請考慮這些增強措施:

對於批量處理,實施異步支援來高效處理多個文件。 通過使用超時來監控大型操作的進度。

如何匯出已修正的影像?

匯出處理後的圖片以供驗證或進行進一步使用:

在實施複雜的工作流之前,使用簡單的一行OCR測試修正。

常見問題

如何在OCR處理前修正傾斜或歪斜的圖像?

IronOCR透過其OcrInput類提供強大的圖像方向校正功能。您可以連鎖使用如Rotate()、Deskew()和Scale()的方法來修正傾斜掃描、顛倒的文件和尺寸不正確的圖像。例如,使用input.Rotate(90).Deskew(45).Scale(150)在提取文字前於一行應用多重校正。

不同文件方向應使用哪些旋轉角度?

IronOCR支持任何旋轉角度,但常用值包括:90度用於橫向轉直向,180度用於顛倒文件,以及270度用於直向轉橫向。對於較小調整(1-10度),考慮使用IronOCR的Deskew()方法以獲得稍微歪斜文件的更好結果。

我可以自動檢測文件的正確方向嗎?

是的,IronOCR包含DetectPageOrientation方法,可以透過文字分析自動確定正確方向。此功能對於處理方向不一致的文件批次特別有用,比如歷史檔案或來自不同來源的多頁文件。

什麼時候我應該使用去傾斜與旋轉進行圖像校正?

當文件完全側傾或顛倒時,對於主要的方向問題(90、180、270度)使用IronOCR的Rotate()方法。對於通常出現在掃描文件中的輕微傾斜和歪斜,使用Deskew()方法。您可以將這兩種方法連鎖使用以全面校正不良掃描的圖像。

我該如何縮放圖像以提高OCR的準確性?

IronOCR的Scale()方法允許您按比例大小調整圖像。例如,Scale(150)將圖像大小增加50%,這可以提高低解析度掃描的OCR準確性。當與旋轉和去傾斜結合使用時,這尤其有用於全面圖像預處理。

IronOCR支援多種語言嗎?

IronOCR支援多種語言,使其成為全球需要不同語言文字識別的應用程式的多功能工具。

IronOCR能整合到現有的應用程式中嗎?

IronOCR被設計成可以輕鬆地整合到現有應用程式中,使用C#允許開發人員以最小的努力為其軟體新增OCR功能。

使用IronOCR進行文件管理的好處是什麼?

使用IronOCR進行文件管理通過將掃描的文件轉換為可搜索和可編輯的文字來簡化工作流程,減少手動資料輸入的需求並提高文件的可存取性。

IronOCR如何提高資料精確性?

IronOCR通過其先進的識別算法和影像校正功能提高資料精確性,確保文字提取過程既可靠又精確。

IronOCR有免費試用版嗎?

有的,Iron Software提供IronOCR的免費試用版,允許使用者在做出購買決定前測試其功能和能力。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立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 Summit提供內容支援。
準備開始了嗎?
Nuget 下載 6,151,372 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。