2014-05-15 3 views
6

현재 데이터 분석에서 세그먼트 화 된 이미지가 아래 예와 같습니다.분할 된 이미지에 커브를 맞 춥니 다

내 문제는 세그먼트 화 된 이미지에서 특정 영역 (빨간색) 에 폴리 노움 또는 스플라인 (일차원 1 차원)을 맞추고 싶습니다. (결과는 검은 선이됩니다).

보통 나는 직각 거리 회귀와 같은 것을 사용할 것이고,이 문제는이 에이 경우 가지고 있지 않은 적합한 함수가 필요하다는 것입니다. 그래서 파이썬/numpy로 이것을 수행하는 가장 좋은 방법은 무엇입니까? 이런 종류의 문제에 대한 표준 알고리즘이 있습니까?

example

UPDATE : 은 내 그림 실력은 아마 최고의하지 않은 것, 그림에서 빨간색 영역은 일부 랜덤 노이즈를 가질 수 완전히 연결되어 있지 않습니다 (인해 작은 간격이있을 수 있습니다 소음).

UPDATE2 : 전체 대상은 [0,1]의 t에 대한 위치, 즉 p (t) => (x, y)를 반환하는 매개 변수화 된 곡선 p (t)를 가져야합니다. 여기서 t = 0 검은 선의 시작, t = 1 검은 선의 끝.

+3

당신은 실험해야하지만 것이다 당신이해야 필요한 모든 ['skimage.morphology'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html)에서 볼 수 있습니다. 나는 당신이 변환하기 전이나 후에 잡음을 제거하기 위해 [closing'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html#closing)를하고 싶을 것이라고 추측합니다. 그것은 아마도 임계 값에 의해, 그리고 ['skeletonize'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.skeletonize)에 이진 이미지로 변환 될 것입니다. – Jaime

+0

배열에서 허용되는 스켈레톤을 얻는다 고 가정합니다. 폴리 노옴/스플라인을 얻으려면 다음 단계는 무엇입니까? – jrsm

+1

더 복잡한 작업을 수행하려면 Stack Exchange 사이트 http://dsp.stackexchange.com/을 살펴볼 가치가 있습니다. – Hooked

답변

3

scipy.ndimagethis gist을 템플릿으로 사용했습니다. 이것은 거의 당신을 거기에 데려다 줄 것입니다, 당신은 합리적인 방법으로 대부분의 골격화 된 이미지에서 곡선을 매개 변수화해야합니다.

from scipy.misc import imread 
import scipy.ndimage as ndimage 

# Load the image 
raw = imread("bG2W9mM.png") 

# Convert the image to greyscale, using the red channel 
grey = raw[:,:,0] 

# Simple thresholding of the image 
threshold = grey>200 

radius = 10 
distance_img = ndimage.distance_transform_edt(threshold) 
morph_laplace_img = ndimage.morphological_laplace(distance_img, 
                (radius, radius)) 
skeleton = morph_laplace_img < morph_laplace_img.min()/2 

import matplotlib.cm as cm 
from pylab import * 
subplot(221); imshow(raw) 
subplot(222); imshow(grey, cmap=cm.Greys_r) 
subplot(223); imshow(threshold, cmap=cm.Greys_r) 
subplot(224); imshow(skeleton, cmap=cm.Greys_r) 
show() 

enter image description here

당신은 유용한 skeletonization을 참조 다른 답변을 찾을 수는, 그 예는 여기에 있습니다 :

Problems during Skeletonization image for extracting contours

+0

이것은 꽤 잘 작동하는 것 같습니다. 제 생각은 스켈레톤을 N 개의 세그먼트로 나눠서 이것을 스플라인 보간을위한 노드로 사용하는 것입니다.하지만 아직 확실하지 않습니다. – jrsm

관련 문제