画像補正フィルターの使用方法
正直に言いましょう。 すべての画像が完璧というわけではなく、これはIronBarcodeがバーコード画像を読み取れない主な要因の1つでもあります。 これは完全にユーザーの責任ではありません。 再キャプチャーや他の画像強調ソフトウェアを使用する手間をかける代わりに、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);
}
上記のコードスニペットから、フィルタを適用してバーコードを読み取ることに加えて、フィルタ処理された画像をディスクにエクスポートしました。 サンプル画像とフィルター処理された画像の比較は以下でご覧いただけます。

サンプル画像

フィルタリングされたサンプル
画像補正フィルターを探る
IronBarcodeは、画像補正のために特別に設計された複数の画像フィルターを提供します。 これらのフィルターは、不完全なバーコード画像の読み取りを補助し、読み取り精度を向上させることができます。 ただし、ユーザーはこれらのフィルターの動作を理解する必要があります。
適切なフィルターを選択し、過度なフィルターの使用や誤ったフィルターの使用によるパフォーマンスの問題を回避してください。 以下は利用可能なすべてのフィルターです:
- 適応型しきい値フィルター
- バイナリしきい値フィルター
- ブライトネスフィルター
- コントラストフィルター
- 反転フィルター
- シャープンフィルター
-
ブラー フィルター
-
ガウシアンブラー フィルター
-
バイラテラルフィルター
- MedianBlurFilter
これらのフィルターが適用される順序は、ImageFilterCollection内での配置に基づいています。
-
適応型閾値フィルター
AdaptiveThresholdFilter は、画像に Bradley Adaptive Threshold 技術を適用し、画像を2値化するためのしきい値を自動的に決定するフィルターのひとつで、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");
以下は、さまざまな値を使用してフィルタを適用した結果です。

デフォルト値

