【问题标题】:Why opencl spec subtracts 0.5 for CLK_FILTER_LINEAR为什么 opencl 规范为 CLK_FILTER_LINEAR 减去 0.5
【发布时间】:2017-12-28 19:48:45
【问题描述】:

在阅读关于 CLK_FILTER_LINEAR 的 OpenCL 1.1 规范(第 8.2 节,p258)时,我了解到为了计算双线性滤波器的权重,将减去 0.5,如下所示。

i0 = address_mode((int)floor(u – 0.5))
j0 = address_mode((int)floor(v – 0.5))
i1 = address_mode((int)floor(u – 0.5) + 1)
j1 = address_mode((int)floor(v – 0.5) + 1)

而对于 CLK_FILTER_NEAREST,它直接将 u 和 v 设为如下:

i = address_mode((int)floor(u))
j = address_mode((int)floor(v))

因此,似乎存在差异。当我提供非标准化坐标 (5,4) 时,NEAREST 过滤器将读取像素 (5,4)。而对于 LINEAR 过滤器,将从 (4,3)、(5,3)、(4,4) 和 (5,4) 产生平均像素。但即使对于 LINEAR 过滤器,我也希望从 (5,4) 中读取,因为权重将为 1、0、0、0。

opencl1.1_spec

谁能澄清一下规范的意图?

【问题讨论】:

    标签: opencl gpgpu hardware-acceleration


    【解决方案1】:

    这是真的。如果要读取非插值像素,则需要将 (0.5,0.5) 添加到坐标。 “圆形”数字(以 .0 结尾)位于像素之间,并且将被均匀混合。

    【讨论】:

    • 我明白了。因此,当人们在“整数”坐标处读取像素时,OpenCL 设备将尝试获取中心位于该“整数”坐标处的像素。为此,它将平等地混合 4 个像素接触该“圆形”数字坐标。
    • 如果这样想:用方格纸表示像素,整数在直线上,0.5在正方形的中心。
    猜你喜欢
    • 2014-09-07
    • 2018-06-30
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多