2017-05-29 72 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