如何使用图像校正滤镜
面对现实吧。 并非每张图像都是完美的,这也是条形码图像无法被 IronBarcode 读取的主要因素之一。 这不完全是用户的错。 为了避免重新捕获图像或使用其他图像增强软件的麻烦,IronBarcode推出了一个功能,使用户可以以编程方式对图像应用过滤器。 这将有助于IronBarcode读取图像并提高准确性。
继续阅读以了解IronBarcode中可用的图像校正滤镜、它们对图像的影响以及如何应用它们。
如何使用图像校正滤镜
- 下载 C# 库以使用图像校正过滤器
- 探索所有可用的图像修正滤镜
- 用自定义值配置每个图像校正滤波器
- 对不完美图像样本应用滤镜
- 借助过滤器从图像中提取条形码值
开始使用 IronBarcode
立即在您的项目中开始使用IronBarcode,并享受免费试用。
使用图像滤镜来改善阅读示例
要应用过滤器,请实例化 ImageFilterCollection 类并单独创建每个过滤器的实例。 然后将对象分配给BarcodeReaderOptions对象的ImageFilters属性。 将选项对象与样本图像一起传递到 Read
方法中。
让我们使用下面的图片作为我们的样本图片。
图片样本
从图像的初始外观来看,它似乎相当模糊。 然而,亮度是可以接受的,白色和黑色是可以区分的。 因此,我们至少需要应用SharpenFilter和ContrastFilter来提高条形码的可读性。 请参考下面的代码片段来对图像应用过滤器,读取它,并在控制台上显示。
: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
从上面的代码片段来看,除了应用过滤器和读取条形码之外,我们还将过滤后的图像导出到磁盘。 下面可以看到样本图片和过滤后图片的对比。
图片样本
过滤样本
探索图像修正滤镜
IronBarcode提供多种图像滤镜,专为图像修正设计。 这些过滤器可以帮助读取不完美的条形码图像并提高读取精度。 但是,用户需要了解这些过滤器是如何工作的,以便
选择合适的过滤器并避免性能问题,以免使用过多的过滤器或使用错误的过滤器。 以下是所有可用的过滤器:
- 自适应阈值滤波器
- 二值阈值滤镜
- 亮度滤镜
- 对比度滤镜
- InvertFilter
SharpenFilter
这些过滤器的应用顺序基于它们在ImageFilterCollection内的位置。
自适应阈值滤波器
AdaptiveThresholdFilter 是 IronBarcode 中可用的过滤器之一,它应用布拉德利自适应阈值这种技术自动确定用于图像二值化的阈值。 此滤镜非常适合于光照不均匀和背景强度变化的图像。
: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")
以下是使用不同数值进行滤波后的输出结果。
默认值
.9 值
构造函数还接受其他参数进行配置:
- 上部:上部(白色)用于阈值处理的颜色。
- 降低:降低(黑色)用于阈值处理的颜色。
- 阈值:阈值限制(0.0-1.0)考虑用于二值化。
矩形:应用处理器的矩形区域。
在上面的输出图像中可以看到,图像被二值化为只有黑色和白色。 虽然它似乎仍然不适合用于条形码阅读,因为需要组合使用过滤器。 用户需要试验参数敏感性以获得最佳结果。
二进制阈值滤波器
BinaryThresholdFilter通过在给定阈值处分割像素来过滤图像,用于比较颜色组件的亮度。 与AdaptiveThresholdFilter类似,如果使用不当,此过滤器可能会引入新的或不需要的噪声。 然而,IronBarcode已为过滤器的属性设置了默认值。
与自适应阈值过滤器类似,二值阈值过滤器也接受相同的额外参数进行配置。
- 上部:上部(白色)用于阈值处理的颜色。
- 降低:降低(黑色)用于阈值处理的颜色。
- 阈值:阈值限制(0.0-1.0)考虑用于二值化。
- 矩形:应用处理器的矩形区域。
: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")
以下是对样本图像应用滤镜后的输出示例。
默认值
.9 值
观察上面的输出图像,我们可以看到样本已经被二值化成黑白色。 然而,可以看出这个滤镜显然不适合这张图片,因为条形码的条被消除了,同时还引入了一些新的噪声。
亮度滤镜
BrightnessFilter 是 IronBarcode 图像过滤器集合中的另一个基本过滤器。 正如名称所示,此滤镜调整条形码图像的亮度。 此构造函数的输入可以改变输出图像的亮度量。 默认值为1,不改变图像。 值为0将创建一个完全黑色的图像,而大于1的值将使图像更亮。
: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")
以下是对样本输入应用该滤波器后的输出图像。
默认值
.5 值
对比度滤镜
ContrastFilter 用于调整图像中的对比度水平。 图像对比度是指图像中不同元素之间的颜色强度差异。 提高对比度级别可以增强细节的可见性,使图像看起来生动且醒目,而降低对比度则使图像显得更柔和、更含蓄。
默认值为1,不改变图像。 值为0将创建一幅完全灰色的图像,而大于1的值将增加图像对比度。
: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")
将此滤波器应用于样本输入,将生成下图。
默认值
.5 值
反相滤镜
此过滤器用于反转图像内的颜色,使得相反的颜色互换,例如白变黑,黑变白。当用户尝试读取带有背景色的条形码图像时,此功能特别有用。 与 BinaryThresholdFilter 不同,这个过滤器直接反转颜色,无需指定灵敏度。 此外,此滤镜可以与CropRectangle一起使用,以指定图像中需要反转颜色的位置,而不是反转整个图像的颜色。
: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")
下面的输出图像就是将该滤波器应用于输入图像样本的结果。
原图
倒置
锐化滤镜
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(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")
下图为 削尖的 版本的样本输入图像。
默认值
.5 值
将上面的图片与原始图片进行比较,它看起来更清晰,肯定有助于使用IronBarcode进行条形码读取。 在大多数情况下,SharpenFilter 总是与 ImageFilterCollection 类中的其他滤镜一起使用。
除了 图像过滤器
属性,用户还可以在 条码阅读器选项
要获得更准确的读数,请参阅 条 了解更多信息。