有没有办法将两个输入图像堆叠到卤化物发生器中的单个 4 维缓冲区中?

Is there a way to stack two input images into a single 4 dimensional buffer in a Halide Generator?

本文关键字:发生器 卤化物 单个 缓冲区 图像 输入 两个 有没有      更新时间:2023-10-16

我的生成器管道中有两个输入图像(rgb(。每个都经过自定义裁剪并调整为 NxNx3 图像的大小。发电机的输出Output<Buffer<float>> {"batch", 4}; // (N, N, 3 ,2)和我设定

batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = image_2_resized(x, y, c);

但是当我去编译它时,它会出现段错误(我无法检索有用的调试信息(。如果我尝试这个:

clamped_image_1 = BoundaryConditions(image_1_resized, 0 ,{{0, N}, {0, N});
batch(x, y, c, batch_size) = cast<float>(0); 
batch(x, y, c, 0) = image_1_resized(x, y, c);
batch(x, y, c, 1) = clamped_image_1(x + 10, y, c);

它编译并且工作得很好。我很想知道,我想要用卤化物完成的事情是否可行?

与其将其作为多级功能执行,不如尝试使用 select 在单个阶段中填充不同的通道。

batch(x, y, c, n( = select(n==0, image_1_resized(x, y, c(, image_2_resized(x, y, c((;

然后你可以通过绑定和展开 N 来调度它,卤化物将删除分支:

batch.bound(n, 0, 2(.unroll(n(;