래스터 / 이미지 처리 솔루션을 설명 하기 위해 게시 된 이미지부터 시작했습니다. 파란색 점, 회색 선, 색상이 지정된 영역 및 텍스트가 중첩되어 원본 데이터보다 품질이 훨씬 낮습니다. 그리고 원래의 빨간 선이 두껍게됩니다. 그럼에도 불구하고 우리는 여전히 도전 과제를 제시합니다. 그럼에도 불구하고 우리는 여전히 높은 정확도로 Voronoi 셀을 얻을 수 있습니다.
빨간색 채널에서 녹색을 빼고 가장 밝은 부분을 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입니다.)
인접한 두 Voronoi 셀을 분리하는 모든 지점을 포함해야하는 명백한 "리지"를 식별하고이를 선 레이어와 다시 결합하면 다음과 같이 진행할 수 있습니다.
ridges = Binarize[ColorNegate[
LaplacianGaussianFilter[DistanceTransform[ColorNegate[string]], 2] // ImageAdjust], .65];
ColorCombine[{ridges, string}]
빨간색 띠는 선을 절약 할 수있는 것을 나타내고 시안 띠는 거리 변환의 융기 부를 나타냅니다. (오리지널 라인 자체의 끊김으로 인해 여전히 많은 쓰레기가 남아 있습니다.)이 융기 부분은 추가 픽셀을 통해 추가 확장을 통해 청소하고 닫아야합니다. 원래 선과 그 사이의 융기 부분 (일부는 명시 적으로 재결합해야 함) :
Dilation[MorphologicalComponents[
ColorNegate[ImageAdd[ridges, Dilation[string, 2]]]] /. {2 -> 5, 8 -> 0, 4 -> 3} // Colorize, 2]
이것이 실제로 달성 한 것은 5 가지 방향의 선형 피처 를 식별하는 것 입니다. 합류점에서 나오는 세 개의 개별 선형 피처를 볼 수 있습니다. 각각은 양면이 있습니다. 가장 오른쪽의 두 기능 중 오른쪽은 동일하다고 생각했지만 다른 모든 것을 구별하여 5 가지 기능을 제공했습니다. 색상이 지정된 영역에는이 5 가지 기능 중 Voronoi 다이어그램이 표시됩니다.
세 개의 선형 피쳐 (이 그림에서는 사용할 수 없었 음)를 구별하는 레이어를 기반으로하는 유클리드 할당 명령 은 각 선형 피쳐의 서로 다른면을 구별하지 않으므로 가장 왼쪽 선 옆에있는 녹색 및 주황색 영역을 결합합니다. ; 가장 오른쪽에있는 청록색 특징을 둘로 나눕니다. 그리고 분할 된 조각을 반대편의 해당 베이지 및 자홍색 특징과 결합합니다.
분명히이 래스터 접근 방식은 모양에 관계없이 임의의 피처 (점, 선형 조각 및 다각형까지)의 보로 노이 테셀레이션을 구성 할 수있는 능력을 가지며 선형 피처의 측면을 구별 할 수 있습니다.