如何通过向量表示图像或音频以获得余弦相似度?

How to represent image or audio through vectors for cosine similarity?

我知道余弦相似度可以用来衡量两个图像或音频的相似程度。

但我不明白如何将图像表示为 N 维向量。对于文本文档 d,每个 i-th 维度表示术语 t_i,它的标量分量表示它在文档中的频率。问题是我无法找出图像(或音频)文件的相同 "mapping"。

我想到的唯一解决方案是我们有 M 维向量,其中 M 是图像中的像素数(数百万维?太疯狂了!) 并且值为 "how much dark the pixel is",最大值代表白色,但我强烈认为该解决方案不是所使用的解决方案。我不知道如何对音频文件执行此操作。

Hilbert 曲线... space 填充曲线,将 2D 图像映射到 1D 线上...每个像素在空间模式中仅访问一次,可以很好地处理像素密度的变化。 .. 在每个像素处记录强度... 生成的一维线是您的矢量,准备好进行叉积,其中一条线生成自使用相同技术的另一个源图像

use this to compute pixel intensity (Y) 来自源图像像素 RGB 值:

Y = 0.2126 * R + 0.7152 * G + 0.0722 * B

因此,我们从源图像中的每个像素生成它的 Y 值,并使用它来填充我们的 1D 向量中的每个位置(其中像素顺序是从图像的希尔伯特曲线生成的),对源中的每个像素重复此操作图片

假设我们的图像是 16 x 16,所以我们有 256 个像素在我们的行中由 256 等同 spaced 点表示......如果我们选择从我们的图像生成音频,我们可以放置一个正弦波振荡器在这 256 个点中的每一个点上,并通过点的像素强度测量 (Y) 来驱动每个振荡器的音量 ... 同时,我们通过每个振荡器在直线中的位置来驱动每个振荡器的频率 ... 人类听觉频谱的低频到高频(比如 200hz 到 2khz)穿过线路的长度......通过短时间生成音频来引入时间......在每个时刻将所有振荡器的曲线高度加在一起并除以 256(剪切音频样本)。 ..这个音频是我们源图像的声波映射...这种转换是可逆的...我们可以很容易地从音频开始并生成图像...使用我们的(Y)值的一维向量作为中介

这是关于这个想法的精彩剪辑 https://www.youtube.com/watch?v=DuiryHHTrjU

重要的是,这项技术是完全可逆的……如果我们从音频开始,我们可以生成图像,这样我们就可以访问中间向量……do a Fourier Transform FFT 在一个简短的音频剪辑上将它从时域转换到它的频域对应物......这导致一组频率,每个频率都有一个幅度值......每个频率值被放入我们的中间向量中的一个位置以表示输出像素......输出像素强度值由该频率的 FFT 幅度驱动...然后反向执行希尔伯特曲线以将我们的 1D 矢量线映射到输出 2D 图像