二维插值-MATLAB

简介: 二维插值-MATLAB

一、插值节点为网格节点

二、插值节点为散乱节点

Addition:

(1)学会查看matlab帮助文档

(2)matlab脚本类型

(3)matlab三维绘图函数

二维插值,简单来说就是节点二维、插值函数二维,形如z = f ( x , y ) 。


     为什么要插值呢?假如我们要根据已知的二维数据来绘制对应的三维曲面图像,就需要很多点的x、y、z坐标,但给定的数据一般比较少,不能仅仅通过点数据画出三维图形。又或者要获取未知点的坐标值(大概的)。


一、插值节点为网格节点

        网格节点,听命字就知道它是比较规则整齐的点了。相当于在x y z 平面内,一条条整齐的平行于x , y x,yx,y轴的直线相交,再在z zz轴方向对应一个值。


比如这样:

6f466b8b260f29916b7232423c517727_6314ecc2ae874f1fa9d5b76da7e644f4.png

MATLAB插值命令:

z=interp2(x0,y0,z0,x,y,method)

其中:

x 0 , y 0 为已知节点 , z 0 是对应的值;

x 0 , y 0 分别为 m 纬、 n 纬向量, z 为 m ⋅ n 矩阵;

x , y 是要插值的节点, z 返回对应的插值得到的值;

m e t h o d 是插值方法,和一维插值相同:

′ n e a r e s t : ′  最近项插值

′ l i n e a r : ′线性插值

′ s p l i n e : ′ 立方样条插值

′ c u b i c : ′立方插值

例1:

close all
clear,clc
x=100:100:500;  %已知节点数据
y=100:100:400;
z=[636    697    624    478   450  
   698    712    630    478   420
   680    674    598    412   400
   662    626    552    334   310];
