2013-12-22 4 views
0

두 개의 이진 이미지가 있습니다. 모두 1의 화소 값과 배경 0opencv python의 마스크를 기반으로 이미지 구성 요소를 제거하는 방법은 무엇입니까?

콘텐츠 B 마스크의 이미지 픽셀 값을 가지고있는 개체를 포함하는 화상 A를 말하고 B.

있습니다.

'이미지 B'의 객체를 한 픽셀 씩 터치하는 '이미지 A'의 구성 요소를 유지하려고합니다. 내가 numpy.logical_and을 시도

를 시도 그것은 나에게 교회법을 제공 무엇

.

이제 교차 픽셀이 이미지 A의 구성 요소와 매우 느린 경우 모든 픽셀을 검사하려면 '이미지 A'의 모든 구성 요소를 반복해야합니다.

모든 작업을 수행 OpenCV의 어떤 라이브러리 함수는 내가

을 찾고 있습니까?

또는

아무도 샘플 코드 또는 뭔가 좀 도와 수 유용 어떤 파이썬 lib 디렉토리.

감사

+0

이 부분을 실제로 이해하지 못합니다. " 교차 픽셀이 이미지 A의 구성 요소와 매우 느린 경우 모든 픽셀을 검사하려면 '이미지 A'의 모든 구성 요소를 반복해야합니다. " 픽셀을 고려하지 않고 픽셀이 속한 "객체"를 의미한다는 의미입니까? 그렇다면 "개체"는 어떻게 정의합니까? 입력과 출력에 대해 더 명확하게 설명 할 수 있습니까? – KobeJohn

+0

OpenCV에서는'cv2 '를 사용할 수 있습니다. bitwise_and()' –

답변

3
from skimage.morphology import label 
labels_a = label(a, 4, 0) #CCL analysis with 4 way connectivity and 0 as background 
output = np.zeros_like(a) #output as zeros with same shape as a 
intersecting_pixels_indicies = np.nonzero(a&b) #getting the indicies where a&b is true(1) 

objectIDs = set() 
for i,j in zip(*intersecting_pixels_indicies): 
    objectIDs.add(labels_a[i,j]) #get the ID's of the indicies. 

for i in range(output.shape[0]): 
    for j in range(output.shape[1]): 
     if output[i,j] in objectIDs: #if this id is in or list. add the value of a to output. 
      output[i,j] = a[i,j] 

는 당신에게 당신이 원하는 결과를 제공하는 경우이를 시도하고 빠른 충분히 있는지 확인하고 있었다.

먼저 연결된 구성 요소 분석이 4 방향 연결로 어레이에서 수행됩니다. 동일한 "객체"에 연결된 모든 픽셀은 동일한 값을 갖습니다. 따라서 셀의 값을 확인하면 관련된 객체의 ID를 가져옵니다. 배경이 -1 인 경우
참조 : 연결된 구성 요소 레이블링에 대한 자세한 설명은 http://en.wikipedia.org/wiki/Connected-component_labeling을 참조하십시오.

그러면 a와 b가 1 인 표시가 np.nonzero (a & b)에 의해 추출됩니다. 그런 다음 프로그램은 이러한 모든 표시를 반복하고 레이블이 지정된 배열의 해당 ID를 확인합니다. 우리가 관심있는 객체 세트에 추가.
이제 추출 할 모든 개체의 ID를 얻었습니다. 따라서 우리는 단순히 배열을 반복합니다. 각 셀에 대해 값이 흥미있는 objectID의 목록에 있는지 확인합니다. 그렇다면 우리는 아무것도하지 않으면 출력에 a 값을 추가합니다 (또는 0으로 설정할 수 있지만 출력은 모두 0으로 인스턴스화됩니다)

+1

나는 OP가 아니지만 그것은 대단합니다. 전에는 보지 못했던 저처럼,이 대답은 [scikit-image] (http://scikit-image.org/)를 사용하고 morphology.label은 주어진 픽셀을 연결된 영역의 일부로 식별합니다 [ 여기] (http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.label). – KobeJohn

+0

이 코드가 실제로하는 일에 대한 자세한 설명을 추가 할 수 있습니까? 아마 코드의 일부 주석이 있을까요? –

+0

@ HannesOvrén은 몇 가지 의견과 설명을 추가했습니다. – M4rtini

관련 문제