Мне нужна помощь в понимании этого алгоритма.Это алгоритм OpenCl для размытия изображения.Я думаю, что каждый пиксель в выходном изображении эквивалентен среднему значению соседнего пикселя во входном изображении.Входные пиксели распаковываются для получения компонентов RGB, и фильтр применяется к каждому компоненту, а затем упаковывается обратно в пиксель.
__kernel void Blur(__read_only image2d_t in, __write_only image2d_t out, int size)
{
int Width = get_image_width(in);
int Height = get_image_height(in);
int tx = get_global_id(0);
int ty = get_global_id(1);
float kernelValue = 1.0 / (size*size);
float halfVal = size / 2;
float4 output;
float R = 0, G = 0, B = 0;
for(int x = -(int)halfVal; x <= (int)halfVal; x++)
{
for(int y = -(int)halfVal; y <= (int)halfVal; y++)
{
float realX = min(max(tx+x,0),Width-1);
float realY = min(max(ty+y,0),Height-1);
int2 coordsRead = (int2)(realX, realY);
float4 c = read_imagef(in,coordsRead);
R += c.x * kernelValue;
G += c.y * kernelValue;
B += c.z * kernelValue;
}
}
output = (float4)(R,G,B,1);
int2 coordsWrite = (int2)(tx,ty);
write_imagef(out,coordsWrite,output);
}