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