我正在尝试从大图像(大约2048 x 2048)创建一个光度值的直方图来执行此操作,我正在关注this method以计算GPU上的直方图。
基本上,它归结为为每个像素创建一个点,并在该点通过顶点着色器进行纹理采样,然后将1 /(数字像素)的值输出到1维纹理(256 x 1)。如果将混合模式设置为glBlendFunc(GL_ONE,GL_ONE),这将意味着您的1维纹理最终将累积有效直方图。
然而,根据我的经验,当像素数是合理的时候,输出纹理没有足够的精度来增加1 /像素数。
有没有办法将 iPhone 上的纹理精度提高到适应这种精度的增加?
答案 0 :(得分:2)
目前,iOS上的OpenGL ES不支持渲染到每个颜色通道高于一个字节的精度纹理。见render to floating point texture under iOS。您需要将每个bin增加1,这意味着着色器将输出1/256。
为了防止饱和,您似乎可以使用您引用的纸张的第2.2节(“容器内容积累的精确注意事项”)中所述的技术。那就是在局部直方图中分配像素,然后在最后进行聚集。