聊聊图像的抽象化处理
最近看了些关于图像的抽象化处理的资料,感觉挺有意思的,在这里跟大家分享一下。自己相对于真实感渲染,比较关注的是NPR方面的东西,所以以后写的东西大概都会发在这个专栏,感兴趣的童鞋可以关注下。何为图像的抽象化
简单的讲就是输入一张图像,生成一张简单易懂的图像。它可以作为其他风格(比如铅笔画,水彩画等)的预处理。也可以本身形成一种风格。图像的抽象化其实具体有两个方面。一个是结构的简化(比如点线面),一个是颜色的简化。比如标题的图像就是结构变简单了明暗层次也简化了。下面的图也很好地解释了图像的抽象化:
图像抽象化的相关研究
下面会列出一些相关的研究论文,感兴趣的童鞋可以自行搜索。
Stylization and abstraction of photographs
主要是边缘检测和色彩分割,在色彩分割的时候导入了观察者的视角的概念。在观察者看得清的地方保留较多细节(分的较细),在看不太到的地方分的较粗。
Real-Time Video Abstraction
在lab颜色空间进行处理,用了Bilateral Filter和色彩量化做颜色的简化,然后用DOG提取边缘。
Coherent Line Drawing
生成比较好看的线描画。为了对噪点有比较好的鲁棒性,导入了Edge Tangent Flow的概念。
Image Abstraction by Structureasa Adaptive Filtering
用了Bilateral Filter的变种Separated Orientation-aligned Bilateral Filter做了滤波,然后做色彩量化。另外,用了FDOG的变种Separated Flow-based Difference-of-Gaussians来做边缘检测。
Flow-Based Image Abstraction
主要是色彩的简化,使用了Bilateral Filter的变种Flow-Based Bilateral Filter(FBL filter)。
Pixelated Image Abstraction
生成像素画的研究。不仅仅是分辨率降低了,也做了色彩的减少。
Non-photorealistic rendering with spot colour
比较另类的研究,模拟了专色的效果(关于专色可以看这里https://zhuanlan.zhihu.com/p/41835690)。首先将图像转为HSV,然后在H上对图像进行明度量化,通过图像的矩来计算量化得到的色块的形状,还计算了每个色块的显著性。然后对形状相对紧密,并且显著性高的色块上色。但是感觉算法缺乏理论依据,结果也不是很稳定。
Learning Deep Sketch Abstraction
使用强化学习去训练笔触,由于对机器学习不怎么了解,所以没有怎么理解,权当增长见识。
Unity中使用Compute Shader来实现
我选的是Image Abstraction by Structureasa Adaptive Filtering这篇论文的方法,因为这篇论文的算法是用OpenGL实现的,移植到Compute Shader应该是可行的。
处理流程如下:
1.在RGB颜色空间计算结构张量;
2.平滑结构张量;
3.计算结构张量的两个特征向量;
4.将图像转为Lab;
5.用Separated Orientation-aligned Bilateral Filter滤波得到颜色简化的图像;
6.用Separated FDoG对5的结果滤波得到边缘;
7.对5的结果进行颜色量化(只在明度L上进行量化);
8.将6和7的结果合在一起;
9.将Lab转为RGB颜色空间。
结果如下:
原图
抽象化后的图像
由于是在GPU上作为后处理实现的,因此是实时的:
实时的抽象化
https://www.zhihu.com/video/1227325875521540096
通过调整参数可以得到截然不同的风格:
截然不同的风格
https://www.zhihu.com/video/1227328271488159744
算法很简单,代码就不放了。 关注点赞收藏三连发 我选的是Image Abstraction by Structureasa Adaptive Filtering这篇论文的方法,因为这篇论文的算法是用OpenGL实现的,移植到Compute Shader应该是可行的。----大佬,这个opengl的代码有开源吗? 没有啊,cs的代码是自己写的 大佬代码可以分享一下吗 大佬,可以分享一下代码吗?[感谢] 大佬,求代码分享
页:
[1]