MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

使用较少的网格和repmat

功能 网格 雷普马特 在MATLAB中有着悠久而丰富的历史。今天,我将试着说服你少用它们。

网格

功能 网格 通常用于获取x坐标向量和y坐标向量,并将它们转换为两个矩阵, X Y ,可用于计算两个变量的函数。下面是一个小示例。
x=[0112];
y=[010030];
[X,Y]=网格网格(X,Y)
X= 4×3
0 1 2 0 1 2 0 1 2 0 1 2
Y= 4×3
0 0 0 10 10 10 20 20 20 30 30 30
下面是另一个例子,说明了如何 网格 通常使用。示例取自 利用MATLAB进行数字图像处理, 构造函数的曲面图 $f(x,y)=xe^{-(x^2+y^2)}$ .
x=-2:0.1:2;
y=-2:0.1:2;
[X,Y]=网格网格(X,Y);
Z=X*exp(-X.^2+Y.^2));
冲浪(Z)
变量 x Y 是向量和变量 X Y 矩阵是:
x y x y
名称大小字节类属性X 41x41 13448双精度Y 41x41 13448双精度X 1x411 328双精度Y 1x41328双精度
功能 网格 用于构造大小相同的矩阵,以便它们可以在表示两个空间坐标的矩阵上的各种元素算术运算中组合在一起。

雷普马特

函数名 雷普马特 是“复制矩阵”的缩写。是 雷普马特 是将向量复制为矩阵大小,或将矩阵复制为三维数组大小。一个经典示例是从矩阵中减去列平均值:
A=兰特(4)
A= 4×4
0.8147 0.6324 0.9575 0.9572 0.9058 0.0975 0.9649 0.4854 0.1270 0.2785 0.1576 0.8003 0.9134 0.5469 0.9706 0.1419
col_平均值=平均值(A,1)
col_意思是= 1×4
0.6902 0.3888 0.7627 0.5962
B=repmat(col_表示,尺寸(A,1),1)
B= 4×4
0.6902 0.3888 0.7627 0.5962 0.6902 0.3888 0.7627 0.5962 0.6902 0.3888 0.7627 0.5962 0.6902 0.3888 0.7627 0.5962
C=A-B
C= 4×4
0.1245 0.2435 0.1949 0.3610 0.2156 -0.2913 0.2022 -0.1108 -0.5632 -0.1103 -0.6050 0.2041 0.2232 0.1581 0.2079 -0.4543

MATLAB算术运算符更改五周年

五年前,随着MATLAB R2016b的发布,一些MATLAB操作符和函数以一种广泛使用 网格 雷普马特 不再需要了。随着该版本的发布,诸如 + - 接受两个操作数的操作数可以自动处理大小不同的操作数,只要大小差异采用特定形式。在上面的例子中, A. 尺寸为4x4,并且 col_意思是 尺寸为1x4。在R2016b发布之前,表达式 A-col_的意思是 由于大小不匹配,将产生错误。但是,从R2016b开始,当一个或另一个操作数的维度不匹配时,算术运算符(以及其他一些运算符和函数)可以自动匹配不同的大小。
这意味着你不再需要打电话了 雷普马特 从矩阵中减去列意味着。你可以用 - 接线员:
C=A-平均值(A,1)
C= 4×4
0.1245 0.2435 0.1949 0.3610 0.2156 -0.2913 0.2022 -0.1108 -0.5632 -0.1103 -0.6050 0.2041 0.2232 0.1581 0.2079 -0.4543
此外,您通常不再需要使用 网格 如上所示,计算两个变量的函数。上一个示例中的代码现在可以写成:
x=-2:0.1:2;
y=(-2:0.1:2)';
Z=x*exp(-x.^2+y.^2));
冲浪(Z)
第三版(2020年) 基于MATLAB的数字图像处理 相应地修改了。

更多信息

有关此更改的详细信息和历史记录,我推荐以下来源。其中前三个出现在Loren舒尔的MATLAB艺术博客上;前两封是我写的。最后一个源代码是MATLAB文档页面。

还有两个例子

2011年,我写道 一些博客文章 关于生成一个被称为 波带板 .我还将相关代码作为函数放在文件交换上 imzoneplate . 以下是原始实现的关键数学部分:
[x,y]=网格(x1:x2);
r=低血压(x,y);
km=0.7*pi;
rm=x2;
w=rm/10;
term1=sin((km*r.^2)/(2*rm));
term2=0.5*tanh((rm-r)/w)+0.5;
g=第1条。*第2条;
I=(g+1)/2;
这个 海波 不过,函数现在支持隐式扩展,因此万博1manbetx 网格 没有必要。前几行可以重写为:
x=x1:x2;
y=x';
r=低血压(x,y);
第二版 基于MATLAB的数字图像处理 包含一个代码片段,用于计算pxn矩阵每行之间的欧几里德距离 X 和一个1xn向量 Y :
D=sqrt(和(绝对值X-repmat(y,p,1))^2,2);
现在,无需调用 雷普马特 :
D=sqrt(总和(绝对值(X-y)^2,2));
所以,下一次你发现自己想要 网格 雷普马特 --也许你不需要它!
|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。