亲爱的,我想使用 35 x 35 内核进行卷积。有什么建议吗?或者我可以使用的opencv中已经存在的任何方法?因为现在 cvfilter2d 只能支持直到 10 x 10 内核。
问问题
570 次
1 回答
1
如果由于 OpenCV 的大小限制,您只需要快速而肮脏的解决方案,那么您可以将 35x35 内核划分为 5x5 的一组 7x7“内核图块”,将每个“内核图块”应用于图像以获得输出,然后移位结果并将它们结合起来得到最终的总和。
使用大型 2D 内核进行卷积的一般建议:
- 尝试使用可分离的内核,即作为列向量和行向量的外积的内核。换句话说,表示内核的矩阵是 rank-1。
- 尝试使用 FFT 方法。空间域中的卷积与频域中的元素共轭乘法相同。
- 如果内核是全秩的并且出于应用程序的目的而无法对其进行修改,则考虑使用 SVD 将内核分解为一组 35 个 rank-1 矩阵(每个矩阵都可以表示为列向量的外积和行向量),并且仅对与最大奇异值相关联的矩阵执行卷积。这会在结果中引入误差,但可以根据奇异值估计误差。(又名 MATLAB 方法)
其他特殊情况:
- 可以使用积分图像(Viola-Jones 人脸检测中使用的方法)计算可以表示为重叠矩形块总和的内核。
- 平滑和模态(具有少量峰值)的内核可以通过 2D 高斯的总和来近似。
于 2010-10-02T06:51:36.307 回答