如何使用圖像校正濾鏡

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

海里海西米·賓·奧馬

讓我們面對現實吧。並非每張圖片都是完美的,這也是 IronBarcode 無法讀取條碼圖片的主要因素之一。這不完全是用戶的錯。與其經歷重新拍攝圖片或使用其他圖像增強軟體的麻煩,IronBarcode 提供了一個功能,使用戶能夠以程式化的方式對圖片應用濾鏡。這將有助於 IronBarcode 讀取圖片並提高準確性。

繼續閱讀以了解 IronBarcode 中可用的圖像校正濾鏡、它們對圖像的影響以及如何應用它們。

C# NuGet 程式庫用于

安裝與 NuGet

Install-Package BarCode
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

C# NuGet 程式庫用于

安裝與 NuGet

Install-Package BarCode
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

立即開始在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

查看 IronBarcodeNuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變。

C# NuGet 程式庫用于 nuget.org/packages/BarCode/
Install-Package BarCode

請考慮安裝 IronBarcode DLL 直接下載並手動安裝到您的專案或GAC表單: IronBarCode.zip

手動安裝到您的項目中

下載DLL

使用圖片濾鏡提高讀取範例

若要應用濾鏡,請實例化 ImageFilterCollection 類並單獨創建每個濾鏡的實例。然後將對象分配給 BarcodeReaderOptions 對象的 ImageFilters 屬性。 將選項對象與範例圖像一起傳入 Read 方法。

讓我們使用下面的圖像作為範例圖像。

示例圖片

從圖像的初步觀察來看,它似乎相當模糊。不過,亮度是可以接受的,白色和黑色可區分。因此,我們需要至少應用 SharpenFilterContrastFilter 來提高條碼的可讀性。請參考下面的代碼片段將濾鏡應用於圖像,讀取圖像並在控制台上顯示圖像效果。

// Your code snippet here
// Your code snippet here
' Your code snippet here
VB   C#
: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);

// Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png");

// 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)

' Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png")

' Write the result value to console
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
VB   C#

從上面的代碼片段中,除了應用過濾器和讀取條形碼之外,我們還將過濾後的圖像導出到磁碟。下面可以看到樣本圖像和過濾後圖像的比較。

示例圖片
過濾樣本

探索圖像校正濾鏡

IronBarcode 提供多種專為圖像校正設計的濾鏡。這些濾鏡可幫助讀取不完美的條碼圖像並提高讀取準確性。然而,用戶需要了解這些濾鏡的工作方式,才能選擇合適的濾鏡避免因使用過多濾鏡或使用錯誤濾鏡而引起的性能問題。以下是可用的所有濾鏡:

  • AdaptiveThresholdFilter
  • BinaryThresholdFilter
  • BrightnessFilter
  • ContrastFilter
  • InvertFilter
  • SharpenFilter

這些濾鏡的應用順序基於它們在 ImageFilterCollection 中的排列。

自適應閾值濾波器

AdaptiveThresholdFilter 是 IronBarcode 中可用的濾波器之一,它應用 布拉德利自适应阈值 對影像進行技術處理,自動確定二值化影像的閾值。此濾鏡非常適合具有不均勻照明和背景強度水平變化的影像。

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

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

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

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

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

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

' Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png")
VB   C#

以下是使用不同值應用過濾器的輸出。

預設自適應臨界值
自適應閾值 0.9

構造函數還接受其他參數進行配置:

  • Upper: Upper (白色) 顏色閾值的閾值。
  • Lower: 下限 (黑色) 顏色作為閾值校正。
  • 閾值:閾值限制 (0.0-1.0) 考慮二值化。
  • 矩形:矩形區域應用處理器。

如上圖所示,圖像已經二值化為只有 黑色白色。雖然它仍然看起來不太適合條碼閱讀,因為需要結合使用濾鏡。用戶需要嘗試調整參數的靈敏度才能達到最佳效果。

二值阈值过滤器

BinaryThresholdFilter 通過在給定的閾值處分割像素來篩選圖像,用於比較顏色成分的亮度。類似於自適應閾值過濾器,如果使用不當,此過濾器也可能引入新的或不需要的噪聲。然而,IronBarcode 已經為過濾器的屬性設置了默認值。

