欢迎光临散文网 会员登陆 & 注册

不负责任想想小波变换实现海面Shader的思路

2023-02-07 02:23 作者:DeadCyber  | 我要投稿

最近ShaderToy上有一个实时GI让人眼前一亮

https://www.shadertoy.com/view/ctSGWm

Àtrous Wavelet Denoising

我对这个实现并不是很感兴趣,只不过这个画面(主要是两个金属管)特别有真实感。

其中有一个词Wavelet。以前瞎研究的时候经常碰到它,于是想去搞搞清楚。


以前的印象中说,

1.对于一些特殊应用场景,傅里叶变换的效果不是特别满意。

2.于是有了滑动窗口傅里叶变换。比如如果我们提前知道信号有一些特性,比如分3部分周期各相迥异,就可以分块变换。当然变体有很多,叫法也不一样。

3.但是滑动窗口傅里叶变换,显然需要我们手动赋予一些参数,窗口怎么设置...效果不一定好。

4.于是直到最近(1974),才开发出一种方法叫Wavelet Transform(小波变换),貌似解决了这方面的问题。

5.也就是说,小波变换大体是傅里叶变换的plus utilmate pro max版(当然具体场景肯定具体应用,不能说完全代替)。


今天找到了一个视频介绍得特别清楚,https://www.youtube.com/watch?v=jnxqHcObNK4。

让我影响深刻的有几点:

  1. 深刻点一,小波变换的基函数(以下简称base)就是一个设计好的“小波函数”,可以有不同的形状:


特征1:定积分为0

特征2:模的定积分有限

显然这个条件比较宽泛,不过一般都会Normalize,方便查看百分比。

最典型的一个是:

2.深刻点二,如果说FT(傅里叶变换,以下简称FT)的base是无数个不断调整freq(频率,以下简称freq)的sin函数,那么WT的base就是无数个不断调整freq和tao(时域位移)的wavelet函数。以前我看不懂的 %5Cfrac%7Bwavelet(t)-b%7D%7Ba%7D%20也能看懂了,b就是tao,a就是freq。整个函数在沿着时域轴变tao对b卷积,沿着频域轴变freq对a卷积。

3.深刻点三,从信息角度来讲,如果原函数是(100%时域,0%频域),其FT是(0%时域,100%频域),那么WT是两者的折中,并且其实就是“海森堡不确定性原理(Heinsberg's Uncertainty Principle)”,所以小波变换同时牺牲了两边的一些信息量,换来了平衡。 可以看作是一个函数Func(in time,in freq,out realComp, out imgComp),通过计算复数的模长,可以获得类似频域中的占比信息,但它同时还带时域轴的信息:

图4

如果能将整个视频看完,那应该是比较清楚的。

看完之后,我觉得这个WT的思路比FT清晰多了,而且我一直没有实现过FFT海面,因为什么蝴蝶算法太折腾了,我脑子不够用。但全流程换成WT,好像简单清晰了不少。

随便想想的WT海面思路

1.首先有一个时间周期的原海面(in x,in y,out z),不管怎么来的。

这个周期海面足够复杂,但也是一个周期函数,也就是说不管哪一个(x,y)的点,都会遍历到所有可能的z。那么(x,y)最后只是转换成一个相位差。所以根本来说还是h(t)。

2.对h(t)进行WT,获得一张类似图4的scalogram(占比百分度)。我们可以分几个优化挡位,lod0,先把红色的点沿着time轴采出来,如果按图4,就是大概(2,1),(4,2),(6,2.4),(8,2.5),(10,5)的点,也就是说在第2s,freq为1的base最匹配,以此类推,所以比如第3s,就可以lerp(wavelet[2,1],wavelet[4,2],0.5)这样来采样高度。然后lod1,lod2...是红色稍弱,白色,蓝色...的点,由于它们的百分占比不够高,所以不影响波形的主体形象,从图4上也很直观,也就是一开始低频占主体形象,后来高频占主体形象。

3.因为反正要遍历看最大,不如暴力求和。也就是说每帧都根据当前t,在纵轴上由scalogram作权重全部求和,这就有点像FT还原原信号的意思。假设我们的scalogram图片分辨率是64*64,那么其实就是一张1*64的图片所有像素“求和”。这其实就类比FFT里的蝴蝶法,但是由于我们的base都是wavelet,且scalogram已经是复数的合了,所以只要作“并行折叠加法“就行了,从1*64->1*32->1*16...一共6次Compute Shader的Dispatch,不算高不算低。不管怎么说,我觉得比FFT容易理解。


不负责任想想小波变换实现海面Shader的思路的评论 (共 条)

分享到微博请遵守国家法律