Um eine Raster- / Bildverarbeitungslösung zu veranschaulichen, habe ich mit dem bereitgestellten Bild begonnen. Aufgrund der Überlagerung von blauen Punkten, grauen Linien, farbigen Bereichen und Text ist die Qualität viel geringer als bei den Originaldaten. und die Verdickung der ursprünglichen roten Linien. Als solches stellt es eine Herausforderung dar: Dennoch können wir Voronoi-Zellen mit hoher Genauigkeit erhalten.
Ich extrahierte die sichtbaren Teile der roten linearen Merkmale, indem ich den grünen vom roten Kanal subtrahierte und dann die hellsten Teile um drei Pixel erweiterte und erodierte. Dies wurde als Grundlage für eine euklidische Entfernungsberechnung verwendet:
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]]]
(Der gesamte hier gezeigte Code ist Mathematica 8.)
Das Erkennen der offensichtlichen "Grate", die alle Punkte enthalten müssen, die zwei benachbarte Voronoi-Zellen trennen, und das erneute Kombinieren mit der Linienebene liefert das meiste, was wir zum Fortfahren benötigen:
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
Das rote Band stellt dar, was ich von der Linie retten könnte, und das cyan-blaue Band zeigt die Grate in der Abstandstransformation. (Aufgrund der Unterbrechungen in der ursprünglichen Linie selbst ist immer noch viel Müll vorhanden.) Diese Rippen müssen gereinigt und durch eine weitere Ausdehnung geschlossen werden - zwei Pixel reichen aus - und dann können wir die verbundenen Regionen identifizieren, die durch bestimmt werden die ursprünglichen Linien und die Grate zwischen ihnen (von denen einige explizit neu kombiniert werden müssen):
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
Dies hat im Endeffekt dazu geführt, fünf orientierte lineare Merkmale zu identifizieren . Wir können drei separate lineare Merkmale sehen, die von einem Zusammenflusspunkt ausgehen. Jeder hat zwei Seiten. Ich habe die rechte Seite der beiden Merkmale ganz rechts als gleich angesehen, aber ansonsten alles andere unterschieden und die fünf Merkmale angegeben. Die farbigen Bereiche zeigen das Voronoi-Diagramm dieser fünf Merkmale.
Ein euklidischer Zuordnungsbefehl, der auf einer Ebene basiert, die die drei linearen Merkmale unterscheidet (die ich für diese Abbildung nicht zur Verfügung hatte), würde die verschiedenen Seiten jedes linearen Merkmals nicht unterscheiden und so die grünen und orangefarbenen Bereiche kombinieren, die die äußerste linke Linie flankieren ; es würde das Merkmal ganz rechts in zwei Teile teilen; und es würde diese gespaltenen Stücke mit den entsprechenden beige und magentafarbenen Merkmalen auf ihren anderen Seiten kombinieren.
Offensichtlich hat dieser Raster-Ansatz die Fähigkeit, Voronoi-Tessellationen von beliebigen Merkmalen - Punkten, linearen Teilen und sogar Polygonen, unabhängig von ihrer Form - zu konstruieren und Seiten von linearen Merkmalen zu unterscheiden.