编写了卷积函数,但是比matlab中的conv2()慢200倍以上。

qwert

所以我这样写:

function y = convolution(u,v)

[m,n] = size(u);
[w,z] = size(v);

y = zeros(m-w+1,n-z+1);
for i = 1:m-w+1
    for j = 1:n-z+1
        y(i,j) = sum(sum(u(i:i+w-1,j:j+z-1).*v));
        end
    end


    end

然后,我将其与matlab中的conv2()进行了比较:

function timedConv
a = im2double(rgb2gray(imread('picture.png')));

tic
convolution(a,[4 5 6;0 0 0;3 2 1]);
toc

tic
conv2(a,[4 5 6; 0 0 0; 3 2 1]);
toc
end

并发现我的代码需要4秒钟才能运行,而matlab的conv2大约需要0.01秒。而且,我的输出是m-w + 1 x n-z + 1矩阵,而matlab的输出是m + w-1 x n + z-1,因此假设图像外的零行和列进行卷积在图像的边缘。当我显示结果时,它们看起来相同,因此我的功能必须正常工作。它太慢了,我不知道为什么。我能以某种方式摆脱for循环吗?

FiReTiTi

Matlab使用FFT来进行卷积Conv = FFTinv(FFT(Image) x FFT(Kernel)),这比经典的卷积要快得多。更具体地说,Matlab调用C ++库来执行FFT,这比Matlab快几十倍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

不使用conv2的Matlab图像过滤

为什么在Matlab中使用卷积矩阵而不是conv()函数?

比较MatLab的conv2和scipy的convolve2d

为什么内联Math.max给出的速度慢200倍以上?

是否有一个相当于MATLAB conv2(h1,h2,A,'same')的python?

我已经使用StringBuilder类在Java中编写了回文代码,但是它不起作用?

为什么同一个函数定义在一个类中的执行时间要慢10倍以上?

尽管显式编写了另一个构造函数,但是是否创建了空构造函数?

我已经编写了代码,但是当我在定义和传递参数后调用average()函数时出错

我在matlab中编写了以下代码以进行随机化,然后在3x4矩阵中将3到8的整数取整,但是我不想在行中重复数字

PHP以函数格式编写了类似声明?

我为c ++中的单链表编写了operator *。当我写main中包含的函数时,它可以工作,但是当我调用该函数时,它不能

在Matlab中绘制卷积

Matlab中的卷积

为“ conv2d_2 /卷积”从1中减去3导致的负尺寸大小

我用龙卷风编写了一个项目,但是此异常始终在我的日志文件中

在TensorFlow中编写类似Conv2D的操作

有没有一种方法可以使用conv()在MATLAB中执行按列卷积?

.NET Core 2.1-正则表达式在循环中的速度比2.0慢200倍(简单基准测试中为3倍)

在matlab中融合2个以上的图像

函数内的功能是Java的3倍以上

在MATLAB中编写函数m文件

尝试应用Sobel滤波器时conv2输出翻转

Matlab中的卷积动手

快速并发操作慢2倍

AVAssetWriter录制音频慢2倍吗?

批量MySQL插入比PHP慢2倍

tensorflow的实现比火炬的实现慢2倍

Torch中的卷积层(即nn.SpatialConvolution`)和Pytorch中的卷积层(即torch.nn.Conv2d)之间有什么区别

TOP 榜单

热门标签

归档