2017-05-29 41 views
0

我正在试图放大图像254倍。 read_imagef返回的结果不是线性的,而是楼梯 - 我观察每15点跳跃一次。采样器的精度是多少?OpenCL read_imagef precision

输入是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上试过了。

+0

你使用浮点坐标规范化还是非规范化? – kanna

+0

@ kanna float unnormalized – olegkhr

回答

1

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

你给实际上看起来更糟的数字比我期望:(?)(?)121,120.9375 122 ... 127,126.5625,128

使用插值采样是确定的扩大图像,其中8位精度很好。对于更详细的内容(如高度图),您应该在OpenCL中进行插值,而不要依赖采样器。

您也可能会用完位(只有23加上一个隐含的)计算浮点坐标。类似于2304的值使用整数部分的11(10加上一个隐含的)位,仅剩下小数部分的13。

+0

输入:0,288,576,864,1152,1440,1728,2016,2304。在我的问题输出是前两个点之间的插值。 – olegkhr

+0

我已经意识到,这是由于hardare插值精度有限,在OpenCL中实现插值,就像您建议的那样。也插入原始坐标intead我插值偏离参考坐标 - 允许具有相同的精度的所有范围coodinates。 – olegkhr