2016-07-06 39 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編制索引。你只能用自由變量索引Funcs。 value(x,y,0)沒有意義 - 值已經被輸入(x,y,c),而不是輸入(x,y,0)。 –