点云配准-ISS内部形态描述子 (MATLAB代码)

使用MATLAB实现点云内部形态描述子 (Intrinsic Shape Signatures, ISS)

提示:使用前需先下载置顶博客《自定义MATLAB点云函数集》,并将文件夹添加到MATLAB搜索路径中。

clear
clc
pc=pcread('teapot.ply');
pc=pcRemoveDuplicate(pc);
pt=pc.Location;
count=pc.Count;
%% 
indices=cell(count,1);
dists=cell(count,1);
w=cell(count,1);
diff=cell(count,1);
a=cell(count,1);
a_sum=cell(count,1);
b=cell(count,1);
cov=cell(count,1);
e=cell(count,1);
%% 
for i=1:count
    point=pt(i,:);
    [indices{i},dists{i}]=findNeighborsInRadius(pc,point,0.1);
    a_sum{i}=zeros(3,3);
    for j=2:length(dists{i})
        w{i}(j-1)=1/dists{i}(j);
        diff{i}(j-1,:)=point-pt(indices{i}(j),:);
        a{i}{j-1}=w{i}(j-1)*diff{i}(j-1,:)'*diff{i}(j-1,:);
        a_sum{i}=a_sum{i}+a{i}{j-1};        
    end
    b{i}=sum(w{i});
    cov{i}=a_sum{i}/b{i};
    e{i}=eig(cov{i});
    e{i}=sort(e{i},"descend");
end
%% 
flag=zeros(count,1);
threshold=0.6;%0~1
for i=1:count
    if (e{i}(2)/e{i}(1))<=threshold&&(e{i}(3)/e{i}(2))<=threshold
        flag(i)=1;
    end
end
ISSpt=pt(flag==1,:);
figure
pcshow(pc)
hold on
scatter3(ISSpt(:,1),ISSpt(:,2),ISSpt(:,3),36,'r','*')

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值