资源简介
高斯曲率和平均曲率的代码,用matlab写的
代码片段和文件信息
function [KH]=Point_Curvature(datapartial_data)
%此函数的功能是模型上的部分点的曲率
%data 为模型上所有的点
%partial_data 为模型上的部分点(特征点或匹配候选点)
[ProwPcol]=size(partial_data);
[rowcol]=size(data);
for i=1:Prow
distance=[];
for j=1:row
distance(j)=sqEuclidean_distance(partial_data(i:)data(j:));
end
[sortdisx]=sort(distance);
mindis_five(1:5)=sortdis(2:6);
%计算最小5个距离的点的标号,存放于 矩阵mindis_label
mindis_label(1:5i)=x(2:6);
%coef存放所有点的方程的系数
for j=1:5
x=data(mindis_label(ji)1);
y=data(mindis_label(ji)2);
z=data(mindis_label(ji)3);
coef(5*(i-1)+j1:6)=[x^2 2*x*y y^2 x y z];
end
% A存放的是第i个点的方程的系数
A=[];
A=[coef(5*(i-1)+1:);coef(5*(i-1)+2:);coef(5*(i-1)+3:);coef(5*(i-1)+4:);coef(5*(i-1)+5:)];
% 用高斯消元法解系数方程组
Adet(i)=det(A(:1:5));
[LU]=lu(A(:1:5));
coef_value(1:5i)=U\(L\A(:6));
a=coef_value(1i);
b=coef_value(2i);
c=coef_value(3i);
d=coef_value(4i);
e=coef_value(5i);
K(i)=4*(a*c-b^2)/(1+d^2+e^2)^2;
H(i)=(a+c+a*e^2+c*d^2-2*b*d*e)/(1+d^2+e^2)^(3/2);
%%
function distance = sqEuclidean_distance(fistlast)
distance = norm(fist - last);
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1375 2010-12-23 21:42 Point_Curvature.m
----------- --------- ---------- ----- ----
1375 1
评论
共有 条评论