1-数据向量化及使用meshgrid函数

zyg 3年前 (2021-12-06) 阅读数 2174 #图像算法开发

首先我们用func1生成一副图像,计算一下他的执行时间:

<pre class="prism-highlight prism-language-matlab">function f = twodsin1(A,u0,v0,M,N)
f = zeros(M,N);
for c = 1:N
    v0y = v0 * (c - 1);
    for r = 1:M
        u0x = u0 * (r - 1);
        f(r,c) = A * sin(u0x +v0y);
    end
end
<pre class="prism-highlight prism-language-matlab">>> timeit(@() twodsin1(1,1/(4*pi),1/(4*pi),512,512))

ans =

    0.0080

输出的图像是这样子的:

null

大概需要0.0080s来利用函数创建512*512的图像,在第二个版本中我们分析原理后利用meshgrid函数进行优化:

<pre class="prism-highlight prism-language-matlab">function f = twodsin2(A,u0,v0,M,N)
r = 0:M-1;
c = 0:N-1;
[C,R] = meshgrid(c,r);
f = A * sin(u0 * R + v0 * C);

meshgrid可以用于计算行列自动生成相加的矩阵,我们使用他来替代for循环,然后可以计算一下第二个函数的时间:

<pre class="prism-highlight prism-language-matlab">>> timeit(@() twodsin2(1,1/(4*pi),1/(4*pi),512,521))

ans =

    0.0034

生成相同的图像仅仅使用了不到原来for循环不到一半的时间,这就是向量化,前一个函数是更加通俗易懂的,但事实后一个运算的快,这是matlab的增强性能的技术,作为一个技术老白,在之后的文章里不会涉及到,初步了解下即可。

版权声明

本文仅代表作者观点。
本文系作者发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

yanguo

yanguo

管理员
作者文章
最新文章
标签列表
    欢迎你第一次访问网站!