向量化说明和函数meshgrid的介绍

向量化说明和函数meshgrid的介绍
一、 学习目的:
1) 了解和掌握图像处理工具MATLAB,熟悉基于MATLAB的图像处理函数,并为下一步编程进行图像处理打下基础
2) 理解图像处理相关函数,掌握其用法;
3) 理解掌握文件操作函数;
4) 掌握matlab的帮助命令,学会使用matlab的帮助功能;
5) 掌握matlab程序设计基本方法,通过编程实现简单的图像处理操作。
二、学习内容:
在MATLAB中的向量化是指使用矩阵/向量运算符,索引技术和现有的MATLAB或工具箱函数来完全消除循环的一种技术
相关函数:
imshow 函数n功能:显示图像。
n调用格式:nimshow(I,n) :显示灰度图像 I , n 为要显示图像的灰度等级,整数,默认为 256 。nImshow(I,[LOW HIGH]) :以规定的灰度级范围 [LOW HIGH] 来显示灰度图像 I ,低于 LOWn值的显示为黑,高于 HIGH 值的显示为白,默认按 256 个灰度级显示。nimshow(RGB) :显示真彩色图像 RGB 。nimshow(BW) :显示二值图像 BW 。nimshow(X,map) :显示索引图像, X 为索引图像的数据矩阵, map 为其颜色映射表。nimshow filename :显示 filename 指定的图像,若文件包括多帧图像,则显示第一幅,且n文件必须在 MATLAB 的当前目录下。
二、 实验例子
基于公式:f(x,y)=Asin(u0x+v0y) 创建合成图像
第一个函数twodsin1使用两个嵌套的for循环计算f;
程序如下
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)=Asin(u0x+v0y);
end
end
在for循环之前观察预分配步骤,f=zeros(M,N)。我们使用time来了解该函数创建一幅大小为512
512像素的图像需要花多长时间,因此在命令符窗口输入

timeit(@() twodsin1(1, 1/(4pi), 1/(4pi), 512, 512))
输出结果为ans=
0.0029
没有预分配时,运行该函数约慢了42倍。
我们可以使用imshow的自动确定范围的语法(【】)来显示结果图像
再次在命令窗口输入
f=timeit(@() twodsin2(1, 1/(4pi), 1/(4pi), 512, 512));
imshow(f,[])
则显示结果

在该函数的第二个版本中,我们使用一个称为mashgrid的非常有用的MATLAB函数将其量化(即把它重写为没有for循环的形式,语法为
[C,R]=meshgrid(c,r)
输入参量c,r分别是水平坐标和垂直坐标。函数meshgrid把坐标向量变换为两个数组C和R,这两个数组可用来计算有两个变量的函数,例如,下面的命令使用meshgrid来计算函数Z=x+y,在命令窗口输入

[x,y]=meshgrid(1:3,10:14)
得出如下
x=
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
y=
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
z=x+y
Z=
11 12 13
12 13 14
13 14 15
14 15 16
15 16 17
最后,我们用meshgrid来重写这个不带循环的二维正选函数:
function f=twodsin1(A,u0,v0,M,N)
r=0:M-1;%Row coordinates.
c=0:N-1;%Column coordinates.
[C,R]=meshgrid(c,r);
f=Asin(u0r+v0C);
如前面那样,我们运用timeit测量其速度
timeit(@() twodsin2(1, 1/(4
pi), 1/(4*pi), 512, 512))
Ans=
0.0026
可见向量化形式运行时间约少了百分之五十。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>