내 목표는 그 안에 개별 모양이 많은 그림을 추적하고 이러한 모양을 개별 이미지로 분할하는 것입니다. 흰색 바탕에 검은 색입니다. 나는 NumPy와, OpenCV의 & 공동 아주 새로운 해요 -하지만 여기에 내 현재 생각입니다 : 검은 색 픽셀numpy/scipy (아마도 유역)로 형상 인식
- 검사는
- 블랙 픽셀 발견 -> 은 (다각형 경로로) 유역 경계를 찾을 유역
- 이 검색을 계속하지만, 이미 발견 경계 나는 사물의 이러한 종류의에서 아주 좋은 아니에요
내에서 점을 무시하고, 더 나은 방법은 무엇입니까?
먼저 I (이 예는 더 많거나 적은 콜라주) 유역 결과 직사각형 바운딩 박스를 찾으려고 :
from numpy import *
import numpy as np
from scipy import ndimage
np.set_printoptions(threshold=np.nan)
a = np.zeros((512, 512)).astype(np.uint8) #unsigned integer type needed by watershed
y, x = np.ogrid[0:512, 0:512]
m1 = ((y-200)**2 + (x-100)**2 < 30**2)
m2 = ((y-350)**2 + (x-400)**2 < 20**2)
m3 = ((y-260)**2 + (x-200)**2 < 20**2)
a[m1+m2+m3]=1
markers = np.zeros_like(a).astype(int16)
markers[0, 0] = 1
markers[200, 100] = 2
markers[350, 400] = 3
markers[260, 200] = 4
res = ndimage.watershed_ift(a.astype(uint8), markers)
unique(res)
B = argwhere(res.astype(uint8))
(ystart, xstart), (ystop, xstop) = B.min(0), B.max(0) + 1
tr = a[ystart:ystop, xstart:xstop]
print tr
든
, I는 원의 배열을 사용하는 경우 (a) argwhere가 작동하는 것처럼 보이지만, 유역 (res) 이후에는 완전한 배열을 다시 출력합니다.
다음 단계는 도형 주위의 다각형 경로를 찾는 것이지만 경계 상자는 지금 당장 좋습니다!
도와주세요!
답장을 보내 주셔서 감사합니다. 내가 할 수있는 한 초짜 numpy 질문 하나만 : 다른 셰이프를 '엿보기'때문에 나는 경계 사각형의 영역을 저장할 수 없습니다. 그래서 내 계획은 이미지 영역에 거꾸로 된 라벨 배열을 곱하는 것입니다 (따라서 현재 모양 바깥의 모든 것이 검은 색이됩니다). 그런 다음 이미지 영역을 ndimage로 저장하십시오. 이 일을 어떻게 올바른 방향으로 가르쳐 주시겠습니까?나는 내가 곧 신중하게 rtfm 할 시간이있는 것을 안다! – user978250
나는'label == num'을 원한다고 생각한다.'num'은'label'에있는 객체의 번호입니다. 이와 같은 연산은 숫자가 적은 배열에서 벡터화되므로 문자 그대로 위의 구문과 동일합니다. "object"내부에는'True'의 불리언 값 배열이 있고, 바깥에는'False' 배열이 있습니다. –