0.9 値
コンストラクタは、構成のための追加パラメータも受け付けます。
- 上限: しきい値用の上限(白)色。
- 下限: しきい値のための下限(黒)色。
- しきい値: しきい値制限 (0.0-1.0) は二値化のために考慮されます。
-
長方形: プロセッサーを適用する領域。
上記の出力画像に見られるように、画像は黒と白の色だけになるように二値化されています。 フィルターを組み合わせて使用する必要があるため、バーコード読み取りには最適ではないようです。 ユーザーは最適な結果を得るためにパラメータの感度を調整する必要があります。
バイナリしきい値フィルター
BinaryThresholdFilterは、指定されたしきい値でピクセルを分割し、色コンポーネントの輝度を比較するために使用されるフィルターです。 AdaptiveThresholdFilterと同様に、このフィルターは正しく使用されない場合、新しいノイズや不要なノイズを導入する可能性があります。 ただし、IronBarcode はフィルタのプロパティのデフォルト値を設定しています。
AdaptiveThresholdFilterと同様に、BinaryThresholdFilterも構成のために同じ追加パラメーターを受け入れます。
- 上限: しきい値用の上限(白)色。
- 下限: しきい値のための下限(黒)色。
- しきい値: しきい値制限 (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");
以下は、サンプル画像にフィルターを適用した際の出力例です。

デフォルト値

0.9 値
上の出力画像を観察すると、サンプルが白黒の色に2値化されていることがわかります。 しかし、このフィルターはバーコードのバーが消去され、新しいノイズが追加されたため、この画像には明らかに適していないことがわかります。
明るさフィルター
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");
以下は、サンプル入力にこのフィルターを適用した後の出力画像です。

デフォルト値

1.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");
このフィルターをサンプル入力に適用すると、以下の画像が生成されます。

デフォルト値

1.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");
以下の画像は、サンプル入力画像にこのフィルターを適用した結果です。

元の画像

反転
シャープ化フィルター
IronBarcodeの最後の画像補正フィルターはSharpenFilterです。 このフィルターは画像のシャープネスを強化し、ぼやけた画像に非常に有用です。 ユーザーは、フィルターオブジェクトをインスタンス化する際にSigma値を調整して、画像のシャープネスを調整するためにこのフィルターを操作できます。 デフォルト値は3です。シグマ値を増やすことで画像の鮮明さを向上させることができます。
: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");
下の画像は、サンプル入力画像の鮮明化されたバージョンです。

デフォルト値

0.5 値
上記の画像と元の画像を比較すると、こちらの方がより鮮明であり、IronBarcodeを使用してのバーコード読み取りに確実に役立つと考えられます。 ほとんどの場合、SharpenFilterはImageFilterCollectionクラスの他のフィルタと一緒に常に適用されます。
ブラー フィルター
ガウシアンブラー フィルター
GaussianBlurFilter は、画像にガウシアンブラーを適用するために使用されます。 このフィルターは、画像のノイズを低減するためによく使用されます。
フィルターはガウス関数を使用して画像内の隣接するピクセル値を平均化することで機能します。 この方法は、2つの調整可能な要因に依存しています。
- カーネル: ピクセルを平均化するために使用される行列。
-
シグマ: ぼかしの強度を制御する値。
デフォルトのカーネルサイズは3x3ピクセルで、デフォルトのSigma値は3.0です。これにより、中程度のぼかしが生成されます。 シグマ値を増やすと、より強いぼかし効果が得られます。 また、ぼかしフィルターが平均化する近傍のサイズを制御するためにカーネルをカスタマイズすることもできます。
: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");
このフィルターをサンプル入力に適用すると、以下の画像が生成されます。

画像を鮮明にする

ガウシアンブラー画像
バイラテラルフィルター
BilateralFilter は、エッジを保持しながら画像を滑らかにするために使用されます。 単純なぼかし技術とは異なり、バイラテラルフィルタは色の違いとピクセル距離の両方を考慮に入れるため、エッジを保持したスムージングに効果的です。
その方法は、3つの調整可能な要因に依存しています。
- NeighborhoodDiameter: フィルタリングに使用されるピクセル近傍の直径を指定します。 より大きな直径はフィルター内の周囲のピクセルを多く含みます。 デフォルト値は5です。
- SigmaColor: これは色の影響を表します。 隣接するピクセル間の色差がフィルタリングにどの程度影響を与えるかを決定します。 より高い値は、異なる色のピクセル同士がより相互に影響を与えることを意味します。 デフォルト値は 75.0 です。
- SigmaSpace: これは空間的影響を表します。 ピクセル間の距離がフィルタリングにどの程度影響を与えるかを決定します。 より高い値は、離れたピクセル同士が互いにより影響を与えることを意味します。 デフォルト値は 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");
このフィルターをサンプル入力に適用すると、以下の画像が生成されます。

画像を鮮明にする

両側画像
メディアンブラー フィルター
MedianBlurFilterは、周囲のピクセルの中央値で各ピクセルの値を置き換えることにより、画像のノイズを低減するために使用されるフィルターです。 このフィルターは、ノイズを除去しながらエッジを保持するのに特に効果的です。
- KernelSize: 各ピクセルの周囲の近傍のサイズを定義し、中央値を計算します。 値は0より大きい奇数でなければなりません。デフォルト値は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");
このフィルターをサンプル入力に適用すると、以下の画像が生成されます。

画像を鮮明にする

メディアンブラー画像
イテレーションを保存
バーコードに複数のフィルターを適用する際、各フィルターメソッド後の出力を視覚化するのは難しい場合があります。 この機能は、各フィルターが適用された後にフィルター処理された画像を順次保存することを可能にします。 この機能を有効にするには、まずImageFilterCollectionコンストラクタにtrueを渡します。 次に、ExportFilterImagesToDisk
メソッドを使用して、出力画像のパスと名前を指定します。
: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");
フィルターはコードの順序で適用され、出力画像は各イテレーションの結果を反映します。
- シャープ -> シャープ後
- シャープ + アダプティブしきい値 -> アダプティブしきい値後
- シャープ化 + 適応的しきい値 + コントラスト -> コントラスト後
サンプル画像
シャープネス後
適応型しきい値の後
コントラスト後
コード
ImageFilters
プロパティとは別に、ユーザーはBarcodeReaderOptions
に他のプロパティを追加して、より正確な読み取りを行うことができます。詳しくはこの記事をご覧ください。