pp=csape({x,y},z') %采用3次样条插值
xi=100:10:500;yi=100:10:400;  %要插值的点
cz=fnval(pp,{xi,yi});          %返回字(xi,yi)处的值
[i,j]=find(cz==max(max(cz)))  %找最高点的地址
x=xi(i),y=yi(j),zmax=cz(i,j)  %求最高点的坐标 

二、插值节点为散乱节点

 散乱节点:给出了一些3维空间数据点的x、y、z坐标,但不像网格节点那样整齐。例1和例2一对比就明白了。


使用函数g r i d d a t a ( ) 常见形式和简要说明如下:

(1)vq = griddata(x,y,v,xq,yq)


 使 v = f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。griddata 函数在 (xq,yq) 指定的查询点对曲面进行插值并返回插入的值 vq。曲面始终穿过 x 和 y 定义的数据点。


(2)vq = griddata(x,y,z,v,xq,yq,zq)


 拟合 v = f(x,y,z) 形式的超曲面。


(3)vq = griddata(___,method)


 使用上述语法中的任何输入参数指定计算 vq 所用的插值方法。method 可以是 ‘linear’、‘nearest’、‘natural’、‘cubic’ 或 ‘v4’。默认方法为 ‘linear’。


(4)[Xq,Yq,vq] = griddata(x,y,v,xq,yq) 或[Xq,Yq,vq] = griddata(x,y,v,xq,yq,method)


 还返回 Xq 和 Yq,其中包含查询点的网格坐标。

例2:

close all
clc, clear
x=[129,140,103.5,88,185.5,195,105,157.5,107.5,77,81,162,162,117.5];
y=[7.5,141.5,23,147,22.5,137.5,85.5,-6.5,-81,3,56.5,-66.5,84,-33.5];
z=-[4,8,6,8,6,8,8,9,9,8,8,9,4,9];
xmm=minmax(x)  %求x的最小值和最大值
ymm=minmax(y)  %求y的最小值和最大值
xi=xmm(1):xmm(2); %指定查询点(插值点)
yi=ymm(1):ymm(2);
%使 v = f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。
% griddata 函数在 (xq,yq) 指定的查询点对曲面进行插值并返回插入的值 vq。
% 曲面始终穿过 x 和 y 定义的数据点。
zi1=griddata(x,y,z,xi,yi','cubic'); %立方插值
zi2=griddata(x,y,z,xi,yi','nearest'); %最近点插值
zi=zi1;  %立方插值和最近点插值的混合插值的初始值
zi(isnan(zi1))=zi2(isnan(zi1))  %把立方插值中的不确定值换成最近点插值的结果
subplot(1,2,1), plot(x,y,'*')
subplot(1,2,2), mesh(xi,yi,zi)

e22d7d7dbfc3fbbd6298007d07139cd0_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc2NDk3NA==,size_16,color_FFFFFF,t_70#pic_center.jpg

Addition:

(1)学会查看matlab帮助文档

matlab编程总会遇到很多没用过的函数,只要在MATLAB的命令行窗口输入

help 函数名

就可以看到他的简要帮助文本。

比如查询griddata这个函数的用法:

>> help griddata
griddata - 插入二维或三维散点数据
    此 MATLAB 函数 使 v = f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。griddata 函数在 (xq,yq)
    指定的查询点对曲面进行插值并返回插入的值 vq。曲面始终穿过 x 和 y 定义的数据点。
    vq = griddata(x,y,v,xq,yq)
    vq = griddata(x,y,z,v,xq,yq,zq)
    vq = griddata(___,method)
    另请参阅 delaunay, griddatan, interpn, meshgrid, ndgrid, scatteredInterpolant
    griddata 的参考页

但使用doc 函数名更好一些,会弹出一个帮助文档的窗口,这也是我常用的,里面还有很多例子,可以帮助你很好的理解。帮助文档里面可能有些内容是英文内容,但都很好理解,一读就能明白的。

96b08eeecfe9b3532063190c621aa2ec_a85c3f6a5d68499ea973b3161e54f156.png

matlab的命令行也可以使用键盘的上、下键来查看历史输入的命令。


(2)matlab脚本类型

matlab脚本分为脚本和实时脚本,后缀分别为.m和.mlx,类似于python文件中的普通py文件和notebook,大家可以试试matlab的实时脚本,.m文件中函数的补全可以通过Tab键完成,而.mlx会自动补全。还有其他更多的特性。


实时脚本如图所示:

40408d4b24b6d665e81e524beb0a8739_541dc7b5d0a84d289c7ca842884e24e5.png

(3)matlab三维绘图函数

matlab绘制三维图主要有3种类型:plot3、mesh、surf(当然pie3绘制3维饼图也算是个三维图吧,但他需要的数据仅仅是各个分类的数值,是一维数据),具体如下,更多内容可以自行查阅帮助文档。

plot3 三维曲线图;

mesh 三维网格图;

meshc 除了生成网格图外,还在xy平面生成曲面的等高线;

meshz 除了生成网格图外,还在曲线下面加上个矩形垂帘;

surf 三维着色曲面图;

surfc 同时画出三维着色曲面图与等高线;

surfl 带光照的三维着色曲面图。


相关文章
|
6月前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
1月前
|
存储 数据可视化 数据挖掘
使用Matlab绘制简单的二维与三维图形
【10月更文挑战第3天】本文详细介绍了如何在 Matlab 中绘制简单的二维和三维图形,包括曲线图、柱状图、散点图、网格图、表面图、等高线图、多边形填充图、切片图及矢量场等。文章提供了丰富的代码示例,如使用 `plot`、`bar`、`scatter`、`plot3`、`mesh`、`surf`、`contour` 等函数绘制不同类型图形的方法,并介绍了 `rotate3d`、`comet3` 和 `movie` 等工具实现图形的交互和动画效果。通过这些示例,读者可以轻松掌握 Matlab 的绘图技巧,并应用于数据可视化和分析中。
44 6
|
6月前
|
算法 数据安全/隐私保护 C++
基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
该内容是关于一个图像水印算法的描述。在MATLAB2022a中运行,算法包括水印的嵌入和提取。首先,RGB图像转换为YUV格式,然后水印通过特定规则嵌入到Y分量中,并经过Arnold置乱增强安全性。水印提取时,经过逆过程恢复,使用了二维CS-SCHT变换和噪声对比度(NC)计算来评估水印的鲁棒性。代码中展示了从RGB到YUV的转换、水印嵌入、JPEG压缩攻击模拟以及水印提取的步骤。
|
6月前
|
算法 计算机视觉
基于表面法线法的二维人脸图构建三维人脸模型matlab仿真
该内容概述了一个使用MATLAB2022a的二维人脸图像三维重建算法。首先,通过人脸检测和对齐,然后运用深度信息估计技术(如Shape from Shading)获取表面法线。接着,结合预训练的三维人脸模型库和二维关键点,通过迭代优化和全局优化构建三维模型。核心程序涉及图像处理、光源方向转换、反射率和表面法线计算,最终重构高度图并显示结果。该方法依赖多视角图像,单幅图像重建可能存在挑战。
|
6月前
matlab使用样条插值重采样估计INR数据研究
matlab使用样条插值重采样估计INR数据研究
|
6月前
|
编解码 算法 计算机视觉
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
|
6月前
|
算法 索引
【数学建模竞赛】超详细Matlab二维三维图形绘制
【数学建模竞赛】超详细Matlab二维三维图形绘制
141 1
|
6月前
|
索引
matlab快速入门(读取数据并绘制散点图和拉格朗日插值
matlab快速入门(读取数据并绘制散点图和拉格朗日插值
59 0
|
6月前
|
算法
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
MATLAB | 插值算法 | 一维interpl插值法 | 附数据和出图代码 | 直接上手
216 0
|
6月前
|
算法
MATLAB | 插值算法 | 二维interp2插值法 | 附数据和出图代码 | 直接上手
MATLAB | 插值算法 | 二维interp2插值法 | 附数据和出图代码 | 直接上手
388 0