簡単なプロセスは次のとおりです。
- 画像の各領域にテクスチャ測定を割り当てます。
- 領域ラベル付け/接続性アルゴリズム(または領域拡張アルゴリズム)を使用して、同じテクスチャメジャーを持つ隣接領域を結合します。
- 単純なエッジ追跡アルゴリズムを実装して、各領域の輪郭をトレースします。
ローのテクスチャメジャーは古くはありますが、画像内のテクスチャを決定するための有用な手法であり、画像全体でテクスチャAとテクスチャBを区別するには十分な場合があります。ウィキペディアの記事の「法律テクスチャエネルギー測定」のセクションを参照してください。
http://en.wikipedia.org/wiki/Image_texture
最初のステップとして、すべてのテクスチャメジャーを計算し、特定のメジャー(エッジやスポットなど)を決定して、1つのテクスチャを他のテクスチャから最も簡単に区別できるようにします。(写真を投稿した場合、テクスチャメジャーを特定するのに役立ちます。)
AとBの2つのテクスチャしかない場合、それらを前景と背景として扱うことができ、標準の領域ラベル付けアルゴリズムが機能します。処理で何が起こっているかを簡単に確認できるように、Aテクセル(テクスチャエレメント、テクスチャの小さなチャンク)を白に割り当て、Bテクセルを黒に割り当てて、新しい画像を生成できます。次に、領域のラベル付けや輪郭追従のアルゴリズムが、接続されている白と黒の領域を見つけます。OpenCVのfindContours()関数はうまく機能します。
http://en.wikipedia.org/wiki/Connected-component_labeling
同じWikipediaの記事には、従来のマルチパスアルゴリズムとシングルパスアルゴリズムの両方が含まれています。ここで説明するシングルパスアルゴリズムは実装していませんが、ChenとChangによる論文「A Contour-Labeling Algorithm Using Contour Tracing Technique」で説明されているシングルパスアルゴリズムを使用しました。ChenとChangによる論文では、迅速に実装できる標準の輪郭追跡アルゴリズムについても説明しています。
テクスチャが3つ以上ある場合は、ウォーターシェッドまたは平均シフトアルゴリズムを使用して、テクスチャをカラーに再マップした後で領域をまとめてクラスタ化することができます。テクスチャからカラーへのこの再マッピングは必要ありませんが、プロセスのデバッグと理解が容易になります。