Para ilustrar uma solução de processamento de imagem / raster, comecei com a imagem postada. É de qualidade muito inferior aos dados originais, devido à sobreposição de pontos azuis, linhas cinzas, regiões coloridas e texto; e o espessamento das linhas vermelhas originais. Como tal, apresenta um desafio: no entanto, ainda podemos obter células Voronoi com alta precisão.
Extraí as partes visíveis dos recursos lineares vermelhos subtraindo o verde do canal vermelho e depois dilatando e corroendo as partes mais brilhantes em três pixels. Isso foi usado como base para o cálculo da distância euclidiana:
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]]]
(Todo o código mostrado aqui é Mathematica 8.)
Identificar os "sulcos" evidentes - que devem incluir todos os pontos que separam duas células Voronoi adjacentes - e combiná-los novamente com a camada de linha fornece a maior parte do que precisamos para prosseguir:
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
A faixa vermelha representa o que eu poderia salvar da linha e a faixa ciana mostra os sulcos na transformação de distância. (Ainda há muito lixo devido às quebras na própria linha original.) Esses sulcos precisam ser limpos e fechados através de uma dilatação adicional - dois pixels serão suficientes - e então podemos identificar as regiões conectadas determinadas por as linhas originais e os sulcos entre eles (alguns dos quais precisam ser recombinados explicitamente):
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
O que isso conseguiu, com efeito, é identificar cinco características lineares orientadas . Podemos ver três características lineares separadas que emanam de um ponto de confluência. Cada um tem dois lados. Eu considerei o lado direito dos dois recursos mais à direita como sendo os mesmos, mas diferenciei todo o resto, fornecendo os cinco recursos. As áreas coloridas mostram o diagrama Voronoi desses cinco recursos.
Um comando de alocação euclidiana baseado em uma camada que distingue os três recursos lineares (que eu não tinha disponível para esta ilustração) não distinguiria os diferentes lados de cada recurso linear e, portanto, combinaria as regiões verde e laranja que flanqueiam a linha mais à esquerda ; dividiria o recurso de cerceta mais à direita em dois; e combinaria essas peças divididas com as características bege e magenta correspondentes em seus outros lados.
Evidentemente, essa abordagem raster tem o poder de construir mosaicos Voronoi de recursos arbitrários - pontos, peças lineares e até polígonos, independentemente de suas formas - e pode distinguir os lados dos recursos lineares.