这个问题是关于Halide language的。
对特定的(x,y)说,我想对(x,y)周围的KxK补丁进行操作。例如。求和,求平方,等等,以获得(x,y)的新值。
大多数Halide示例中,我发现“硬代码”选择了相邻坐标。像this example中一样,还有主页上的模糊算法示例:
Func blur_x, blur_y; Var x, y;
// hard codes selecting x-1:x+1 and y-1:y+1
blur_x(x, y) = (input(x-1, y) + input(x, y) + input(x+1, y))/3;
blur_y(x, y) = (blur_x(x, y-1) + blur_x(x, y) + blur_x(x, y+1))/3;
但是,假设我想参数化KxK补丁的大小。我将如何选择然后在(x,y)附近的任意大小的邻域上进行运算?
答案 0 :(得分:0)
也许this是一个答案。
// First add the boundary condition.
Func clamped = BoundaryConditions::repeat_edge(input);
// Define a 5x5 box that starts at (-2, -2)
RDom r(-2, 5, -2, 5);
// Compute the 5x5 sum around each pixel.
Func local_sum;
local_sum(x, y) = 0; // Compute the sum as a 32-bit integer
local_sum(x, y) += clamped(x + r.x, y + r.y);
答案 1 :(得分:0)
关于您在评论中的问题,我认为您需要的是一个具有4个变量的Func:output(x,y,xi,yi)
x,y是每个色块中心的像素坐标,实际上是图像中像素的普通坐标。 xi,yi是每个色块内像素的内部坐标。
output(x,y,xi,yi)=输入(x + xi,y + yi)
通过这种方式,您可以获得一组可以操作的像素。