使用卷积方法处理35 x 35内核

时间:2010-10-02 06:03:14

标签: visual-c++ opencv signal-processing convolution

亲爱的,我想使用35 x 35内核进行卷积。有什么建议吗?或者我已经在opencv中使用的任何方法?因为现在cvfilter2d只能支持10 x 10内核。

1 个答案:

答案 0 :(得分:1)

如果由于OpenCV的大小限制你只需要快速和肮脏的解决方案,那么你可以将35x35内核划分为5x5的7x7“内核磁贴”,将每个“内核磁贴”应用于图像以获得输出,然后移动结果并将它们组合起来得到最终的总和。

使用大型2D内核进行卷积的一般建议:

  1. 尝试使用可分离的内核,即作为列向量和行向量的外积的内核。换句话说,代表内核的矩阵是rank-1。
  2. 尝试使用FFT方法。空间域中的卷积与频域中的元素共轭乘法相同。
  3. 如果内核是全等级的,并且为了应用程序的目的,它不能被修改,那么考虑使用SVD将内核分解为一组35个rank-1矩阵(每个矩阵可以表示为a的外积)列向量和行向量),并且仅与与最大奇异值相关联的矩阵执行卷积。这会在结果中引入错误,但可以基于奇异值估计误差。 (a.k.a. MATLAB方法)
  4. 其他特殊情况:

    1. 可以使用积分图像(Viola-Jones人脸检测中使用的方法)计算可以表示为重叠矩形块之和的内核。
    2. 平滑和模态(具有少量峰值)的内核可以通过2D高斯的总和来近似。