2016-07-06 2 views
1

Halide 픽셀의 개별 색상 채널을 수정하는 데 관심이 있습니다. 예를 들어 어떻게 빨강 채널을 밝게 할 수 있지만 녹색과 파란색 채널을 변경하지 않고 유지할 수 있습니까? 모든 픽셀의 모든 색상을 밝게 표시하는 것은 다음과 같습니다.Halide에서 색상 채널을 개별적으로 수정하는 방법은 무엇입니까?

Halide::Expr value = input(x, y, c); 
value = value * 2.0f; 
brighter(x, y, c) = value; 

그러나 아래 방법으로 단일 채널을 밝게하려고하면 오류가 발생합니다.

Halide::Expr value = input(x, y, c); 
value(x,y,0) = value(x,y,0) * 2.0f; // brighten red 
value(x,y,1) = value(x,y,2);  // keep green the same 
value(x,y,2) = value(x,y,3);  // keep blue the same 
brighter(x, y, c) = value; 

오류 : 그래서

ImgPipe_Halide.cpp:88:14: error: no match for call to ‘(Halide::Expr) (Halide::Var&, Halide::Var&, int)’ 

, 어떻게 픽셀에서 개별 채널 값을 읽을 수 있고, 어떻게 수정할 수 있습니까?

답변

2

한 가지 방법은 할라이드의 선택 기능을 사용하는 것입니다

예 :

value = Halide::select(c == 0, input(x,y,c) * 2.0f, 
         input(x,y,c)); 
+0

대답 주셔서 감사합니다! 표시 할 때 입력에 적용하면 작동합니다. 흥미롭게도 이것은 값 (실제로는 같은 오류)에서 선택하면 작동하지 않습니다. 이것은 선택 함수가 Halide 함수 및 이미지에서는 작동하지만 표현식에서는 작동하지 않는다는 것을 의미합니다. – Kantthpel

+1

이것이 올바른 해결책입니다. 오류는 자유 변수를 사용하여 Expr을 인덱싱 할 수 없기 때문입니다. 자유 변수로만 Func을 인덱싱 할 수 있습니다. 값 (x, y, 0)은 의미가 없습니다 - 이미 값 (x, y, c)이 입력되어 있지 않습니다 (x, y, 0). –

관련 문제