OpenCL read_imagef精度

时间:2017-05-29 06:38:53

标签: opencl interpolation

我正在尝试将图像放大254倍。 read_imagef返回的结果不是线性的,而是阶梯式的 - 我观察到每15分跳一次。采样器的精度是多少。

输入为9个值,输出为2304个值。

摘录输出:

x   read_imagef
120 120
121 120.9375
122 121.875
123 122.8125
124 123.75
125 124.6875
126 125.625
127 126.5625
128 128.4375
129 129.375
130 130.3125
131 131.25
132 132.1875
133 133.125
134 134.0625
135 135
136 135.9375
137 136.875
138 137.8125
139 138.75
140 139.6875
141 140.625
142 141.5625
143 143.4375
144 144.375
145 145.3125
146 146.25
147 147.1875
148 148.125
149 149.0625
150 150

我希望read_imagef返回x的值。

P.S。我在Mali GPU上试过它。

1 个答案:

答案 0 :(得分:1)

插值的精度是实现(通常是硬件)定义的,通常至少为8位。

你给出的数字实际上看起来比我预期的要糟糕:121,120.9375(?)122 .. 127,126.5625(?),128。

使用采样器进行插值可以放大8位精度正常的图像。对于任何更详细的内容(如高度图),您应该在OpenCL中进行插值,而不是依赖于采样器。

你也可能会用完计算浮点坐标的比特(只有23加一隐含)。像2304这样的值对整数部分使用11(10加一隐含)位,只留下13为小数部分。