如何对深度图像进行双边滤波器处理程序

如何对深度图像进行双边滤波器处理程序,第1张

双边滤波(Bilateralfilter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。

具有简单、非迭代、局部的特点。

[cpp] view plaincopyprint?

1. UCHAR3 BBColor(int posX , int posY)

2. {

3. int centerItemIndex = posY * picWidth4 + posX * 3 , neighbourItemIndex

4. int weightIndex

5. double gsAccumWeight = 0

6. double accumColor = 0

7.

8. // 计算各个采样点处的Gaussian权重,包括closeness,similarity

9. for(int i = -number i <= number ++i)

10. {

11. for(int j = -number j <= number ++j)

12. {

13. weightIndex = (i + number) * (number * 2 + 1) + (j + number)

14. neighbourItemIndex = min(noiseImageHeight - 1 , max(0 , posY + j * radius)) * picWidth4 +

15. min(noiseImageWidth - 1 , max(0 , posX + i * radius)) * 3

16.

17. pCSWeight[weightIndex] = LookupGSWeightTable(pSrcDataBuffer[neighbourItemIndex] , pSrcDataBuffer[centerItemIndex])

18. pCSWeight[weightIndex] = pGSWeight[weightIndex] * pGCWeight[weightIndex]

19. gsAccumWeight += pCSWeight[weightIndex]

20. }

21. }

22.

23. // 单位化权重因子

24. gsAccumWeight = 1 / gsAccumWeight

25. for(int i = -number i <= number ++i)

26. {

27. for(int j = -number j <= number ++j)

28. {

29. weightIndex = (i + number) * (number * 2 + 1) + (j + number)

30. pCSWeight[weightIndex] *= gsAccumWeight

31. }

32. }

33.

34. // 计算最终的颜色并返回

35. for(int i = -number i <= number ++i)

36. {

37. for(int j = -number j <= number ++j)

38. {

39. weightIndex = (i + number) * (number * 2 + 1) + (j + number)

40. neighbourItemIndex = min(noiseImageHeight - 1 , max(0 , posY + j * radius)) * picWidth4 +

41. min(noiseImageWidth - 1 , max(0 , posX + i * radius)) * 3

42. accumColor += pSrcDataBuffer[neighbourItemIndex + 0] * pCSWeight[weightIndex]

43. }

44. }

45.

46. return UCHAR3(accumColor , accumColor , accumColor)

47. }

已发至邮箱,查收吧。。。。

能,美颜能把一般般长相的人整的好看的。

拜各类技术和软件的发展所赐,当我们出现在镜头面前时,计算机算法就已经自动将采集到的人像进行了美颜处理。因此,镜头里的人总是那么“不真实”。

那么,这些软件背后需要用到什么程序算法?计算机是如何识别人的面部和身体,并对这些部位进行美化的呢?

其实,美颜和绘画有很多相似性,绘画首先是画线稿,确定人体基础结构,然后在线稿之上进行上色,逐步丰富细节,最后完成一幅作品。

我们拍摄的原始人体图像也是“画线稿”,手机收集原始数据,将图像上传到后台进行定位和识别。这一步的目的是确定人体的特征位置。

接下来开始“上色”,用算法和技术对五官或身体部位进行分析、处理、美化,最后得到美颜后的图像。

只不过完成一幅绘画作品需要较长的时间,而美颜却是瞬时的、即刻的,这背后需要有强大的计算机技术作为支撑。

人脸关键点定位技术识别五官

美颜技术有多强大?美颜技术原理与程序算法

如今的美颜相机,已经可以给眼睛画眼影、给嘴唇涂口红。那么,这些功能是怎么精准识别图像中人脸的特定部位的呢?

这其中利用的是人脸关键点检测技术,即通过寻找脸部特征点来确定五官的精准位置。一般来说,定位的关键点数量越多,最终的美颜效果越好。

目前主流的人脸关键点检测方法有两种:基于特征的人脸检测和基于图像的人脸检测。目前使用最多的是基于特征的人脸检测方法。

原始人脸数据被上传至后台后,人脸检测技术会对原始的图像帧进行识别。眼睛、眉毛、T型区(即眼睛+鼻子构成的区域)、嘴、下巴会被依次识别,识别的数据被放入人脸信息结构体中,之后再被应用到具体的美颜算法中,对特定部位进行美化。

图像平滑技术帮你磨皮

女生在化妆时会先涂一层粉底液,主要作用是美白和减少皮肤瑕疵。这其实就相当于美颜功能中的美白和磨皮。

美颜技术有多强大?美颜技术原理与程序算法

好的磨皮效果应该是怎样的?首先最重要的是让皮肤变光滑,同时还要尽量保留更多细节(如皮肤肌理),让五官轮廓清晰可见,这样的图片看起来更真实、更有质感。

磨皮利用的是图像平滑技术,因为在拍摄图像时会受到噪声干扰,使图像质量降低,因此要对噪声进行过滤。过滤后的图像将变得平滑,多余无用的信息会被剔除掉。

过滤图像噪声的工具是滤波器,一般常用的滤波器有中值滤波、边缘保持滤波、双边滤波(又称高斯双边滤波)等。中值滤波和边缘保持滤波的缺点是不能很好地保留图像的边缘信息;而双边滤波可以保留大量人脸细节且确保边界处不会被模糊掉,因此其应用最为普遍。

色彩模式切换美白皮肤

我们人眼的“像素”很高,能看见世界的色彩斑斓,那没有“眼睛”的计算机怎么识别颜色呢?

图像中的色彩一般用RGB模式表示,R、G、B分别代表红、绿、蓝,具体数值从0—255变化。R、G、B的数值越趋于0,图像越黑;相反,越接近255就越白。此外,还有HSV模式(H、S、V分别代表色彩、饱和度、明度),这两种色彩模式可以通过算法实现转换。

很多美白技术会将RGB模式转化为HSV模式后再进行调整:先用算法对皮肤像素的颜色数据进行大量统计,得到肤色像素的取值范围,然后再调节像素的各项数值大小,让图像中的皮肤变白、变亮。

美颜技术有多强大?美颜技术原理与程序算法

美颜技术有多强大?美颜技术原理与程序算法

模板与原图合成“定制”妆容

美颜相机里还能“定制”妆容,包括口红、腮红、眼妆等。这是因为相机软件里植入了预先设计的、不同风格的妆容模板,当人脸出现后,首先会基于人脸关键点检测技术,识别出特定部位,然后妆容模板会投射到人脸特定区域,最后妆容和原始图像进行高效合成,给图像里的人“化妆”。

以画眉为例,许多软件都提供了多套眉毛的图片模板,先检测出原始图像眉毛的关键点位置,眉毛的第一个关键点会作为贴合的起始位置;算法还会对眉毛模板的大小和范围作出调整,使模板和人的原始眉毛能更好地贴合;最后在原图上进行融合,得到自然、逼真的画眉效果。

这样一看,美颜果然是个“技术活”。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11583070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存