为什么opencl规范为CLK_FILTER_LINEAR减去0.5

问题描述 投票:0回答:1

在阅读关于CLK_FILTER_LINEAR的OpenCL 1.1规范(第8.2节,第258页)时,我开始知道,为了计算双线性滤波器的权重,将减去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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.