Como usar filtros de correção de imagem para código de barras em C#

Usando Filtros de Correção de Imagem C# para Melhorar a Decodificação de Código de Barras

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

IronBarcode fornece filtros de correção de imagem integrados como SharpenFilter e ContrastFilter que melhoram programaticamente imagens de códigos de barras borradas ou imperfeitas, aumentando a precisão de leitura sem a necessidade de software externo de edição de imagem ou recaptura de imagens.

Nem toda imagem é perfeita, e a má qualidade da imagem é um dos principais fatores que impedem a leitura bem-sucedida de códigos de barras no IronBarcode. Em vez de recapturar imagens ou usar software de melhoria de imagem externa, IronBarcode fornece filtros embutidos que melhoram programaticamente a qualidade da imagem. Esses filtros ajudam IronBarcode a ler imagens difíceis e a melhorar a precisão geral.

Continue lendo para aprender sobre os filtros de correção de imagem disponíveis no IronBarcode, seus efeitos nas imagens e como aplicá-los. Para técnicas mais abrangentes de leitura de código de barras, confira nosso tutorial de Leitura de Códigos de Barras.

Início Rápido: Aplique Filtros de Nitidez e Contraste para Melhorar Leituras de Código de Barras

Em apenas um passo, aplique SharpenFilter e ContrastFilter do IronBarcode usando o ImageFilterCollection em BarcodeReaderOptions. Isso melhora a digitalização de códigos de barras com configuração mínima e sem necessidade de ferramentas externas.

  1. Instale IronBarcode com o Gerenciador de Pacotes NuGet

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

    BarcodeResults results = IronBarCode.BarcodeReader.Read("input.png", new IronBarCode.BarcodeReaderOptions { ImageFilters = new IronBarCode.ImageFilterCollection() { new IronBarCode.SharpenFilter(3.5f), new IronBarCode.ContrastFilter(2.0f) } });
  3. Implante para testar em seu ambiente de produção.

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

    arrow pointer

Como Aplico Filtros de Imagem para Melhorar a Leitura de Código de Barras?

Para aplicar filtros, instancie a classe ImageFilterCollection e crie instâncias de cada filtro individualmente. Em seguida, atribua o objeto à propriedade ImageFilters do objeto BarcodeReaderOptions. Passe o objeto de opções para o método Read junto com a imagem de amostra. Para opções avançadas de instalação, visite nosso guia de pacotes NuGet.

Use a imagem abaixo como nossa imagem de exemplo.

Código de barras desfocado com o número 4900203187590 mostrando baixa qualidade de imagem antes do aprimoramento por filtragem

