Алгоритм размытия изображения OpenCl - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужна помощь в понимании этого алгоритма.Это алгоритм 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);
}
...