類似於自適應閾值過濾器,二值閾值過濾器接受相同的額外參數來進行配置。

  • Upper: 上限 (白色) 顏色閾值的閾值。
  • Lower: 下限 (黑色) 顏色作為閾值校正。
  • 閾值:閾值限制 (0.0-1.0) 考慮二值化。
  • 矩形:應用處理器的矩形區域。
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-binary-threshold.cs
using IronBarCode;

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

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

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

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

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

' Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png")
VB   C#

以下是對樣本圖片應用濾鏡的樣本輸出。

二值化預設閾值
0.9 二值化閾值

觀察上面的輸出圖像,我們可以看到樣本已經被二值化為黑白色。但是,由於條碼條紋被消除以及引入了一些新的噪點,可以看出這個濾鏡顯然不適合這個圖像。

亮度濾鏡

BrightnessFilter 是 IronBarcode 中影像濾鏡集合中的另一個基本濾鏡。顧名思義,這個濾鏡調整條碼影像的亮度。傳入這個建構子的輸入可以變化輸出影像的亮度。預設值為 1,這會使影像保持不變。值為 0 會創建一個完全黑色的影像,而高於 1 的值會使影像變得更亮。

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

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

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

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

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

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

' Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png")
VB   C#

以下是將此篩選器應用於範例輸入後的輸出影像。

預設亮度
1.5 亮度

對比度濾鏡

ContrastFilter 用於調整圖像中的對比度水平。圖像對比度指的是圖像中不同元素之間的顏色強度差異。增加對比度水平可以增強細節的可見性,使圖像顯得更加生動和醒目,而減少對比度則會使圖像顯得更柔和和內斂。

預設值為1,這將使圖像保持不變。值為0會創建一個完全灰色的圖像,而值高於1則會增加圖像的對比度。

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

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

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

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

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

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

' Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png")
VB   C#

將此篩選器應用於示例輸入將生成下圖。

預設對比度
對比 1.5

反轉濾鏡

此濾鏡用於反轉圖像內的顏色,將顛倒的顏色,例如白色變成黑色,黑色變成白色。當用戶嘗試閱讀背後顏色的條碼圖像時,這特別有用。與 BinaryThresholdFilter 不同,此濾鏡直接反轉顏色,無需指定靈敏度。此外,此濾鏡可以與 CropRectangle 一起使用,以指定需要顏色反轉的圖像位置,而不是反轉整個圖像的顏色。

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

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

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

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

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

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

' Export file to disk
results.ExportFilterImagesToDisk("invert.png")
VB   C#

下面的輸出圖像是將此過濾器應用於樣本輸入圖像後的結果。

原始圖像
反轉

銳化濾鏡

IronBarcode 的最後一個圖像校正濾鏡是SharpenFilter。此濾鏡可增強圖像的銳利度,對於模糊圖像非常有用。用戶可以通過在實例化濾鏡對象時調整Sigma值來調整圖像的銳利度。默認值是3。增加sigma值可以增加圖像的銳利度。

: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()
    {
        new SharpenFilter((float)3.5),
        new ContrastFilter(2)
    },
};
// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png");

// 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(CSng(3.5)),
		New ContrastFilter(2)
	}
}
' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("filteredSample.png")

' Write the result value to console
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
VB   C#

下圖是 銳化 範例輸入圖像的版本。

預設銳化
0.5銳化

將上圖與原圖進行比較後,看起來更清晰,確實能幫助使用IronBarcode進行條碼讀取。在大多數情況下,SharpenFilter總是與其他過濾器一起應用在ImageFilterCollection類中。

除了 圖像過濾器 屬性,使用者也可以加入其他屬性 條碼讀取器選項 要獲得更準確的閱讀,請參見此內容 文章 了解更多資訊。

海里海西米·賓·奧馬

軟體工程師

和所有優秀的工程師一樣,Hairil 是一位熱衷學習的人。他正在精進自己對 C#、Python 和 Java 的知識,利用這些知識為 Iron Software 團隊的成員創造價值。Hairil 從馬來西亞的馬來西亞工藝大學加入了 Iron Software 團隊,他在那裡獲得了化學和過程工程學士學位。