一点点二维傅立叶变换

目前,针对图片,视频,我们有通过在频域上乱搞的方式为其添加不可见水印。这种技术主要依靠的就是二维傅立叶变换。

g^(f)=g(t)e2πiftdt\hat g(f)=\int{g(t)e^{-2\pi i ft}dt}

这个是一维的傅立叶变换。那么,如果现在有一个二维信号g(t1,t2)g(t_1,t_2),是不是可以简单的把上式改为

g^(f1,f2)=g(t1,t2)e2πi(f1t1+f2t2)dt1dt2\hat g(f_1,f_2)=\int\int{g(t_1,t_2)e^{-2\pi i (f_1t_1+f_2t_2)}dt_1dt_2}

事实上是的。而逆变换为

g(t1,t2)=14π2g^(f1,f2)e2πi(t1f1+t2f2)df1df2g(t_1,t_2)=\frac{1}{4 \pi^2}\int\int\hat g(f_1,f_2)e^{2\pi i (t_1f_1+t_2f_2)}df_1df_2

如果写成离散形式,也是一种套路。

g^(f1,f2)=g(t1,t2)e2πi(f1t1+f2t2)\hat g(f_1,f_2)=\sum\sum{g(t_1,t_2)e^{-2\pi i (f_1t_1+f_2t_2)}}

g(t1,t2)=14π2g^(f1,f2)e2πi(t1f1+t2f2)g(t_1,t_2)=\frac{1}{4 \pi^2}\sum\sum\hat g(f_1,f_2)e^{2\pi i (t_1f_1+t_2f_2)}

二维的傅立叶变换仍然是将信号分解为多个成分,只不过这里成了平面意义上的波,而且多了一个方向。这里的方向我们直接把f1,f2f_1,f_2绘制到中心点为(0,0)(0,0)的坐标系上,从而能够形成一张附带全部信息的频域图。

对于二维傅立叶变换的结果,也和一维的结果又类似含义。一个一元函数的高频低频意味着其变化快与慢的成分,一个声音的高频低频意味着其高音和低音部分,而一个二维变换的结果高频低频也意味着该数据变化快与慢的部分。

既然能够从音频频域上摘掉对声音有意义的频率(例如删掉与人声相关的频率),那就也可以在图片频域中叠加对人有意义的频率。所谓图片与视频的隐写术就是将对人眼有意义的频率叠加到频域中再进行逆变换的结果。包括音频也可以这么干,利用短时距傅立叶变换在频域上画一点有意义的图像再逆变换回去,就能当作更高级一点的音频水印。不过实际测试起来,在音频频域上搞得太过头的话听感影响挺大的。

这种技术相比直接打水印有很多好处,利用频率的特性意味着它可以对抗很多一般的攻击方式。不过一旦攻击能够影响频率,例如再次拍摄/录音这种,至少朴素的隐写就基本上gg了。

所以看到有人拿这个玩意去水大创就有点好奇,问了问能否识别我现拍的照片,得到的答复是不行……还以为会有干货,稍微有些失望。


一点点二维傅立叶变换
https://blog.chenc.me/2020/03/27/a-little-2d-fft/
作者
CC
发布于
2020年3月27日
许可协议