使用缓冲区定义一个函数作为卤化物中的边界框参数

时间:2017-08-01 01:42:05

标签: c++ halide

我正在尝试定义一个使用卤化物生成蒙版图像的函数。 有一个缓冲区

Buffer<int> bounding_box;
bounding_box(0, 0) = min_x0;
bounding_box(0, 1) = max_x0;
bounding_box(0, 2) = min_y0;
bounding_box(0, 3) = max_y0;
bounding_box(1, 0) = max_x1;
....

我定义Func Mask(x, y)等于0到处都是255但如果位于bounding_box中给出的任何框中则为255,bounding_box是动态大小。

尝试使用DRom但不能成功,因为DRom参数不可变。

1 个答案:

答案 0 :(得分:0)

自己想出来。 它可以通过创建定义每个边界框的函数来解决,并合并到最终函数中。

Func mask_stack(x, y, c) = select(x >= bounding_box(c, 0) && 
                               x <= bounding_box(c, 1) && 
                               y >= bounding_box(c, 2) && 
                               y <= bounding_box(c, 3), 255, 0)
RDom r(0, bounding_box.width());
Func mask(x, y) = 0;
mask(x, y) = Halide::max(mask(x, y), mask_stack(x, y, r));
Halide::Buffer<int> input_buf  = mask.realize(image_width, image_height);