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

Define a function with buffer as bounding box parameter in halide

本文关键字:函数 卤化物 参数 边界 缓冲区 一个 定义      更新时间:2023-10-16

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

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,但如果位于 bounding_box 中给出的任何框中,则等于 255,bounding_box是动态大小。

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

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

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);