android - 基于 GLES 2.0 着色器的滤镜可实现平滑皮肤

标签 android gpuimage

我目前正在使用 gpu-image port for android创建一个照片编辑应用程序并想要应用平滑的皮肤滤镜。

经过一番谷歌,我发现双边模糊和中值滤波器是实现这种效果的一些滤波器。

但是当尝试在 GPU 图像中应用双边模糊时,结果并不是很令人满意,因为它使眉毛和嘴唇等其他部分变得平滑。

任何人都可以建议我另一个好的过滤器,或者可能是组合多个过滤器以实现平滑皮肤效果的方法吗?我真的很想复制这个:like in the right-most image

最佳答案

我成功地为 Android 创建了 HighPassScalFilter,它也在 Github 上。

https://github.com/AmniX/HighPassSkinSmoothing-Android

实现就像:

enter image description here

理论

高通趋肤平滑背后的主要理论是频率分离。

频率分离将图像的色调和颜色与其更详细的纹理分开。这是可能的,因为数字图像可以解释为表示为正弦波的不同频率。

图像中的高频将包含有关精细细节的信息,例如皮肤毛孔、头发、细纹、皮肤缺陷。

低频是包含有关音量、色调和颜色过渡信息的图像数据。换句话说:阴影和亮区、颜色和色调。

https://fstoppers.com/post-production/ultimate-guide-frequency-separation-technique-8699 通过使用高通滤波器,可以将图像分为高空间频率和低空间频率。然后,我们将能够通过对图像的某些频率应用调整(图中的曲线调整)来平滑图像,同时保留精细的细节水平。 干杯。

关于android - 基于 GLES 2.0 着色器的滤镜可实现平滑皮肤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38936288/

相关文章:

android - 是否可以从有问题的线程而不是单独的线程调用 SIGSEGV 信号处理程序?

android - ProgressDialog 中的进度单元

用于 OCR 的 iOS UIImage 二值化 - 处理具有不同亮度的图像

java - 在android中有条件地显示所有联系人的最快方法

java - Android:从按钮设置文本,其中按钮文本由字符串给出

android - 如何弹出 "?123"Android键盘

ios - 我如何处理 GPUImage 图像缓冲区,以便它们可用于 Tokbox 之类的东西?

ios - 我可以检测相机是否使用 GPUImage 运行吗?

ios - GPUImage 裁剪为 CGRect 并旋转

ios - GPUImage GroupFilter、亮度和对比度 iOS