【matlab】样条函数:csapi、spap2和augknt的使用

样条函数:csapi、spap2和augknt的使用

 

可以调用样条工具箱(Spline ToolBox)

csapi

clear;clc
z0=double(rgb2gray(imread('1.jpg'))); %读取数据
x0=1:size(z0,1);y0=1:size(z0,2);
sp=csapi({x0 y0},z0);%得到每片三次样条曲面的系数
fnplt(sp); %可得到拟合曲面的效果图
vals = fnval(sp,{x0 y0});%计算拟合后的数据

---------------------------------------------------------------------------------------------------------------

spap2

clc; clear; close all;
z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;
0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;
0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;
0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;
0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];
% z=double(rgb2gray(imread('1.jpg')));
x=1:size(z,2);%长为12

y=1:size(z,1);%宽为5
[x0, y0] = meshgrid(x, y);%产生采样网格
surf(x,y,z);%画出原始数据的三维图
title('Original data Plot');
xlabel('X'), ylabel('Y'), zlabel('Z')
% colormap; colorbar;
% axis([0 15 0 6 0.15 0.55]);
% hold on;
% plot3(x0, y0, z, 'p');

figure;
ky = 3; knotsy = augknt([1,2.5,13],ky);%设置节点序列1 1 1 2.5 13 13 13

%augknt(knots,k)意义是产生一个逐增的节点序列,并且头和尾节点重复为k个,
%如augknt([1 2 3 3 3 4 4 4 4],2)和augknt([1 2 3 3 3 4],2)得到结果一样
%1 1 2 3 3 3 4 4
sp = spap2(knotsy,ky,y,z');%根据最小二乘准则的B样条拟合
yy = 1:size(z,1); vals = fnval(sp,yy);%计算拟合的数据
fnplt(sp); %画出拟合效果图

你可能感兴趣的:(MATLAB,Matlab笔记)