このセクションで述べる関数およびクラスを利用して, 2次元画像に対して,様々な線形・非線形のフィルタリング処理を行います.このフィルタリング処理では,入力画像の各ピクセル位置 の近傍領域(通常は矩形)を利用して出力値を求めます.この出力は,線形フィルタの場合はピクセル値の重み付き和,モルフォロジー演算の場合は,最大値・最小値となります.求められた出力は,出力画像上の同じ位置 に保存されます.これはつまり,出力画像が入力画像と同じサイズになることを意味します.また通常,関数はマルチチャンネル配列をサポートしており,各チャンネルが個別に処理されるので,出力画像のチャンネル数も入力画像と同じ数になります.
このセクションで述べる関数とクラスに共通するもう1つの特徴は,これらは単純な算術関数とは異なり,存在しないピクセルの値を外挿する必要があるということです.例えば, のガウシアンフィルタを用いて画像の平滑化を行いたい場合,各行の左端のピクセルを処理する際に,さらにその左側,つまり,画像外のピクセルが必要となります.このようなピクセルを,画像の左端のピクセルと同じものだと仮定する(つまり,「複製境界」外挿法),あるいは,存在しないすべてのピクセルを 0 とする(つまり,「定数境界」外挿法)などの処理が可能です.
IplConvKernel は, CreateStructuringElementEx によって作成される,矩形の畳み込みカーネルです.
画像をコピーし,その周りに境界を作成します.
パラメタ: |
|
---|
この関数は,2次元の入力配列を出力配列の内側にコピーし,その周りに指定された種類の境界領域を作成します.この関数は,特定のアルゴリズム内部で利用される境界領域とは別のものをエミュレートする必要がある場合に役立ちます.例えば,モルフォロジー演算の関数は,OpenCVの多くのフィルタリング関数と同様に内部では複製境界を使用していますが,ユーザにとって境界が不要だったり,あるいは 1 や 255 の値で埋められた境界が必要な場合もあるかもしれません.
構造要素を作成します.
パラメタ: |
|
---|
この関数は,モルフォロジー演算の構造要素として利用する構造体 IplConvKernel の領域を確保し,それを初期化します.
指定された構造要素を用いて画像の膨張を行います.
パラメタ: |
|
---|
この関数は,ピクセル近傍領域の形状を決定する任意の構造要素を用いて,画像を膨張させます.以下のように,対象ピクセルの近傍領域の最大値をそのピクセル値とします:
この関数は,置換モードをサポートします.膨張は,複数回( iterations )繰り返し適用することができます.カラー画像の場合,各チャンネルは独立に処理されます.
指定された構造要素を用いて画像の収縮を行います.
パラメタ: |
|
---|
この関数は,ピクセル近傍領域の形状を決定する任意の構造要素を用いて,画像を収縮させます.以下のように,対象ピクセルの近傍領域の最小値をそのピクセル値とします:
この関数は,置換モードをサポートします.収縮は,複数回( iterations )繰り返し適用することができます.カラー画像の場合,各チャンネルは独立に処理されます.
指定されたカーネルで,画像の畳み込みを行います.
パラメタ: |
---|
この関数は,画像に任意の線形フィルタを適用します.また,置換モードでの処理がサポートされます.フィルタ範囲が部分的に画像外に出てしまった場合,この関数は,画像内にある最近傍のピクセルから範囲外のピクセル値を補間します.
画像のラプラシアンを求めます.
パラメタ: |
---|
この関数は,以下のように Sobel オペレータを使って計算されたxとyの2次微分を足し合わせることで,入力画像のラプラシアンを求めます:
apertureSize = 1 を指定すると,画像と以下のカーネルの畳み込み処理と同じ処理を,最も高速に計算できます:
関数 Sobel と同様にスケーリングは行われなず,サポートする入出力画像のフォーマットも同じです.
高度なモルフォロジー変換を行います.
パラメタ: |
|
---|
この関数は,収縮および膨張を組み合わせた高度なモルフォロジー変換を行うことができます.
オープニング:
クロージング:
モルフォロジー勾配:
トップハット変換:
ブラックハット変換:
モルフォロジー勾配,およびトップハット変換とブラックハット変換の置換モードでは,テンポラリな画像 temp が必要です.
画像のダウンサンプリングを行います.
パラメタ: |
---|
この関数は,ガウシアンピラミッド分解の1ステップであるダウンサンプリングを行います.まず,入力画像と指定されたフィルタの畳み込みを行い,画像の偶数行と偶数列を間引くことでダウンサンプリングを行います.
指定の手法で画像を平滑化します.
パラメタ: |
|
---|
この関数は,指定された手法を用いて画像の平滑化を行います.各手法には,以下に示すような特徴と制限があります.
スケーリングなしの平滑化は,シングルチャンネル画像に対してのみ適用でき,( Sobel や Laplace と同様に)8ビットから16ビットフォーマットへの累積計算や,32ビット浮動小数点数から32ビット浮動小数点数への累積計算をサポートします.
単純平滑化とガウシアン平滑化は,1チャンネル,あるいは3チャンネル,8ビット,16ビット,32ビット浮動小数点型の画像をサポートします.また,これら2つの手法は,置換モードで画像を処理することができます.
メディアンフィルタとバイラテラルフィルタは,1チャンネル,あるいは3チャンネル,8ビット画像に適用でき,置換モードでの処理は行えません.
拡張 Sobel オペレータを用いて1次,2次,3次または混合次数の微分画像を求めます.
パラメタ: |
---|
aperatureSize = 1 の場合を除いて, の,(2つのベクトルの積に)分離可能なカーネルが微分画像の計算に用いられます. の場合は, または のカーネルが用いられます(ガウシアンによる平滑化は行われません).また,特別な値である CV_SCHARR (-1) は, の Sobel より精度が良い の Scharr フィルタに対応します.この Scharr のアパーチャは以下のようになります
これは x-方向微分に対するカーネルであり,転置すれば y-方向微分に対するカーネルとなります.
この関数は,以下のように,画像と適切なカーネルの畳み込みによって微分画像を求めます:
Sobel オペレータは,ガウシアンによる平滑化と微分の組み合わせなので,その結果はノイズに対して多少は頑健です.1次の x-あるいは,y-微分画像を求める場合は大抵,この関数は次のような引数で呼び出されます:( xorder = 1, yorder = 0, apertureSize = 3) あるいは ( xorder = 0, yorder = 1, apertureSize = 3).最初の例は,以下のカーネルに対応します:
また,2番目の例は,以下のカーネルに対応します:
または,
どちらのカーネルになるかは,元画像の原点(構造体 IplImage のフィールド origin )に依存します.スケーリングは行われないので,出力画像の各ピクセル値は,ほとんどの場合入力画像のそれよりも大きな値になります.そこでオーバーフローを避けるために,例えば入力画像が8ビットの場合,出力画像として16ビット画像を指定する必要があります.このような16ビット画像は,関数 ConvertScale か ConvertScaleAbs を用いて 8ビット画像に戻すことができます.またこの関数は,8ビット画像だけでなく32ビット浮動小数点型画像も処理可能です.ただし,入力画像,出力画像共に,同じサイズ,あるいは同じ ROI サイズのシングルチャンネル画像である必要があります.