matlab中对数字图像进行像素操作时,尽量避免使用多层嵌套FOR循环

%一维方法
A=rand(3000,3000);
f=zeros(3000,3000);
u0=100;v0=100;
tic;
for r=1:3000
    u0x=u0*(r-1);
    for c=1:3000
        v0y=v0*(c-1);
        f(r,c)=A(r,c)*cos(u0x+v0y);
    end
end
t1=toc;
imshow(f);
%二维方法
tic;%重新开始计时
r=0:3000-1;
c=0:3000-1;
[C,R]=meshgrid(c,r);
g=A.*cos(u0.*R+v0.*C);
t2=toc; %停止计算将时间保存到t2

imshow(g);

在上面的两层For循环中,耗时53.2406ms,在使用二维方法时只用了4.1870毫秒。

%%相对于C++,matlab可以自动生成有特定间隔的矩阵,从而避免使用某些循环

上面的函数中,meshgrid根据坐标点生成横纵坐标网络,以便于计算二元函数的取值
meshgrid输出采样点的横坐标矩阵和纵坐标矩阵

你可能感兴趣的:(Matlab编程)