-1

나는어떻게 해골의 좌표 점을 얻을 수 있습니까?

like that 내가 mahotas 파이썬 라이브러리와 그 해골의 끝 지점을 감지, 바이너리 이미지에서 해골 이미지를 만들 수 있지만, 그것은 나에게 엔드 포인트 1 개 값으로 전체 이미지 배열을 반환하고 다른 사람을 제로. 끝점의 좌표를 선호합니다. 어떻게받을 수 있습니까? 엔드 포인트를 계산

내 코드 : 내가 좌표를 얻을 원하는에서

branch1=np.array([[2, 1, 2], [1, 1, 1], [2, 2, 2]]) 
branch2=np.array([[1, 2, 1], [2, 1, 2], [1, 2, 1]]) 
branch3=np.array([[1, 2, 1], [2, 1, 2], [1, 2, 2]]) 
branch4=np.array([[2, 1, 2], [1, 1, 2], [2, 1, 2]]) 
branch5=np.array([[1, 2, 2], [2, 1, 2], [1, 2, 1]]) 
branch6=np.array([[2, 2, 2], [1, 1, 1], [2, 1, 2]]) 
branch7=np.array([[2, 2, 1], [2, 1, 2], [1, 2, 1]]) 
branch8=np.array([[2, 1, 2], [2, 1, 1], [2, 1, 2]]) 
branch9=np.array([[1, 2, 1], [2, 1, 2], [2, 2, 1]]) 

endpoint1=np.array([[0, 0, 0], [0, 1, 0], [2, 1, 2]]) 
endpoint2=np.array([[0, 0, 0], [0, 1, 2], [0, 2, 1]]) 
endpoint3=np.array([[0, 0, 2], [0, 1, 2], [0, 2, 1]]) 
endpoint4=np.array([[0, 2, 1], [0, 1, 2], [0, 0, 0]]) 
endpoint5=np.array([[2, 1, 2], [0, 1, 0], [0, 0, 0]]) 
endpoint6=np.array([[1, 2, 0], [2, 1, 0], [0, 0, 0]]) 
endpoint7=np.array([[2, 0, 0], [1, 1, 0], [2, 0, 0]]) 
endpoint8=np.array([[0, 0, 0], [2, 1, 0], [1, 2, 0]]) 

jpg = 'skel.jpg' 
skel = cv2.imread(jpg, 0) 

sk = pymorph.binary(skel) 

complete_path = 'skel.jpg' 
print pymorph.gray(sk).dtype 


br1=mah.morph.hitmiss(sk,branch1) 
br2=mah.morph.hitmiss(sk,branch2) 
br3=mah.morph.hitmiss(sk,branch3) 
br4=mah.morph.hitmiss(sk,branch4) 
br5=mah.morph.hitmiss(sk,branch5) 
br6=mah.morph.hitmiss(sk,branch6) 
br7=mah.morph.hitmiss(sk,branch7) 
br8=mah.morph.hitmiss(sk,branch8) 
br9=mah.morph.hitmiss(sk,branch9) 

ep1=mah.morph.hitmiss(sk,endpoint1) 
ep2=mah.morph.hitmiss(sk,endpoint2) 
ep3=mah.morph.hitmiss(sk,endpoint3) 
ep4=mah.morph.hitmiss(sk,endpoint4) 
ep5=mah.morph.hitmiss(sk,endpoint5) 
ep6=mah.morph.hitmiss(sk,endpoint6) 
ep7=mah.morph.hitmiss(sk,endpoint7) 
ep8=mah.morph.hitmiss(sk,endpoint8) 

br=br1+br2+br3+br4+br5+br6+br7+br8+br9 
ep=ep1+ep2+ep3+ep4+ep5+ep6+ep7+ep8 

BR 및 EP는 모든 지점과 배열 및 엔드 포인트입니다.

+0

나는이 당신의 코드가 아닙니다 생각 http://dip4fish.blogspot.fr/2011/04/detecting-end-points-in-skeleton.html –

답변

3

그래서 ep은 끝점 좌표에서만 1 인 이진 numpy 배열이어야합니다. 이 경우에 당신은 ep의 제로가 아닌 값의 인덱스를 얻을 수 numpy.where 또는 numpy.nonzero 하나를 사용할 수 있습니다

pseudo_ep = (np.random.rand(512,512) > 0.9) 
rows,cols = np.where(pseudo_ep) 

이는 X 좌표 엔드 포인트의 y에 해당한다

+0

위대한, 그것은 또한 많은 포인트와 함께 작동합니다! – improc

+1

http://dip4fish.blogspot.fr/2011/04/testing-hit-and-miss-with-mahotas-064.html에서 의견보기 –

관련 문제