技術共有

C: filter2D 関数の概要

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

OpenCVでfilter2Dこの関数は、画像を畳み込み、さまざまな線形フィルターを適用するための非常に強力なツールです。この関数は、画像内の各ピクセルを処理し、指定された畳み込みカーネル (またはフィルター) で画像を畳み込むことによって画像の特性を変更します。以下についてですfilter2D機能の詳細な紹介:

関数プロトタイプ

OpenCVでは、filter2D関数のプロトタイプは次のとおりです。

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel,  
                  Point anchor = Point(-1,-1), double delta = 0,  
                  int borderType = BORDER_DEFAULT);

パラメータの説明

  • ソース:入力画像。
  • 夏時間:出力画像、入力画像srcサイズとチャンネル数が同じであること。
  • 深さ : 出力画像の目的の深さ (データ型)。 -1 の場合、出力イメージが入力イメージと同じ深度を持つことを意味します。
  • カーネル : 畳み込みカーネル (またはフィルター)。単一チャネルの浮動小数点行列です。この行列は、入力画像に対して畳み込み演算を実行する方法を定義します。
  • アンカー : カーネルのアンカー ポイント。カーネル内のフィルター ポイントの相対位置を示します。アンカー ポイントはカーネル内に配置する必要があります。デフォルト値 (-1,-1) は、アンカー ポイントがカーネルの中心に配置されることを意味します。
  • デルタ: フィルタリングされたピクセルを保存するときに使用されるオプションの値。dstフィルタリングされたピクセルに以前に追加されたもの。
  • 境界線タイプ : ピクセル外挿法。画像境界の外側のピクセルを処理するために使用されます。これは、コンボリューション カーネルが画像の境界を越えたときに境界ピクセルがどのように処理されるかを決定します。一般的なオプションには以下が含まれますBORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECT待って。

動作原理

filter2Dこの関数は実際に畳み込み演算を実行します (ただし、カーネルの反転が含まれないため、技術的には厳密な畳み込みではなく相関を計算します)。畳み込み演算には、入力画像上で畳み込みカーネルを「スライド」させ、畳み込みカーネルと同じサイズの各部分行列の対応する要素を乗算し、その結果を加算することが含まれます。このプロセスでは、出力イメージ内の対応する位置に配置される新しいピクセル値が生成されます。コンボリューション カーネルが入力画像全体をスライドしながら、完全な出力画像が生成されるまでこのプロセスが繰り返されます。

アプリケーションシナリオ

コンボリューションカーネルを変更することで、filter2D関数は、次のようなさまざまな画像処理効果を実現できますが、これらに限定されません。

  • 画像の鮮明化: 特定のシャープ化コンボリューション カーネルを使用すると、画像のエッジをより鮮明にすることができます。
  • 平均フィルター: 平均コンボリューション カーネルを使用すると、画像のノイズを減らすことができますが、画像がぼやける可能性があります。
  • ガウスフィルター : ガウス フィルタリングは、エッジ情報を維持しながら画像ノイズを低減できる、一般的に使用される画像平滑化手法です。それでもfilter2D関数自体はガウス カーネルの生成を直接提供しませんが、渡すことができます。getGaussianKernel関数はガウス カーネルを生成し、filter2Dガウスフィルタリングを実行します。
  • エッジ検出: 特定のコンボリューション カーネル (ソーベル オペレーター、ラプラシアン オペレーターなど) を設計することにより、画像内のエッジを検出できます。

サンプルコード

以下は用途ですfilter2D関数平均フィルタリングのコード例 (Python バージョン):

#include