2011-10-26 1 views
1

전체 이미지에서 한 색상의 평균값을 계산하여 색상, 채도 또는 강도 또는 기타이를 나타내는 다른 값을 결정하려고합니다. 동영상의 프레임간에 변경됩니다. 그러나 전체 프레임 (및 sigle, 선택한 색)을 설명하는 하나의 값만 얻고 싶습니다. 프레임의 색상의 단순 평균값을 계산하면 비디오 프레임 사이의 차이가 매우 작습니다. 0..255 공간에서 2-3입니다."이미지에서 단일 색상의 양"을 결정합니다.

히스토그램 이외의 이미지의 색상을 결정하는 다른 방법이 있습니까? 이해하는 한 개 이상의 값으로 단일 프레임을 설명 할 수 있습니다.

+0

각 프레임에서 하나의 색을 추출하고 해당 색을 사용하여 프레임을 구별하려고합니까? – misha

답변

0

최악의 시나리오에서는 이미지의 모든 픽셀을 반복하여 계산할 수 있습니다. 현명한 프로그래밍을 사용하고 있는지 확실하지 않지만 Numpy와 비슷한 Python을 사용합니다. 여기서 pb는 내 이미지가있는 gtk pixbuf입니다.

def pull_color_out(self, pb, *args): 
    counter = 0 
    dat = pb.get_pixels_array().copy() 
    for y in range(0,pb.get_width()): 
     for x in range(0,pb.get_height()): 
      p = dat[x][y] 
      #counts pure red pixels 
      if p[1] = 255 and p[2] = 0 and p[3] = 0: 
       counter += 1 

    return counter 

그 외에는 일반적으로 히스토그램을 사용하여 필요한 데이터를 얻습니다. 주로 동영상의 경우 가장 빠른 옵션은 아니지만 시간이나 프레임이 몇 개있는 경우 해킹 할 수 있습니다. P

1

어떤 라이브러리를 이미지 처리에 사용하고 있습니까? OpenCV (또는 Matlab)라면 여기의 단계가 아주 쉽습니다. 그렇지 않으면 주변을 둘러보고 조금 실험해야합니다.

  1. 이미지의 색상을 클러스터링하기 위해 평균 시프트 필터를 사용합니다 (또는 회색 중 하나). 비슷한 색상이 함께 클러스터됩니다. 이렇게하면 처리 할 색상 수가 줄어 듭니다.
  2. 그레이 레벨로 변경하고 이미지에있는 픽셀 값의 빈 [0 ... 255]을 사용하여 빈도 막대 그래프를 계산하십시오.
  3. 가장 높은 빈도 - 중앙값은 해당 빈 가장 많이 선물한다. 각 bin의 빈도는 no. 프레임에있는 색상의 픽셀 중 하나입니다.
  4. 프레임을 가장 많이 표현하는 색상 인 중간 색 값을 단일 색상으로 사용하십시오.

    여기서 중요한 점은 위의 단계가 실시간 비디오에 충분히 빠르다는 것입니다. 내가 추측 해 내야 할게있어.

관련 문제