这是之前做过的一个关于实现Hybrid Image的小项目,有错误及不足的地方还请批评指正~
怎么理解图像的高低频?
图像的低频部分可以理解为“轮廓”,比如人脸的脸型。
图像的高频部分可以理解为“细节”,比如人脸的皱纹、斑点等。
因此,我们常说,对图像做模糊处理后得到了图像的低频部分,对图像做锐化处理会让图像的高频信息更多。(看到这里,玩过摄影的朋友是不是想到了人像处理中常用的“高低频磨皮”~)
为什么放大缩小图片会看到不同的结果?
在了解了图像高低频的定义后,我们就不难理解为什么远近看混合图像会感觉效果不同。
当我们放大混合图像时,可以清楚地看到高频信息,于是人眼更倾向于识别这部分的信息。相反地,当我们缩小图片时,高频信息就不那么容易被观察到了,这时候我们我们就更倾向于识别低频的部分。
这里我做了一张哈利波特和伏地魔的混叠图像。可以看到,当图像放大时我们看到的是哈利波特,而当图片缩小时,我们会认为这张图片是描述伏地魔的。
如何实现混合图像的效果?
实现的总体思路很简单——将只有低频信息的图片和只有高频信息的图像叠加在一起。具体步骤如下:
- 取第一张图片:
a. 准备好低频的滤波器(常用高斯模糊)
b. 将图像转为矩阵,分层(如JPG图像会分成RGB三层)处理。其中,第一二列表示图像的横纵坐标,第三列存储不同的层的index(如JPG有0-2,PNG有0-3(其中第四层(3)存的是透明度));举个栗子,[;, ;, 0] 指的是R层的数据点
c. 每一个维度的图片分别与高斯滤波器做卷积 - 取第二张图片:
a. 准备好低频的滤波器(常用高斯模糊)
b. 将图像转为矩阵
c. 每一个维度的图片分别与高斯滤波器做卷积
d. 用原图矩阵减去卷机后的矩阵,得到高频图矩阵 - 将两个处理后的图像矩阵相加,得到混合图像
如何用代码实现?
https://github.com/MinisculeDust/Hybrid-Image