需要帮助在卤化物中实现如果等效的话
if (current_pixel_mag > threshold) {
mag = 65535;
ed = 0;
}我试过Halide,但这相当于C中的三值运算符,并且不支持给定条件下的多个语句。
发布于 2019-11-12 08:06:04
如果我说得对,下面的代码应该可以完成这项工作:
Var x, y;
Func mag = ...;
Func ed = ...;
Expr threshold = ...;
mag(x, y) = select(mag(x, y) > threshold, 65535, mag(x, y));
ed(x, y) = select(mag(x, y) > threshold, 0, ed(x, y));由于更新定义,它效率很低,很难在x, y上的单个循环中调度两个函数。
也就是说,您可以在一个函数中存储多个语句,然后可以使用元组。元组有另一个select函数,称为tuple_select。
Func magAndEd;
magAndEd(x, y) = {mag(x, y), ed(x, y)};
magAndEd(x, y) = tuple_select(magAndEd(x, y)[0] > threshold, {65535, 0}, magAndEd(x, y));此外,可能还可以将阈值化简化为magAndEd的初始定义。
https://stackoverflow.com/questions/58808916
复制相似问题