使用查找表

时间:2017-10-24 08:13:49

标签: image-processing opengl-es glsl lookup-tables

我正在开发一款Android应用程序,通过检测它来瘦脸或变胖。目前,我已经通过使用薄板样条算法实现了这一点。 http://ipwithopencv.blogspot.com.tr/2010/01/thin-plate-spline-example.html

问题是算法对我来说不够快,所以我决定将它改为OpenGL。经过一些研究,我发现查找表纹理是最好的选择。我有一组源图像控制点和它们的新位置用于扭曲效果。 我应该如何创建查找表纹理以获得扭曲效果?

1 个答案:

答案 0 :(得分:1)

您确定需要查找纹理吗?

似乎你有一个纹理矩形网格(或非矩形网格,当然,因为面部检测算法,你很可能返回一个面状网格)并且根据算法:

enter image description here

您不仅可以在顶点着色器中执行此操作,从而并行处理每个网格节点,而且与动态纹理生成相比,它处理的值更少。

实现这一目标的最兼容的方法是为每个网格点提供Y坐标0和X坐标(其中将存储网格索引),然后传递纹理(如果目标设备支持,则可能是buffer texture它)到顶点着色器,在所需的索引处,R和G通道包含所需的X和Y坐标。

在顶点着色器中,将从纹理加载坐标。

如果目标数据纹理已正确更新(例如,在像素着色器内部),此方法允许动态变形而无需重新加载几何体。