- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用插值函数求三维图像的二分点及到定曲面等距离的曲面
二元函数的分片段线性插值
一 函数构造
1.线性三角插值
如上图所示的三角形,已知三角形的三个顶点P1, P2,P3处的函数值分别为Z1=f(x1,y1),Z2=f(x2,y2),Z3=f(x3,y3)。我们需要求出线性函数P(x,y)=ax+by+c,使其满足P(x1,y1)=Z1,P(x2,y2)=Z2,P(x3,y3)=Z3。
三角形的面积的两倍我们可以用行列式来表示,,那么可以利用行列式的性质来构造基函数如下:
显然,三个基函数分别满足插值条件:
2.相邻节点的二分点,三分点的x,y坐标
所给的数据x,y,z结构均为矩阵,如下面的图形所示,我们用矩形表示x,y的矩阵,矩形的顶点为P1 P2 P3 P4,我们计算四个顶点的二分点。如果我们连接P2 P3,会得到两个三角形。
二分点
3. 二分点坐标的matlab代码实现
function xx1=inter2xy(x) %计算相邻点的二分点的坐标
[m,n]=size(x);
xx=zeros(2*m-1,2*n-1); %扩大矩阵来存储节点的坐标
for i=1:m %将原矩阵在矩形顶点的x,y放在扩大后的矩阵相应处
for j=1:n
xx(2*i-1,2*j-1)=x(i,j);
end
end
for i=1:m %计算原始行相邻点中点的x,y坐标
for j=1:n-1
xx(2*i-1,2*j)=1/2*(xx(2*i-1,2*j-1)+xx(2*i-1,2*j+1));
end
end
for i=1:m-1 %计算所有列的相邻点中点的x,y坐标
for j=1:2*n-1
xx(2*i,j)=1/2*(xx(2*i-1,j)+xx(2*i+1,j));
end
end
xx1=xx; %得到二分点插值后的大矩阵
end
4.二分点插值函数的matlab代码实现
然后进行插值计算出二分点处的Z的值。由上面所说的即为插值函数。
Matlab代码实现如下:
function zzz=Linear(x,y,z,xx,yy) % 计算二分点插值后的Z的值
[m,n]=size(xx);
zzz=zeros(m,n); % 用来存储Z值的矩阵
D0=ones(3,3); % 三阶矩阵,用于基函数计算
[m,n]=size(x);
for j=1:n-1
for i=1:m-1
D0(1,1)=x(i,j); % D0即上面所说的第一种三角形
D0(1,2)=y(i,j);
D0(2,1)=x(i,j+1);
D0(2,2)=y(i,j+1);
D0(3,1)=x(i+1,j);
D0(3,2)=y(i+1,j);
D1=D0;
D1(1,1)=xx(2*i-1,2*j); %D1用于计算l1(x,y)
D1(1,2)=yy(2*i-1,2*j);
D2=D0;
D2(2,1)=xx(2*i-1,2*j); % D2用于计算l2(x,y)
D2(2,2)=yy(2*i-1,2*j);
D3=D0;
D3(3,1)=xx(2*i-1,2*j); % D3用于计算l3(x,y)
D3(3,2)=yy(2*i-1,2*j);
l1=det(D1)/det(D0);
l2=det(D2)/det(D0);
l3=det(D3)/det(D0);
zzz(2*i-1,2*j)=l1*z(i,j)+l2*z(i,j+1)+l3*z(i+1,j); % M1的Z值
D1(1,1)=xx(2*i,2*j);
D1(1,2)=yy(2*i,2*j);
D2(2,1)=xx(2*i,2*j);
D2(2,2)=yy(2*i,2*j);
D3(3,1)=xx(2*i,2*j);
D3(3,2)=yy(2*i,2*j);
l1=det(D1)/det(D0);
l2=det(D2)/det(D0);
l3=det(D3
文档评论(0)