MATLAB编程(4)——MATLAB绘制二维高斯函数的三维图
本篇博文记录使用MATLAB绘制二维高斯函数的三维图。
用到的MATLAB函数——mesh()(绘制三维线框图)和surf()(绘制三维表面图)。
MATLAB命令窗口输入>> doc 函数名,可以查看相关函数的帮助文档。
一维高斯函数:
(μ为均值,σ为标准差)
二维高斯函数:
(这里,均值均为零,标准差均为σ)
下面给出代码(两种实现结果),绘制一个均值为25,标准差为5的二维高斯函数的三维图:
代码实现一:
% 先限定三维图中的x,y轴坐标范围
X = 0 : 1 : 50;
Y = 0 : 1 : 50;% 标准差
sigma = 5;Z = zeros( 51, 51 );
for row = 1 : 1 : 51for col = 1 : 1 : 51Z( row, col ) = ( X(row) - 25 ).^2 + ( Y(col) - 25 ).^2; % 均值(25, 25)end
end
Z = -Z / ( 2 * sigma^2 );Z = exp(Z) / ( 2 * pi * sigma^2 );% 显示高斯函数的三维曲面
figure, surf(X, Y, Z);
结果图:
代码实现二:(更推荐)
% 先限定三维图中的 x,y 轴坐标范围
X = 0 : 1 : 50;
Y = 0 : 1 : 50;% 标准差
sigma = 5;[ XX, YY ] = meshgrid( X, Y );
Z = ( XX - 25 ).^2 + ( YY - 25 ).^2;Z = -Z / ( 2 * sigma^2 );
Z = exp(Z) / ( 2 * pi * sigma^2 );% 显示高斯函数的三维图
figure, mesh(X, Y, Z); % 线框图
结果图:
以上两种代码实现中,差别在于Z的计算。代码实现一中,使用了双层for循环,时间会比代码二长。而代码实现二中,利用向量化运算取代for循环(即向量化循环),代码的效率会更高,更值得推荐。(这也是MATLAB编程上的一个技巧)。
并且,使用meshgrid,不会受到坐标(索引)为零的影响。例如:
% 先限定三维图中的 x,y 轴坐标范围
X = -25 : 1 : 25;
Y = -25 : 1 : 25;% 标准差
sigma = 5;[ XX, YY ] = meshgrid( X, Y );
Z = ( XX ).^2 + ( YY ).^2; % 均值为(0,0)Z = -Z / ( 2 * sigma^2 );
Z = exp(Z) / ( 2 * pi * sigma^2 );% 显示高斯函数的三维图
figure, mesh(X, Y, Z); % 线框图
结果图:
以上三维图中,MATLAB默认绘制彩色图。
colormap( [0 0 0] ); % 或者 colormap( gray ) —— 可以将以上彩色三维图转换为灰色。
另外,还可控制三维图中的网格显示和坐标轴显示。
grid off; % 关闭网格 (grid on —— 开启网格)axis off; % 关闭坐标轴显示 (axis on —— 开启坐标轴显示)
以上内容可用于二维滤波器的三维可视化。相关内容在书籍《数字图像处理(MATLAB版)》“4.5 在频域中直接生成滤波器”章节也有讲述。
下面的这段文字是对上述向量化循环的扩展,文字引自《数字图像处理(MATLAB版)》/(美)冈萨雷斯等著;阮秋琦等译.北京:电子工业出版社,2005,9.
MATLAB使用函数meshgrid来实现二维函数的评估,该函数的语法为:
[ C, R ] = meshgrid( c, r );
该函数将由行向量c和r指定的域变换为数组C和R,这两个数组能用来评估有两个变量的函数和三维表面图(注意,在meshgrid的输入输出中,列总是首先列出)。
输出数组C的行是向量c的副本,输出数组R的列是向量r的副本。
例如,假设我们想形成一个二维函数,该函数的元素是坐标变量x和y的值的平方和,其中,x=0,1,2 y=0,1。向量r由坐标的行分量构成:r=[0,1,2];类似地,向量c由坐标的列分量构成:c=[0,1],这里r和c均为行向量。
将这两个向量代入meshgrid,可得如下数组:
>>[ C, R ] = meshgrid( c, r )
C =
0 1
0 1
0 1
R =
0 0
1 1
2 2
>>h = R .^2 +C .^2
h =
0 1
1 2
4 5
h的维度为length(r) * length(c)
参考:
[1] Matlab绘制三维曲面(以二维高斯函数为例)(https://www.cnblogs.com/pzxbc/archive/2012/02/14/2351708.html)
在进行以上内容的学习时,也检索到下面的写得不错的博客:
(1)高斯函数以及在图像处理中的应用总结(https://www.cnblogs.com/herenzhiming/articles/5276106.html)
(2)高斯函数的详细分析(https://blog.csdn.net/jorg_zhao/article/details/52687448)
MATLAB编程(4)——MATLAB绘制二维高斯函数的三维图相关推荐
- 利用meshgrid函数绘制二维高斯函数曲面
meshgrid函数用于根据给定的横纵坐标点生成坐标网格,以便计算二元函数的取值. 设二维高斯函数表达式为: 程序如下: u=[-10:0.1:10]; v=[-10:0.1:10]; [U,V]=m ...
- 使用二维高斯函数模糊图片
这篇文章以通俗易懂的语言和方式解释了如何使用高斯函数模糊一张图片. 1.一维高斯函数: a表示得到曲线的高度,b是指曲线在x轴的中心,c指width(与半峰全宽有关),图形如下: 2.根据一维高斯函数 ...
- Matlab绘制三维曲面(以二维高斯函数为例)
原文地址为: Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期 ...
- matlab画三维向量的曲面,Matlab绘制三维曲面(以二维高斯函数为例)
寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期的模式,边看边实现书中的算法.上学期看的时候,是用C语言实现的 ...
- 高斯低通滤波 matlab_一维和二维高斯函数及其一阶和二阶导数
二维高斯函数 高斯函数在图像滤波.边缘检测等中发挥着重要的作用.高斯滤波是典型的低通滤波,对图像有平滑作用.同时,高斯函数的一阶.二阶导数也可以用于高通滤波,比如canny算子中用到的是高斯函数的一阶 ...
- R 语言绘制二维正态分布的密度曲面图;
(1)绘制二维正态分布的密度曲面图: library("shape") #需要用drapecol()函数 library("MASS") #需要用fractio ...
- AI笔记: 计算机视觉之SIFT特征检测: 尺度空间、二维高斯函数、高斯金字塔
SIFT概述 SIFT的全称是Scale Invariant Feature Transform(尺度不变特征变换),是由加拿大教授David G.Lowe在1999年发表于计算机视觉国际会议,200 ...
- matlab应力云图_Matlab绘制二维应力云图
自己研究了下用Matlab绘制二维应力云图的方法,三维应力云图的绘制可以以此类推. 实现的方法主要是运用fill函数,三维情形应该是fill3函数. 这里我们以一个四边形的例子来说明. 如上图所示的四 ...
- 通过(半高宽FWHM)方差sigma生成二维高斯函数(PSF)
给定点扩散函数半高宽,可求出高斯函数方差: FWHM = 2 × sqrt(2×ln2) × σ : 再由matlab内置函数fspecial,PSF = fspecial('gaussian',h ...
最新文章
- 一起学nRF51xx 11 - ficr
- 转:MySQL史上最全性能优化方式
- mysql的执行效率_数据库执行效率的对比测试
- 中小学信息学相关比赛汇总(C++类)
- PostgreSQL数据库安装Version10.5
- Modern CMake 翻译 2.1 变量和缓存
- Codechef QGRID
- 系统调用之Write
- java 代码走查_代码走查检查表(JAVA).doc
- sonar pmd\p3c插件源码初步解析
- 夏普Android系统,夏普LCD-60\70TX85A及YunOS安卓运行环境安装指南
- Python 模拟轮盘抽奖游戏
- matlab 矩阵 三维矩阵相乘,将三维矩阵与二维矩阵相乘
- Java学习-----文字版格斗游戏
- (016) 反射 API
- 如何批量将png格式改成jpg?
- 分解质因数 java_Java 分解质因数
- 罗克韦尔 DeviceNet配置软件
- 验证码 图片无法刷新
- Java面向对象之线程相关概念 和 线程基本使用