作为澄清者,我想实现互相关,但机器学习文献一直将其称为卷积,所以我会坚持下去。
我正在尝试使用线性代数实现图像卷积。在互联网上环顾四周并思考之后,我可以为此提出两种可能的解决方案。
第一个:从内核中创建一个适当的类似 Toeplitz 的矩阵,如此处所述。
第二个:代替过滤器,修改输入,使其将特定内核操作使用的值存储在列向量中。然后内核 - 排列在一个行向量中 - 应该乘以保存修改后输入的矩阵,如下所示
我的问题:假设我有一个 960x720 像素的灰度图像和一个大小为 3x3 的内核。
在第一个解决方案中,它将从内核中创建一个巨大的循环矩阵(大小为 960 * 720 * 958 * 718,在 stride=1 的情况下),大约有 10^11 个元素。
在第二种解决方案中,修改后的输入将有大约 10^6 个元素(958 * 718 * 内核大小)。
我认为很明显,第二个选项计算起来要快得多,我错过了什么,我错过了计算吗?当涉及到这个问题时,文献一直提到 Toeplitz 矩阵,但我只是看不到与它们有任何共同点的第二种解决方案。第二个中的矩阵是否有特定名称?
如果我想实现图像卷积,第二种方法是否可行?是否有更有效的解决方案或数学技巧?