Android GPU加速实现图像颜色传递(Color transfer)
2015-04-23 09:23
1061 查看
题记:
最近研究了使用opengl es在安卓上实现图像颜色传递。其要实现的效果是将一张图像的颜色特征传递给另外一幅目标图像。算法基于http://www.cs.utah.edu/~shirley/papers/ColorTransfer.pdf。基本思想是将图像转换到lab色彩空间,计算被转移图像和目标图像在该空间中的均值与色彩方差,之后将目标图像像素的lab值减去该图像的lab均值,再乘以被转移图像方差与目标图像的方差比值,最后加上被转移图像的lab均值。计算结束后,将图像从lab转换到rgb颜色空间进行显示。该算法在pc上可以使用cpu进行计算,但是在手机上只是使用cpu需要消耗很长的时间,尤其该算法需要至少5次遍历图像像素,即便提前计算出被转移图像的lab空间均值与方差,依旧需要3次图像像素遍历(目标图像计算均值遍历一次,计算方差遍历一次,还原rgb计算一次),同时该算法遍历图像时需要进行log和pow运算,该两项运算又是极为耗时。在实现GPU版本之前,本人先实现了安卓上的cpu版本(native层实现处理),其中log和pow运算使用查表方式,但是处理一张1080*720的图像依旧需要300ms。这在用户体验上是不可接受的,尤其为了更方便用户的操作,本人对于原算法进行了一点改进,在最后一步加被转移图像均值时(假设为
meanSource),用户可以实时的在(0 - 2 * meanSource)中进行选择,其意义为将该图像有多么偏向于被转移图像。用户在拖动seekbar时需要进行实时计算最终结果,而这即只能提供40-50ms,所以最终只能考虑使用gpu加速进行实现。
最终效果图如下图:最下面一排为被转移图像或者可以称为自定义滤镜,下面这张图像使用了最左边的作为自定义滤镜。
1. 搭建Android gpu图像处理加速框架
在安卓上使用opengles进行绘制比较简单,相关文章推荐
- 在Android上实现图像颜色过滤与反转
- 在Android上实现图像颜色过滤与反转
- 在Android上实现图像颜色过滤与反转
- android中如何使用GPU实现硬件加速,3D渲染
- 在Android上实现图像颜色过滤与反转
- Android Color 颜色过度计算实现方法
- 在Android上实现图像颜色过滤与反转
- 图像处理技术/图像滤镜(GPUImage/GPU加速)、美化、拼接及Skia- Android
- Windows10 64Bit完美配置Theano并实现GPU加速并解决((CNMeM is disable,CuDNN not available))
- android中setBackgroundColor()中不能设置背景颜色的问题
- Android动态修改图片颜色的实现方式分析
- Android Html用js实现互通传递数据(Android和html数据传递)
- Android get/ post 方法 传递网络数据 -简单的翻译功能实现(GET)
- Android 微信6.1 tab栏图标和字体颜色渐变的实现
- Android进阶之路-Intent传递数据,数据回写,ActionBar菜单实现,销毁前数据保存,Intent意图(电话,网络)
- 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程
- Android常用的颜色列表 color.xml
- Android 实现页面跳转并传递参数教程
- Android用Selector实现Button按下,不可点,正常三种状态下背景颜色的变化
- android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据