我知道余弦相似度可以用来衡量两个图像或音频的相似程度。
但我不明白一个图像怎么能被表示为一个N维向量。对于文本文档d
,每个i-th
维度表示术语t_i
,它的标量分量表示它在文档中的频率。问题是,我无法为图像(或音频)文件找到相同的"映射"。
我脑海中唯一的解决方案是,我们有一个M维的向量,其中M是图像中的像素数(数百万维?太疯狂了!),值是"像素有多暗",最大值代表白色,但我强烈认为这个解决方案不是使用的解决方案。我不知道如何为音频文件做到这一点。
使用它可以根据源图像像素RGB值计算像素强度(Y):
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
因此,从源图像中的每个像素,我们生成其Y值,并使用它来填充1D向量中的每个位置(其中像素顺序是从图像的希尔伯特曲线生成的),在源图像中的每一个像素上重复此操作
假设我们的图像是16乘16,所以我们的线中有256个像素,由256个等距点表示。。。如果我们选择从图像中生成音频,我们可以在这256个点中的每个点放置一个正弦波振荡器,并通过该点的像素强度测量(Y)来驱动每个振荡器的音量。。。同时,我们通过其在线路中的位置来驱动每个振荡器的频率。。。在线路长度上的人类听觉频谱的低频到高频(比如200hz到2khz)。。。通过生成短时间的音频来引入时间。。。在每个时刻,将所有振荡器上的曲线高度相加并除以256(剪切音频样本)。。。这个音频是我们源图像的声音映射。。。这种转变是可逆的。。。我们可以很容易地从音频开始并生成图像。。。以我们的(Y)值的1D矢量作为中介
这是关于这个想法的一个很好的剪辑https://www.youtube.com/watch?v=DuiryHHTrjU
重要的是,这种技术是完全可逆的。。。如果我们从音频开始,我们可以生成图像,这样我们就可以访问中介向量。。。对一个简短的音频片段进行傅立叶变换FFT,将其从时域变换到频域。。。这导致了一组频率,每个频率都有一个振幅值。。。每个频率值被放入我们的中间向量中的一个位置,以表示输出像素。。。输出像素强度值由该频率的FFT幅度驱动。。。然后反过来做希尔伯特曲线,将我们的1D矢量线映射到输出2D图像