2014-11-03 3 views
0

크기가 작은 배열 (500, 500, 3)로 표현되는 RGB 이미지가 있습니다. 나는 또한 각 픽셀이 0과 99 사이의 정수 값을 갖는 크기 배열 (500, 500)을가집니다. 이것은 기본적으로 이미지를 여러 하위 영역으로 나눕니다. 서브 어레이에 속하는 픽셀은 동일한 정수 인덱스를 공유합니다.python : 이미지의 하위 집합에 대한 통계 계산

저는이 부분 집합 각각에 대해 평균 및 표준 편차를 계산하는 것과 같은 계산을하는 데 관심이 있습니다. 나는 그것이 루프를 많이 포함하고있는 중이 야

# image is of size (500, 500, 3) ->RGB values 
# label is of size (500, 500) -> contains integers   
import numpy as np 

mean = np.zeros((100, 3)) 
for i in range(0, 100): 
    count = 0 
    for x in range(0,500): 
     for y in range(0,500): 
      if label[x, y] == i: 
       mean[i, :] += image[x, y,:] 
       count = count + 1 

    # Compute the mean 
    if count > 0: 
     mean[i,:] /= count 

방법과 꽤 비 파이썬 될 것으로 보인다 및 I : I는 다음과 같이 이미지 위에 반복하여이 작업을 수행 할 수 있습니다 (예를 들어 평균을 계산합니다) 이 작업을 수행하는 데 더 나은 (속도 감각으로) 방법이 있는지 궁금해하고있었습니다.

답변

4

를 사용하여 논리적 색인 및 마스크 :

image[label==i,:].mean(0) 
+0

감사합니다! 이제 코드 세그먼트를 작성하는 것이 당황 스럽습니다. 평균 함수에 대한 매개 변수 (0)가 무엇을 설명 할 수 있습니까? 그것은 각 축을 따라 컴퓨팅 평균 인 것 같습니다 (이것은 내가 원했던 것입니다!) 그러나 문서에서 나에게 명확하지 않습니다. – Luca

+1

처음 두 치수가 마스크에 의해 평평 해지고 첫 번째 치수에 대해 평균값이 계산되므로 3 개의 요소가있는 벡터를 얻을 수 있으므로 2 차원 배열을 얻습니다. – Daniel

1

당신은 더 많은 '파이썬'을 만들 수 있습니다. 그러나 가능한 한 모든 값을 반복하는 대신 i=label[x:y] 좌표를 사용하여에서 실제 현재 인 텐트 값을 검색하여 첫 번째 루프를 잃을 수 있습니다.