A imagem parece bastante borrada. No entanto, o brilho é aceitável, e as cores branca e preta são distinguíveis. Portanto, aplique pelo menos SharpenFilter e ContrastFilter para melhorar a legibilidade do código de barras. Consulte o trecho de código abaixo para aplicar filtros à imagem, lê-la e exibir os resultados no console.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-apply-filter.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection()
    {
        new SharpenFilter(3.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Write the result value to console
foreach (BarcodeResult result in results)
{
    Console.WriteLine(result.Text);
}
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection() From {
		New SharpenFilter(3.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Write the result value to console
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
$vbLabelText   $csharpLabel

O trecho de código acima aplica filtros, lê o código de barras e exporta a imagem filtrada para o disco. A comparação entre as imagens de exemplo e filtradas é mostrada abaixo.

Imagem de código de barras desfocada com o número 4902030187590 demonstrando baixa qualidade de imagem
Código de barras com legibilidade aprimorada após aplicar filtros de imagem, mostrando linhas verticais nítidas e o número 4902030187590

Quais Filtros de Correção de Imagem Estão Disponíveis no IronBarcode?

IronBarcode oferece múltiplos filtros de imagem especificamente projetados para correção de imagem. Esses filtros auxiliam na leitura de imagens de códigos de barras imperfeitos e melhoram a precisão da leitura. No entanto, compreenda como esses filtros funcionam para selecionar filtros adequados e evitar problemas de desempenho devido ao uso de muitos filtros ou ao uso do filtro errado. Os filtros disponíveis incluem:

  • AdaptiveThresholdFilter
  • BinaryThresholdFilter
  • BrightnessFilter
  • ContrastFilter
  • InvertFilter
  • SharpenFilter
  • ErodeFilter
  • DilateFilter
  • HistogramEqualizationFilter
  • Filtros de Desfoque
    • GaussianBlurFilter
    • BilateralFilter
    • MedianBlurFilter

A ordem em que os filtros são aplicados é baseada na sua colocação dentro do ImageFilterCollection. Para documentação detalhada da API sobre esses filtros, visite nossa Referência da API.

Como Funciona o Filtro de Limite Adaptativo?

AdaptiveThresholdFilter é um filtro disponível no IronBarcode que aplica a técnica Bradley Adaptive Threshold à imagem, que determina automaticamente o limiar para binarizar uma imagem. Este filtro é ideal para imagens com iluminação não uniforme e níveis de intensidade de fundo variados.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-adaptive-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new AdaptiveThresholdFilter(0.9f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New AdaptiveThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png")
$vbLabelText   $csharpLabel

Abaixo estão os resultados de aplicar o filtro usando diferentes valores.

Linhas verticais mostrando diferentes saídas do filtro de limiar adaptativo com padrões sólidos e tracejados
Imagem de código de barras de baixa qualidade mostrando o número UPC 902030187590 com distorção visual significativa

O construtor aceita parâmetros adicionais para configuração:

  • Upper: Cor superior (branca) para limiarização.
  • Lower: Cor inferior (preta) para limiarização.
  • Threshold: Limite de limiarização (0,0-1,0) para binarização.
  • Rectangle: Região retangular para aplicar o processador.

Como mostrado na imagem de saída acima, a imagem é binarizada para ter apenas cores preta e branca. Embora ainda não pareça ideal para leitura de código de barras, os filtros precisam ser usados em combinações. Experimente com a sensibilidade do parâmetro para obter os melhores resultados.

Como Funciona o Filtro de Limite Binário?

O BinaryThresholdFilter filtra uma imagem dividindo os pixels no limiar dado, comparando a luminância de um componente de cor. Semelhante ao AdaptiveThresholdFilter, este filtro pode introduzir ruídos novos ou indesejados se não utilizado corretamente. No entanto, o IronBarcode definiu valores padrão para as propriedades do filtro.

Semelhante ao AdaptiveThresholdFilter, o BinaryThresholdFilter aceita os mesmos parâmetros adicionais para configuração:

  • Upper: Cor superior (branca) para limiarização.
  • Lower: Cor inferior (preta) para limiarização.
  • Threshold: Limite de limiarização (0,0-1,0) para binarização.
  • Rectangle: Região retangular para aplicar o processador.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-binary-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BinaryThresholdFilter(0.9f)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BinaryThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png")
$vbLabelText   $csharpLabel

Abaixo está a saída de exemplo ao aplicar filtros na imagem de exemplo.

Três exemplos de saídas do filtro de limiar binário mostrando padrões de linhas verticais esparsos, pontilhados e densos
Imagem de código de barras processada com filtro de limiar binário 0.9 mostrando contraste em preto e branco

Observando a imagem de saída acima, o exemplo foi binarizado em preto e branco. No entanto, este filtro não é claramente adequado para esta imagem devido às barras de código de barras serem eliminadas e novo ruído ser introduzido. Para lidar com cenários difíceis de código de barras, consulte nosso guia de solução de problemas para códigos de barras não reconhecidos.

Como Ajusto o Brilho da Imagem para Melhor Leitura de Código de Barras?

BrightnessFilter é outro filtro essencial na coleção de filtros de imagem no IronBarcode. Como o nome sugere, este filtro ajusta o brilho da imagem do código de barras. A entrada para este construtor varia a Quantidade de brilho na imagem de saída. O valor padrão é 1, o que deixa a imagem inalterada. Um valor de 0 cria uma imagem completamente preta, enquanto valores acima de 1 tornam a imagem mais brilhante.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-brightness.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BrightnessFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BrightnessFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png")
$vbLabelText   $csharpLabel

Abaixo está a imagem de saída após aplicar este filtro ao exemplo de entrada.

Blurry UPC barcode sample showing default brightness level before filter enhancement
Código de barras desfocado com o número de produto 4902030187590, demonstrando baixo brilho ou baixa qualidade de imagem

Como Uso o Filtro de Contraste para Melhorar Imagens de Código de Barras?

O ContrastFilter ajusta o nível de contraste em uma imagem. O contraste da imagem refere-se à diferença na intensidade de cor entre vários elementos de uma imagem. Aumentar o nível de contraste melhora a visibilidade dos detalhes, fazendo a imagem parecer vívida e marcante, enquanto reduzir o contraste faz a imagem parecer mais suave e sutil. Para mais detalhes sobre personalização de códigos de barras, veja nosso guia sobre como personalizar estilos de código de barras.

O valor padrão é 1, o que deixa a imagem inalterada. Um valor de 0 cria uma imagem completamente cinza, enquanto valores acima de 1 aumentam o contraste da imagem.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-contrast.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new ContrastFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New ContrastFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png")
$vbLabelText   $csharpLabel

Aplicar este filtro ao exemplo de entrada produz a imagem abaixo.

Código de barras desfocado com o número 4902030187590 demonstrando as configurações padrão do filtro de contraste
Código de barras desfocado com o número 4902030187590 demonstrando imagem de baixo contraste

Quando Devo Usar o Filtro de Inversão?

Este filtro inverte as cores dentro de uma imagem, tornando as cores opostas, como branco se torna preto e preto se torna branco. É particularmente útil ao ler uma imagem de código de barras com uma cor de fundo. Ao contrário do BinaryThresholdFilter, este filtro inverte as cores diretamente sem necessidade de especificar sensibilidade. Além disso, este filtro pode ser usado com um CropRectangle para especificar a localização na imagem que precisa das cores invertidas, em vez de inverter as cores para a imagem inteira. Saiba mais sobre como especificar regiões de corte em nosso tutorial de regiões de corte.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-invert.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new InvertFilter(),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("invert.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New InvertFilter()}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("invert.png")
$vbLabelText   $csharpLabel

A imagem de saída abaixo é o resultado de aplicar este filtro à imagem de entrada de exemplo.

Código de barras UPC desfocado mostrando o número 480203187590 - imagem original antes da aplicação do filtro de inversão
Código de barras invertido e desfocado mostrando barras brancas sobre fundo escuro com a sequência numérica 4902030187590

Como Corrijo Imagens de Código de Barras Embaçadas com o Filtro de Nitidez?

O IronBarcode fornece um filtro de nitidez. Este filtro aprimora a nitidez de uma imagem e é muito útil ao lidar com imagens embaçadas. Manipule este filtro para ajustar a nitidez de uma imagem ajustando o valor Sigma ao instanciar o objeto do filtro. O valor padrão é 3. Aumente o valor de sigma para aumentar a nitidez da imagem. Para outras opções de otimização de desempenho, consulte nosso guia sobre opções de velocidade de leitura.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-sharpen.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(0.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png");
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New SharpenFilter(0.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png")
$vbLabelText   $csharpLabel

A imagem abaixo é a versão nítida da imagem de entrada de exemplo.

Imagem de código de barras desfocada demonstrando qualidade sem nitidez antes de aplicar o filtro de nitidez
Exemplo de código de barras desfocado mostrando os efeitos da degradação da qualidade da imagem

Comparando a imagem acima com a imagem original, ela parece mais nítida e ajuda na leitura de códigos de barras usando o IronBarcode. Na maioria dos casos, SharpenFilter é sempre aplicado junto com outros filtros na classe ImageFilterCollection.

Para Que Serve o Filtro de Erosão?

O ErodeFilter remove pequenos ruídos brancos e espessa as barras dos códigos de barras removendo pixels perto da borda das formas. Este filtro é melhor usado em cenários onde o fundo do código de barras tem muitas manchas brancas ou se a imagem do código de barras tem resolução muito baixa ou está borrada, resultando em barras fundidas. O ErodeFilter torna as barras mais grossas enquanto remove manchas brancas no fundo. Para mais informações sobre como lidar com imagens imperfeitas, veja nosso exemplo de código de barras imperfeito.

Aumente o efeito da erosão inserindo um inteiro representando kernelSize para o filtro. Quanto maior o tamanho do kernel, mais forte o efeito na imagem de entrada. Observe que o kernelSize é um quadrado e neste exemplo seria um kernel 5x5.

Como exemplo, use o ErodeFilter com um tamanho de kernel maior para exibir os efeitos do filtro.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-erode.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new ErodeFilter(5),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("erodeFilter.jpg");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New ErodeFilter(5)
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("erodeFilter.jpg")
$vbLabelText   $csharpLabel
Código de barras desfocado mostrando o número 4002030187590 - exemplo para demonstração do filtro de erosão
Código de barras desfocado mostrando listras verticais em preto e branco com código numérico

Comparando as imagens de entrada e saída acima, algumas barras estão visivelmente mais grossas devido à natureza mais agressiva de inserir um tamanho de kernel maior para o filtro. No entanto, as manchas brancas na imagem geral diminuíram. Pela natureza do filtro de erosão, quanto maior o tamanho do kernel, você pode apagar barras finas se aplicado de maneira muito agressiva, como mostrado na imagem acima. Teste e refine o efeito alterando o valor do tamanho do kernel para o ErodeFilter.

Como o Filtro de Dilatação ajuda na leitura de códigos de barras?

O DilateFilter funciona como o inverso do ErodeFilter, operando por expandir regiões brilhantes—tipicamente o fundo—por meio da adição de pixels às bordas dos objetos. Embora este filtro repare códigos de barras danificados ou apagados preenchendo pequenas lacunas ou realçando áreas de baixo contraste, note que seu efeito nas barras de código de barras difere da intuição. Como a dilatação aumenta os espaços brilhantes, ela indiretamente afina elementos escuros, como barras pretas de código de barras (assumindo um fundo branco). Isso torna o filtro particularmente eficaz em cenários onde as barras de código de barras parecem excessivamente grossas ou mescladas, mas o uso excessivo pode degradar a precisão da leitura ao afinar excessivamente as barras.

Semelhante ao acima, aumente o efeito do filtro inserindo um inteiro representando o kernelSize para o filtro.

Para o exemplo abaixo, use um tamanho de kernel maior para demonstrar os efeitos do DilateFilter.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-dilate.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new DilateFilter(5),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("dilateFilter.jpg");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New DilateFilter(5)
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("dilateFilter.jpg")
$vbLabelText   $csharpLabel
Imagem de código de barras desfocada mostrando o número 4902030187590 - exemplo para processamento do filtro de dilatação
Código de barras desfocado com sequência numérica abaixo das barras verticais

Como mostrado na imagem acima, o uso agressivo de DilateFilter pode potencialmente destruir a estrutura do código de barras, fundindo barras próximas e criando zonas calmas nos códigos de barras. Teste e refine os efeitos na imagem alterando o valor do tamanho do kernel para ser maior ou menor, dependendo da imagem de entrada.

Quando devo usar o filtro de Equalização de Histograma?

O HistogramEqualizationFilter melhora o contraste da imagem redistribuindo intensidades de pixel para melhorar a clareza. É mais comumente usado quando o código de barras tem baixo contraste, como imagens desbotadas ou apagadas, ou imagens com iluminação desigual, como sombras escuras ou brilho intenso. Ao analisar o histograma da imagem, que é a distribuição do brilho dos pixels, ele redistribui os valores dos pixels aumentando o contraste ao esticar a faixa de intensidade, onde pixels escuros se tornam mais escuros e pixels claros se tornam mais claros.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-histogram-equalization-filter.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new HistogramEqualizationFilter(),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("histogramEqualizationFilter.jpg");
Imports IronBarCode

Dim options As New BarcodeReaderOptions() With {
    .ImageFilters = New ImageFilterCollection(True) From {
        New HistogramEqualizationFilter()
    }
}

' Apply options and read the barcode
Dim results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("histogramEqualizationFilter.jpg")
$vbLabelText   $csharpLabel
Código de barras desfocado com o número 4902030187590 usado como imagem de teste para o filtro de equalização de histograma
Código de barras com listras verticais em preto e branco mostrando o número 4902030187590

Como mostrado na imagem acima, as barras pretas estão visivelmente mais escuras, e os espaços estão visivelmente mais brilhantes em comparação com a imagem original.

Quais filtros de desfoque podem ajudar na redução de ruído de código de barras?

Como o Filtro GaussianBlur reduz o ruído da imagem?

O GaussianBlurFilter aplica um desfoque Gaussiano a uma imagem. Este filtro comumente reduz o ruído em uma imagem. Para um guia abrangente sobre como lidar com códigos de barras imperfeitos, consulte nosso tutorial de correção de orientação de imagem.

O filtro funciona ao calcular a média dos valores dos pixels vizinhos na imagem usando uma função Gaussiana. O método se baseia em dois fatores ajustáveis:

  • Kernel: uma matriz usada para calcular a média dos pixels.
  • Sigma: um valor que controla a intensidade do desfoque.

O tamanho padrão do kernel é de 3x3 pixels, e o valor padrão de Sigma é de 3.0, produzindo um desfoque moderado. Aumentar o valor de Sigma resulta em um efeito de desfoque mais forte. Você também pode personalizar o kernel para controlar o tamanho da vizinhança que o filtro de desfoque media.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-gaussianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new GaussianBlurFilter(3, 3, 3.0f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New GaussianBlurFilter(3, 3, 3.0F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png")
$vbLabelText   $csharpLabel

Aplicar este filtro ao exemplo de entrada produz a imagem abaixo.

Código de barras desfocado com o número 4902030187590 demonstrando baixa qualidade de imagem
Imagem de código de barras com filtro de desfoque gaussiano aplicado, mostrando linhas verticais desfocadas e números distorcidos

Quando devo usar o Filtro Bilateral?

O BilateralFilter suaviza imagens enquanto preserva as bordas. Diferente de técnicas simples de desfoque que afetam todos os pixels uniformemente, o Filtro Bilateral leva em conta tanto as diferenças de cor quanto a distância dos pixels, tornando-o eficaz para suavização com preservação de bordas.

O método depende de três fatores ajustáveis:

  • NeighborhoodDiameter: Diâmetro da vizinhança de pixels (padrão: 5).
  • SigmaColor: Influência de cor determinando o impacto da diferença de cor (padrão: 75,0).
  • SigmaSpace: Influência espacial determinando o impacto da distância (padrão: 75,0).
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-bilateral.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BilateralFilter(5, 75, 75),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("bilateral.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BilateralFilter(5, 75, 75)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("bilateral.png")
$vbLabelText   $csharpLabel

Aplicar este filtro ao exemplo de entrada produz a imagem abaixo.

Código de barras desfocado demonstrando baixa qualidade de imagem com linhas verticais e o número 4902030187590
Código de barras desfocado com o número 4902030187590 demonstrando baixa qualidade de imagem

O que torna o Filtro MedianBlur diferente para a redução de ruído?

O MedianBlurFilter reduz o ruído em uma imagem substituindo o valor de cada pixel pelo valor mediano dos pixels circundantes. Este filtro se destaca particularmente na preservação de bordas enquanto remove ruídos. Para explorar mais sobre as configurações de leitura de código de barras, visite nosso guia de configurações de leitura de código de barras.

  • KernelSize: Tamanho da vizinhança para cálculo da mediana (deve ser ímpar, padrão: 5).
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-medianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new MedianBlurFilter(5),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New MedianBlurFilter(5)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png")
$vbLabelText   $csharpLabel

Aplicar este filtro ao exemplo de entrada produz a imagem abaixo.

Exemplo de código de barras desfocado mostrando baixa qualidade de imagem com artefatos digitais e legibilidade reduzida
Código de barras com filtro de desfoque de mediana aplicado mostrando linhas verticais desfocadas e o número 4902030187590

Como posso salvar imagens filtradas em cada etapa do processamento?

Ao aplicar múltiplos filtros ao código de barras, visualizar a saída após cada método de filtro pode ser difícil. Este recurso permite salvar a imagem filtrada após cada filtro ser aplicado, na ordem em que são processados. Para habilitar esta funcionalidade, primeiro passe true para o construtor ImageFilterCollection. Em seguida, use o método ExportFilterImagesToDisk para fornecer o caminho e o nome para as imagens de saída. Para mais exemplos sobre como salvar códigos de barras, veja nosso exemplo de conversão de código de barras para imagem.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-save-iterations.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(3.5f),
        new AdaptiveThresholdFilter(0.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {
		New SharpenFilter(3.5F),
		New AdaptiveThresholdFilter(0.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png")
$vbLabelText   $csharpLabel

Os filtros são aplicados na ordem do código e as imagens de saída refletem os resultados de cada iteração:

  • Sharpen -> Após Sharpen
  • Sharpen + AdaptiveThreshold -> Após AdaptiveThreshold
  • Sharpen + AdaptiveThreshold + Contrast -> Após Contrast
Código de barras desfocado com o número 4902030187590
Blurry UPC barcode showing number 4902030187590
Exemplo de código de barras degradado mostrando baixa qualidade de imagem com o número 9020301875905
Código de barras fortemente pixelado com o número UPC 902030187590

Além das propriedades ImageFilters, adicione outras propriedades ao BarcodeReaderOptions para uma leitura mais precisa; veja este artigo para mais informações.

Perguntas frequentes

O que são filtros de correção de imagem e por que são necessários para a leitura de códigos de barras?

Os filtros de correção de imagem do IronBarcode são ferramentas integradas que melhoram programaticamente imagens de código de barras desfocadas ou imperfeitas. Eles são essenciais porque a baixa qualidade da imagem é um dos principais fatores que impedem a leitura correta dos códigos de barras. O IronBarcode oferece filtros como o SharpenFilter e o ContrastFilter que melhoram a precisão da leitura sem a necessidade de software externo de edição de imagens ou de capturar novas imagens.

Como posso aplicar filtros de correção de imagem para melhorar a leitura de códigos de barras?

Para aplicar filtros no IronBarcode, crie uma instância de ImageFilterCollection e adicione instâncias de filtro individuais a ela. Em seguida, atribua esta coleção à propriedade ImageFilters de BarcodeReaderOptions e passe-a para o método Read. Por exemplo: new BarcodeReaderOptions { ImageFilters = new ImageFilterCollection() { new SharpenFilter(3.5f), new ContrastFilter(2.0f) } }.

Quais filtros de imagem são recomendados para imagens de código de barras desfocadas?

Para imagens de código de barras desfocadas, a IronBarcode recomenda o uso de pelo menos os filtros SharpenFilter e ContrastFilter. O SharpenFilter aprimora a definição das bordas em imagens desfocadas, enquanto o ContrastFilter melhora a distinção entre áreas claras e escuras. Esses filtros funcionam em conjunto para tornar os códigos de barras mais legíveis sem a necessidade de processamento externo da imagem.

Posso personalizar a intensidade dos filtros de correção de imagem?

Sim, o IronBarcode permite configurar cada filtro com valores personalizados. Por exemplo, o SharpenFilter aceita um parâmetro float (como 3.5f) para controlar a intensidade da nitidez, e o ContrastFilter aceita um parâmetro (como 2.0f) para ajustar os níveis de contraste. Essa personalização ajuda a otimizar a eficácia do filtro para diferentes condições de imagem.

Preciso de ferramentas externas de edição de imagens para melhorar as imagens de código de barras?

Não, o IronBarcode elimina a necessidade de ferramentas externas de edição de imagens, fornecendo filtros de correção de imagem integrados. Esses filtros programáticos, como SharpenFilter e ContrastFilter, podem aprimorar a qualidade da imagem diretamente em seu aplicativo .NET, economizando tempo e evitando a dependência de softwares de terceiros.

Quais são os benefícios de usar IronBarcode para operações de código de barras?

IronBarcode oferece benefícios como facilidade de integração, suporte para vários formatos de código de barras, geração de imagens de alta qualidade e capacidades robustas de leitura, tornando-se uma ferramenta abrangente para operações de código de barras em C#.

IronBarcode oferece suporte para customização de aparência do código de barras?

Sim, IronBarcode oferece amplas opções de personalização para a aparência do código de barras, incluindo cor, tamanho e anotações de texto, permitindo que você adapte os códigos de barras às suas necessidades específicas de design.

Como o IronBarcode pode ajudar a melhorar a eficiência nos processos de negócios?

IronBarcode melhora a eficiência dos processos de negócios ao permitir a geração e leitura rápida e precisa de códigos de barras, reduzindo erros de entrada de dados manuais e melhorando o rastreamento de inventário e ativos.

Quais habilidades de programação são necessárias para implementar o IronBarcode em um projeto?

Conhecimento básico de programação C# é suficiente para implementar o IronBarcode em um projeto, pois ele fornece métodos diretos e documentação abrangente para guiar os desenvolvedores.

IronBarcode é adequado tanto para projetos pequenos quanto para grandes aplicações empresariais?

IronBarcode foi projetado para ser escalável e versátil, tornando-o adequado tanto para projetos pequenos quanto para grandes aplicações empresariais que exigem soluções robustas de código de barras.

Hairil Hasyimi Bin Omar
Engenheiro de Software
Como todo grande engenheiro, Hairil é um ávido aprendiz. Ele está aprimorando seus conhecimentos em C#, Python e Java, usando esse conhecimento para agregar valor aos membros da equipe da Iron Software. Hairil ingressou na equipe da Iron Software vindo da Universiti Teknologi MARA, na Malásia, onde se formou em ...
Leia mais
Pronto para começar?
Nuget Downloads 2,317,217 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.