ラスター/画像処理ソリューションを説明するために、投稿された画像から始めました。青い点、灰色の線、色の付いた領域、テキストの重ね合わせにより、元のデータよりも品質がはるかに低くなります。元の赤い線が太くなる。そのため、課題があります。それでも、ボロノイセルを高い精度で取得できます。
赤のチャネルから緑を差し引いて、最も明るい部分を3ピクセルずつ膨張および侵食することで、赤の線形フィーチャの可視部分を抽出しました。これはユークリッド距離計算のベースとして使用されました。
i = Import["http://i.stack.imgur.com/y8xlS.png"];
{r, g, b} = ColorSeparate[i];
string = With[{n = 3}, Erosion[Dilation[Binarize[ImageSubtract[r, g]], n], n]];
ReliefPlot[Reverse@ImageData@DistanceTransform[ColorNegate[string]]]
(ここに示されているすべてのコードはMathematica 8です。)
2つの隣接するボロノイセルを分離するすべてのポイントを含む明らかな「リッジ」を特定し、それらをラインレイヤーと再結合することで、処理に必要なもののほとんどが提供されます。
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
赤いバンドは線を保存できる範囲を表し、シアンのバンドは距離変換の尾根を示します。(元の行自体が途切れているため、まだ多くのジャンクがあります。)これらの隆線は、さらに拡張することでクリーンアップして閉じる必要があります(2ピクセルで実行できます)。元の線とそれらの間の尾根(そのうちのいくつかは明示的に再結合する必要があります):
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
これが実際に達成したことは、5つの方向付けられた線形フィーチャを識別することです。合流点から発散する3つの独立した線形フィーチャを確認できます。それぞれに2つの側面があります。右側の2つの機能の右側を同じものと見なしましたが、それ以外はすべて区別して、5つの機能を提供しました。色付きの領域は、これら5つの機能のボロノイ図を示しています。
3つの線形フィーチャを区別するレイヤーに基づくユークリッドアロケーションコマンド(この図では使用できません)は、各線形フィーチャの異なる側面を区別しないため、左端のラインに隣接する緑とオレンジの領域を結合します; 右端の青緑の特徴を2つに分割します。そして、それらの分割されたピースを、反対側の対応するベージュとマゼンタの特徴と組み合わせます。
明らかに、このラスターアプローチには、任意のフィーチャのボロノイテッセレーション(ポイント、リニアピース、さらには形状に関係なく)を構築するパワーがあり、リニアフィーチャの側面を区別できます。