前のチュートリアル: Hit-or-Miss変換
次のチュートリアル: 画像ピラミッド
| 原著者 | Theodore Tsesmelis |
| 互換性 | OpenCV >= 3.0 |
このチュートリアルでは、以下の方法を学ぶ:
2つの非常に一般的なモルフォロジー演算子(すなわち膨張と収縮)を、カスタムカーネルの作成とともに適用し、水平軸および垂直軸上の直線を抽出する。この目的のために、以下のOpenCV関数を使用する:
楽譜から音符を抽出することを目標とする例の中で。
モルフォロジーは、カーネルとしても知られる事前定義された 構造化要素 に基づいて画像を処理する一連の画像処理演算である。出力画像の各ピクセルの値は、入力画像内の対応するピクセルとその近傍との比較に基づいて決まる。カーネルのサイズと形状を選ぶことで、入力画像に対して特定の形状に敏感なモルフォロジー演算を構築できる。
最も基本的なモルフォロジー演算のうちの2つが膨張と収縮である。膨張は画像内のオブジェクトの境界にピクセルを追加し、収縮はちょうどその逆を行う。それぞれ追加または除去されるピクセルの量は、画像を処理するために使用する構造化要素のサイズと形状に依存する。一般に、これら2つの演算が従う規則は以下のとおりである:
上で示したとおり、また一般にあらゆるモルフォロジー演算において、入力画像を走査するために使う構造要素は最も重要な部分である。
構造要素とは、0と1のみからなる行列で、任意の形状とサイズを取り得る。通常は処理対象の画像よりはるかに小さく、値が1のピクセルが近傍を定義する。構造要素の中心ピクセルは原点 (origin) と呼ばれ、着目するピクセル、すなわち処理対象のピクセルを示す。
例えば、次の図は7x7サイズのダイヤモンド形の構造要素を示している。
構造要素は、直線、ダイヤモンド、円板、周期的な線、円など、多くの一般的な形状やサイズを取り得る。通常は、入力画像内で処理・抽出したい対象と同じサイズ・形状の構造要素を選ぶ。例えば、画像内の線を見つけるには、後で示すように線状の構造要素を作成する。
このチュートリアルのコードを以下に示す。
こちらからダウンロードすることもできる。
こちらからダウンロードすることもできる。
こちらからダウンロードすることもできる。
画像はこちらから取得する。
これで、水平線と垂直線を抽出し、その結果として楽譜から音符を分離するためにモルフォロジー演算を適用する準備が整った。ただしその前に、この目的で使用する出力画像を初期化しておこう:
理論の節で述べたとおり、目的の対象を抽出するには、それに対応する構造要素を作成する必要がある。ここでは水平線を抽出したいので、その目的に対応する構造要素は次のような形状になる: 
ソースコードでは、これは次のコードスニペットで表される:
垂直線についても同様で、対応する構造要素は次のとおり: 
そしてこれも同様に次のように表される:
見てのとおり、ほぼ完成である。しかしこの時点で、音符のエッジが少し粗いことに気づくだろう。そのため、より滑らかな結果を得るにはエッジを精緻化する必要がある:
