C# Guide: Using IronOCR Image Filters for Better OCR

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

O IronOCR fornece as ferramentas necessárias para ler imagens que podem precisar de pré-processamento na forma de filtros. Você pode escolher entre uma ampla variedade de filtros que podem manipular suas imagens para torná-las processáveis.

Início rápido: Aplicar filtros para limpar imagens OCR

Em uma única e simples sequência de chamadas, você pode aplicar os filtros DeNoise, Binarize e Deskew para melhorar a nitidez da digitalização antes do OCR. Este exemplo mostra como é fácil aprimorar imagens usando os filtros integrados do IronOCR e começar a usar imediatamente.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. Copie e execute este trecho de código.

    using var input = new IronOcr.OcrInput("scan.jpg"); input.DeNoise(true).Binarize().Deskew(45); var result = new IronOcr.IronTesseract().Read(input);
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Lista de filtros de imagem OCR

Os seguintes filtros de imagem podem realmente melhorar o desempenho:

  • Filters to change the Image Orientation
    • Rotate - Rotaciona imagens em um determinado número de graus no sentido horário. Para sentido anti-horário, use números negativos.
    • Deskew - Rotaciona uma imagem para que ela fique na posição correta e ortogonal. Isso é muito útil para OCR, pois a tolerância do Tesseract para digitalizações distorcidas pode ser de apenas 5 graus.
    • Scale - Dimensiona as páginas de entrada do OCR proporcionalmente.
  • Filters to manipulate Image Colors
    • Binarize - Este filtro de imagem transforma cada pixel em preto ou branco, sem meio-termo. Isso pode melhorar o desempenho do OCR em casos de contraste muito baixo entre texto e fundo.
    • ToGrayScale - Este filtro de imagem transforma cada pixel em tons de cinza. É improvável que melhore a precisão do OCR, mas pode melhorar a velocidade.
    • Invert - Inverte todas as cores. Por exemplo, o branco se torna preto e vice-versa.
    • ReplaceColor - Substitui uma cor em uma imagem por outra cor, dentro de um determinado limite.
  • Filters to improve Contrast in an Image
    • Contrast - Aumenta o contraste automaticamente. Esse filtro geralmente melhora a velocidade e a precisão do OCR em digitalizações de baixo contraste.
    • Dilate - Morfologia Avançada. A dilatação adiciona pixels aos limites dos objetos em uma imagem. O oposto de erodir.
    • Erode - Morfologia Avançada. A erosão remove pixels dos limites dos objetos. Oposto de dilatar.
  • Filters to reduce Image Noise
    • Sharpen - Aprimora documentos OCR desfocados e nivela os canais alfa para branco.
    • DeNoise - Remove ruído digital. Este filtro deve ser usado apenas em cenários onde se espera ruído.
    • EnhanceResolution - Melhora a resolução de imagens de baixa qualidade. Este filtro raramente é necessário, pois OcrInput.MinimumDPI e OcrInput.TargetDPI detectarão e resolverão automaticamente entradas de baixa resolução.

Exemplo e uso do filtro

No exemplo a seguir, demonstraremos como aplicar filtros em seu código.

: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);
Imports IronOcr
Imports System

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("my_image.png")
input.Deskew()

Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Filtro de depuração / O que o filtro está fazendo?

Se você estiver com dificuldades para ler imagens ou códigos de barras em seu programa, existe uma maneira de salvar uma imagem do resultado filtrado. Dessa forma, você pode depurar e ver exatamente o que cada filtro faz e como ele manipula sua imagem.

: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);
Imports IronOcr
Imports System

Private file = "skewed_image.tiff"
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 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
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Casos de uso de filtros

Girar

Referência da API

Explicação do filtro

A opção "Girar" é um filtro usado para definir manualmente uma rotação conhecida em uma imagem, de forma a deixá-la o mais reta possível. O IronOCR possui funcionalidade para executar Deskew(), no entanto, o grau de tolerância para isso é bastante estreito e é mais adequado para imagens que sejam quase perfeitamente retas (dentro de uma margem de 15 graus, aproximadamente). Para imagens de entrada que estejam 90 graus fora de sincronia, ou de cabeça para baixo, devemos chamar Rotate().

Exemplo de código de caso de uso

Este é um exemplo de como chamar Rotate() para corrigir uma imagem de cabeça para baixo:

: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);
Imports IronOcr
Imports System

Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private 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
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel
Antes de `Input.Rotate(180) ``
Screenshot related to Exemplo de código de caso de uso Screenshot Rotated related to Exemplo de código de caso de uso

Desvio

Referência da API

Explicação do filtro

Utiliza a Transformada de Hough para tentar endireitar uma imagem dentro de certos graus de tolerância. Isso é importante para imagens que não estejam completamente retas, pois um documento inclinado pode resultar em uma leitura incorreta.

ObserveEste método retorna um valor booleano, que é verdadeiro se o filtro foi aplicado e falso se não foi aplicado devido à impossibilidade de detectar a orientação da imagem. Isso falhará se a página não tiver conteúdo para definir a orientação.

Exemplo de código de caso de uso

Este é um exemplo de como chamar Deskew() para corrigir uma imagem distorcida:

: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.");
}
Imports IronOcr
Imports System

Private image = "paragraph_skewed.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply deskew with 15 degree snap
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
	' Read image into variable: result
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
Else
	Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
$vbLabelText   $csharpLabel

Escala

Referência da API

Explicação do filtro

A função Escala é um filtro útil de manipulação de imagens que ajuda a redimensionar uma imagem usando os pixels que ela já possui. Isso pode ser usado quando um código de barras não está sendo lido porque a imagem tem apenas dezenas de pixels de largura, com cada barra ocupando um pixel, ou se o texto for muito pequeno e não houver suavização de serrilhado.

ObserveExiste um tamanho ideal de código de barras 1000px x 1000px onde os códigos de barras podem ser lidos bem, o que deve ser considerado se o seu código de barras não estiver sendo encontrado.

Exemplo de código de caso de uso

Este é um exemplo de como chamar Scale() para aumentar o espaçamento entre as barras em um código de barras para leitura:

: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);
Imports IronOcr
Imports System

Private image = "small_barcode.png"
Private ocr = New IronTesseract()

' Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = True

Dim 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
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Binarizar

Referência da API

Explicação do filtro

O filtro Binarize classifica todos os pixels de uma imagem como pretos ou brancos, dependendo de um algoritmo adaptativo. Isso remove todas as cores e separa o fundo em um branco uniforme, com tudo o que for reconhecido como texto em preto total para facilitar a leitura.

Exemplo de código de caso de uso

Este é um exemplo de como chamar Binarize() para alinhar texto colorido e remover cores de fundo e ruído:

: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);
Imports IronOcr
Imports System

Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()

Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply Binarize
input.Binarize()

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel
Antes de `Binarize() ``
No Binarize related to Exemplo de código de caso de uso After Binarize related to Exemplo de código de caso de uso

