【问题标题】:Partial convolution in MATLABMATLAB中的部分卷积
【发布时间】:2013-01-29 00:42:17
【问题描述】:

我有一个大矩阵(图像)和一个小模板。我想将小矩阵与较大的矩阵进行卷积。例如,蓝色区域是我想用于卷积的部分。换句话说,我可以对所有图像使用卷积,但由于 CPU 时间增加,因此,我想只关注所需的蓝色部分。

MATLAB 中是否有任何命令可用于此卷积?或者,我如何强制卷积函数只使用特定的不规则部分进行卷积。

【问题讨论】:

  • 如果您想提高卷积代码的性能,您是否尝试过对其进行分析?例如,在conv2 中,您使用的是single 而不是double
  • 所以我认为你最好的选择是获得最小的矩形边界矩形。 conv2 不针对稀疏输入进行优化。我认为 filter2 也没有针对稀疏输入进行优化。原因之一是因为它可能使用 SIMD 指令。使用 SIMD,跳过小洞实际上并不能加快速度。
  • 所以这家伙的代码过去帮助了我mathworks.com/matlabcentral/fileexchange/…。不确定它是否与您的使用有关。基本上,如果您要将小事与大事进行卷积,则可以使用 SVD 将小事分解成可分离的组件...
  • 这个线程在某种程度上解决了这个问题:mathworks.com/matlabcentral/answers/5011 虽然我不会说这是关于这个问题的最终决定......

标签: image matlab image-processing signal-processing convolution


【解决方案1】:

我怀疑你可以做一个不规则的形状(快速卷积是用 2D FFT 完成的,这需要一个正方形区域)。您可以通过找到形状的边界框并丢弃空边框来优化它。

【讨论】:

  • @nneonneo:实际上我的矩阵是一个非常大的 3D 矩阵,我需要多次重复这个卷积。这就是为什么我试图忽略外边界的原因。
  • -1。实际上,一般来说,使用卷积定理使其更快是不正确的,而 conv2 不使用 fft。
  • 好的,所以我没有意识到 conv2 没有使用 FFT。这是为什么?也许您可以告诉我为什么使用 FFT 计算卷积不会更快。
  • 直接将 mxm 过滤器与 nxn 图像进行卷积的速度有多快?在 nxn 图像上执行 fft2 有多快(现在,甚至不计算乘法和 ifft2)?什么时候一个比另一个大?什么时候另一个大于一个?
  • @thang 和 nneonneo:我确信使用 fft 可以使卷积更快,但在我的算法中,事件秒数很重要!我已经在我的算法中实现了 fft,但我想逃离那个 NaN 区域!!
【解决方案2】:

@Nicole 我会选择 fft2(im).*fft(smallIm),它相当于 conv2(im,smallIm)。
至于识别不规则形状,您可以使用像 canny 这样的边缘检测并找到最多(左、右、上、下)点的值,
因为 canny 返回二进制 (1,0) 图像并准备边界框,使用值。但是,这将需要一些时间来创建。
我不确定这会快多少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2015-01-27
    • 2017-02-21
    • 1970-01-01
    • 2020-06-07
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多