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

发布于 2024-09-25 23:31:48 字数 96 浏览 5 评论 0原文

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

Dear all, I would like to do a convolution using a 35 x 35 kernel. Any suggestion? or any method already in opencv i can use? Because now the cvfilter2d can only support until 10 x 10 kernel.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最佳男配角 2024-10-02 23:31:48

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

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

  1. 尝试使用可分离的内核,即作为列向量和行向量的外积的内核。换句话说,代表内核的矩阵是rank-1。
  2. 尝试使用FFT方法。空间域中的卷积与频域中的元素共轭乘法相同。
  3. 如果内核是满秩的并且出于应用程序的目的无法对其进行修改,则考虑使用 SVD 将内核分解为一组 35 个 Rank-1 矩阵(每个矩阵可以表示为列向量和行向量),并且仅与与最大奇异值相关的矩阵执行卷积。这会在结果中引入误差,但可以根据奇异值来估计误差。 (又名 MATLAB 方法)

其他特殊情况:

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

If you just need quick-and-dirty solution due to OpenCV's size limitation, then you can divide the 35x35 kernel into a 5x5 set of 7x7 "kernel tiles", apply each "kernel tile" to the image to get an output, then shift the result and combine them to get the final sum.

General suggestions for convolution with large 2D kernels:

  1. Try to use kernels that are separable, i.e. a kernel that is the outer product of a column vector and a row vector. In other words, the matrix that represents the kernel is rank-1.
  2. Try use the FFT method. Convolution in the spatial domain is the same as elementwise conjugate multiplication in the frequency domain.
  3. If the kernel is full-rank and for the application's purpose it cannot be modified, then consider using SVD to decompose the kernel into a set of 35 rank-1 matrices (each of which can be expressed as the outer product of a column vector and a row vector), and perform convolution only with the matrices associated with the largest singular values. This introduces errors into the results, but the error can be estimated based on the singular values. (a.k.a. the MATLAB method)

Other special cases:

  1. Kernels that can be expressed as sum of overlapping rectangular blocks can be computed using the integral image (the method used in Viola-Jones face detection).
  2. Kernels that are smooth and modal (with a small number of peaks) can be approximated by sum of 2D Gaussians.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文