Per illustrare una soluzione di elaborazione raster / immagine, ho iniziato con l'immagine pubblicata. È di qualità molto inferiore rispetto ai dati originali, a causa della sovrapposizione di punti blu, linee grigie, regioni colorate e testo; e l'ispessimento delle linee rosse originali. Come tale rappresenta una sfida: tuttavia, possiamo ancora ottenere celle Voronoi con elevata precisione.
Ho estratto le parti visibili delle caratteristiche lineari rosse sottraendo il verde dal canale rosso e quindi dilatando ed erodendo le parti più luminose di tre pixel. Questo è stato usato come base per un calcolo della distanza euclidea:
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]]]
(Tutto il codice mostrato qui è Mathematica 8.)
Identificare le "creste" evidenti - che devono includere tutti i punti che separano due celle Voronoi adiacenti - e ricombinarle con lo strato di linea fornisce la maggior parte di ciò che è necessario procedere:
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
La banda rossa rappresenta ciò che ho potuto salvare della linea e la banda ciano mostra le creste nella trasformazione della distanza. (C'è ancora molta spazzatura a causa delle interruzioni nella stessa linea originale.) Queste creste devono essere pulite e chiuse attraverso un'ulteriore dilatazione - due pixel lo faranno - e quindi possiamo identificare le regioni connesse determinate da le linee originali e le creste tra loro (alcune delle quali devono essere esplicitamente ricombinate):
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
Ciò che ciò ha realizzato, in effetti, è identificare cinque caratteristiche lineari orientate . Possiamo vedere tre caratteristiche lineari separate che emanano da un punto di confluenza. Ognuno ha due lati. Ho considerato il lato destro delle due caratteristiche più a destra come le stesse, ma altrimenti ho distinto tutto il resto, dando le cinque caratteristiche. Le aree colorate mostrano il diagramma Voronoi di queste cinque caratteristiche.
Un comando di allocazione euclidea basato su un livello che distingue le tre caratteristiche lineari (che non avevo disponibile per questa illustrazione) non distinguerebbe i diversi lati di ciascuna caratteristica lineare, e quindi unirebbe le regioni verde e arancione che fiancheggiano la linea più a sinistra ; dividerebbe in due la caratteristica verde acqua più a destra; e combinerebbe quei pezzi divisi con le corrispondenti caratteristiche beige e magenta sugli altri lati.
Evidentemente, questo approccio raster ha il potere di costruire tessellazioni Voronoi di caratteristiche arbitrarie - punti, pezzi lineari e persino poligoni, indipendentemente dalle loro forme - e può distinguere i lati delle caratteristiche lineari.