2012-11-05 3 views
3

이해하기 쉽지만 Brad Larson의 GPUImage에서 normalizeColor 함수를 사용하지 않습니다. 예 : Threshold.fsh에서 colorObjectTracking 예제 :Brad Larson의 Threshold 필터의 normalizeColor

여기
vec3 normalizeColor(vec3 color) 
{ 
    return color/max(dot(color, vec3(1.0/3.0)), 0.3); 
} 

내가 무엇을 얻을 수 있습니다 : 당신은 들어오는 색 "컬러"를 타고 (0.3 또는 색상 벡터와의 내적에 의해 중 1/3을 분할 , 1/3, 1/3).

그래서 두 가지 질문 :

이 요소 년대의 평균에 "컬러"를 정상화하는 것이 필요하다 왜
  1. ?
  2. 최소 제한은 0.3입니까? (내가 최대() 함수를 이해)

고마워! alti

답변

2

더 적절한 장소는 프로젝트 사이트 자체에 있었을 지 모르지만 나는 물 것입니다.

조각 쉐이더의 포인트는 특정 색상의 이미지 픽셀을 식별하는 것입니다. 이 함수는 색상의 밝기에 대한 조잡한 정규화를 수행하므로 객체의 색상을 일치시킬 때 다양한 조명 조건이 고려 될 수 있습니다. max() 작업에는 특정 색상 값이 실제로 엉망이되는 것을 막기위한 모자가 있습니다.

이 특정 조각 셰이더는 Apple Core Image 엔지니어가 제공 한 GPT Gems 기사의 "Object Detection by Color: Using the GPU for Real-Time Video Image Processing" 예제를 전적으로 기반으로하며 여기에 대해 좀 더 자세히 설명합니다.

더 나은 방법은 휘도 성분을 제거하고 대신 픽셀의 색차를 조사하여 주어진 색상에 근접성을 얻는 것입니다. YUV 소스를 가지고 있다면 Cr 및 Cb 구성 요소에서이 작업을 쉽게 수행 할 수 있습니다. 내 GPUImageChromaKeyFilter는 RGB 입력에서 YUV 데이터의 추출을 보여 주며, 그 다음 색상 정보 주위에 thresholding이 적용됩니다. 이것도 Apple의 예에서 나온 것입니다 (ChromaKey WWDC 샘플에서 나온 것 같습니다).

+0

답장을 보내 주셔서 감사합니다 & 링크! – alti

+0

@BradLarson 어떻게 목표 C와 C가 아닌이 함수를 사용할 수 있습니까? C 나는 RGB가 – Yadnesh

+0

인 RGB를 정규화해야합니다. @Yadnesh - Objective-C는 C의 수퍼 세트이므로 정확히 동일합니다. –

관련 문제