Invertido

Referência da API

Explicação do filtro

O IronOCR lê melhor quando a imagem é black text on a white background. O filtro Invert é usado para conseguir isso invertendo todas as cores em uma imagem.

Exemplo de código de caso de uso

Este é um exemplo de como chamar Invert() para transformar branco sobre preto em preto sobre branco:

: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);
Imports IronOcr
Imports System

Private image = "before-invert.png"
Private ocr = New IronTesseract()

Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)

' Apply Invert
input.Invert(True)

' Read image into variable: result
Dim result = ocr.Read(input)

' Example print to console
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel
Before After
Before Invert related to Exemplo de código de caso de uso After Invert related to Exemplo de código de caso de uso

Perguntas frequentes

Como os filtros de imagem podem melhorar a precisão do OCR em C#?

Os filtros de imagem do IronOCR podem pré-processar imagens para melhorar sua qualidade, aumentando assim a precisão do OCR. Filtros como Binarizar e Contraste aumentam a legibilidade ajustando cores e contraste, enquanto Rotacionar e Corrigir Inclinação corrigem a orientação da imagem.

Quais filtros estão disponíveis para corrigir a orientação da imagem?

O IronOCR oferece filtros de Rotação e Correção de Inclinação para corrigir problemas de orientação da imagem. A opção Rotação permite o ajuste manual dos ângulos da imagem, enquanto a Correção de Inclinação endireita automaticamente imagens ligeiramente inclinadas.

Como o filtro Binarize afeta o pré-processamento de imagens?

O filtro Binarize do IronOCR converte os pixels da imagem em preto e branco, removendo as cores de fundo e melhorando a visibilidade do texto, o que aprimora especialmente a precisão do OCR em condições de baixo contraste.

Quando é apropriado usar filtros de redução de ruído?

Filtros de redução de ruído, como Sharpen e DeNoise, devem ser usados quando houver ruído digital nas imagens. Esses filtros limpam a imagem, tornando o texto mais nítido para melhores resultados de OCR no IronOCR.

Aumentar a resolução da imagem pode afetar o desempenho do OCR?

Sim, usar o filtro EnhanceResolution pode melhorar o desempenho do OCR aumentando a resolução de imagens de baixa qualidade. Embora as configurações padrão MinimumDPI e TargetDPI do IronOCR geralmente sejam suficientes, o filtro pode fornecer melhorias adicionais de resolução, se necessário.

Qual o papel dos filtros de manipulação de cores no OCR?

Os filtros de manipulação de cores do IronOCR, como Inverter, Converter para tons de cinza e Binarizar, ajustam as cores da imagem para melhorar a legibilidade do texto. Inverter altera os esquemas de cores, Converter para tons de cinza converte as imagens para preto e branco e Binarizar reduz as imagens a preto e branco.

Qual a diferença entre os filtros de Contraste e Nitidez?

O filtro de Contraste do IronOCR aumenta a diferença entre áreas claras e escuras, melhorando a clareza do texto, enquanto o filtro de Nitidez realça as bordas para tornar o texto mais distinto, ambos auxiliando em um melhor reconhecimento por OCR.

Como salvar e depurar imagens filtradas no IronOCR?

Para salvar e depurar imagens filtradas no IronOCR, use a função SaveAsImages após aplicar os filtros. Isso ajuda a visualizar os efeitos dos filtros e garante que as etapas de pré-processamento tenham melhorado a qualidade da imagem para OCR.

Quais são os filtros morfológicos avançados disponíveis no IronOCR?

O IronOCR oferece filtros morfológicos avançados, como Dilatar e Erodir. Dilatar adiciona pixels aos limites dos objetos para realçar as características, enquanto Erodir os remove; ambos são usados para clarificar detalhes da imagem e, assim, melhorar a precisão do OCR.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Analisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente de Programa Principal - Equipe da Comunidade .NET
Jeff também é Gerente de Programa Principal das equipes do .NET e do Visual Studio. Ele é o produtor executivo da série de conferências virtuais .NET Conf e apresenta o "Fritz and Friends", uma transmissão ao vivo para desenvolvedores que vai ao ar duas vezes por semana, onde ele conversa sobre tecnologia e escreve código junto com os espectadores. Jeff cria workshops, apresentações e planeja conteúdo para os maiores eventos de desenvolvedores da Microsoft, incluindo o Microsoft Build, o Microsoft Ignite, a .NET Conf e o Microsoft MVP Summit.
Pronto para começar?
Nuget Baixar 5,896,332 | Versão: 2026.5 just released
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.