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

标签 image audio cosine-similarity hilbert-curve

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

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

我想到的唯一解决方案是我们有 M 维向量,其中 M 是图像中的像素数(数百万维?太疯狂了!)和值是“像素有多暗”,最大值代表白色,但我强烈认为这个解决方案不是使用的解决方案。我不知道如何对音频文件执行此操作。

最佳答案

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

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

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

关于image - 如何通过向量表示图像或音频以获得余弦相似度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37069908/

相关文章:

python - 如何基于共现矩阵计算相似度?

java - 如何使用 Lucene 和 Java 计算 tf-idf 的余弦相似度

python - 数据集中的成对比较

python - 计算两个图像之间的相似度百分比

单击时 JavaScript 淡入新图像

java - 我的.jar文件无法打开MP3文件(我使用的是Jlayer-JZoom库)

iPhone - 系统声音代码

ios - iOS本地通知声音不起作用

python - 如何为图像添加高斯噪声?

android - 设置 imageView 较小与缩放图像本身之间的区别