Android磨皮算法的实现 renderScript实现表面模糊

这篇博客介绍了如何利用RenderScript在Android上实现图片的表面模糊效果,这是磨皮算法的一部分。通过创建RenderScript对象,将Bitmap转换为Allocation,然后使用ScriptIntrinsicBlur进行模糊处理,设置模糊半径并应用到图片上。最后,将处理结果保存回Bitmap并展示。完整的磨皮算法包括保边滤波、肤色检测、图像融合和锐化等步骤,但商业级的实现更为复杂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  renderScript实现简单的图片处理效果,,这一篇继续介绍一些常用的图片处理算法。

待处理图片


实现模糊效果:


这个效果是我看过各种实例中用过最多的一种,或许是由于模糊效果的常用性,Android提供了封装好的api可以直接调用:

Bitmap overlay = BitmapFactory.decodeResource(getResources(),R.drawable.scene);
RenderScript rs = RenderScript.create(MainActivity.this);
Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);//解析bitmap到allocation
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs,overlayAlloc.getElement());//创建模糊效果工具类,相当于BlurRS
blur.setInput(overlayAlloc);
blur.setRadius(6);//设置模糊力度
blur.forEach(overlayAlloc);//调用脚本中的核心算法
overlayAlloc.copyTo(overlay);//输出结果到bitmap
view.setBackground(new BitmapDrawable(getResources(),overlay));
rs.destroy();

 
系统提供的模糊算法在调用上与我们写的其他图像处理算法很像,也就是说通过api调用可以省去编写rs脚本的麻烦。Rs脚本和之前的文章写法差不多,也就是算法上对当前像素的取值要参考以当前像素为中心,以r为半径的区域内所有像素点的平均值.
平均值是怎么计算出来的呢?最简单的一种,直接算术平均,把r区域内的所有临近点加起来一除,得到的就是中间点的像素值,这样最终效果较差,因为图像大多是连续的,越靠近区域中间像素关联越大,理应对中心像素产生更大的影响,越远离区域中心,对中心点的影响应该越小,因此,应该采用加权平均更为合理。
有一种加权平均参照高斯分布,以x轴为距中心点距离,y轴为权重,可以用二维高斯函数来建立数学模型:
 
 
                                               (图片来自百度图片)
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值