图像缩略图

有限迭代最近点

1.0.0.0版(13.4 KB)通过 德克 - 扬克朗
迭代最近点采用有限差分优化注册三维点云仿射。
5.0条
20个等级

14个下载

更新2009年5月29日

查看许可证

该函数是一种基于有限差分法的三维点云(如网格的垂直数据)迭代最近点(ICP)配准算法。

普通ICP解决了平移和旋转与分析方程。通过使用有限差分此功能也可以解决调整大小和剪切从而仿射配准。

作为第一步,此函数将静态点排序为重叠块的网格。最接近移动点的块将始终包含其最接近的静态点,因此网格允许更快的注册。

引用为

德克 - 扬克朗(2020年)。有限迭代最近点(//www.tatmou.com/matlabcentral/fileexchange/24301-finite-iterative-closest-point),MATLAB中央文件交换。检索.

评论和评分(35岁)

李京生

简单演示:
你好!对于那些正在寻找演示的人,这里是一个基于Martin Kjer和Jakob Wilm的另一个国际比较项目实施演示的简单演示,丹麦技术大学,2012年:
%demo_ICP_有限.m
%ICP_finite - 迭代最近点有限

CLC
明确
全部关闭

米= 30;格的宽度%
N = M ^ 2;点的数量%

[X,Y]=网格(邻接空间(-2,2,m),邻接空间(-2,2,m));

X =重塑(X,1,[]);
Y=重塑(Y,1,[]);

Z=sin(X).*cos(Y);

%创建数据点矩阵
D=[X;Y;Z];

%翻译值(a.u.):
Tx=0.5;
TY = -0.3;
TZ = 0.2;

转换%矢量
T=[Tx;Ty;Tz];

%旋转值(rad.):
rx=0.3;
ry=-0.2;
RZ = 0.05;

RX = [1 0 0;
0 cos(rx)-sin(rx);
0罪(RX)COS(RX)];

中R y = [COS(RY)0罪(RY);
0 1 0;
-sin(ry)0 cos(ry)];

RZ = [COS(RZ)-sin(RZ)0;
罪(RZ)COS(RZ)0;
0 0 1];

%旋转矩阵
R=Rx*Ry*Rz;

%将数据矩阵加噪声转换为模型矩阵
M=R*D+repmat(T,1,n);

%向模型和数据添加噪波
rng(2912673);
M = M + 0.01 * randn(3,n)的;
D=D+0.01*randn(3,n);

%运行ICP有限(标准设置)
[Points_Moved,MH] = ICP_finite(M 'd');
%[Points_Moved,MM] = ICP_finite(M,d,选项);

%使用ICP有限结果变换数据矩阵
大连化物所= movepoints(MH,d');
大连化物所=大连化物所';

%绘制结果
%子块(2,2,2);
plot3(M(1,:),M(2,:),M(3,:), '博',大连化物所(1,:),大连化物所(2,:),大连化物所(3,:),'RO“);
%绘图3(M(1,:)、M(2,:)、M(3,:)、'bo',Dicp(1,:)、Dicp(2,:)、Dicp(3,:)、'r');
轴相等;
xlabel( 'X');ylabel( 'Y');zlabel( 'Z');
标题( 'ICP结果');

尼尔斯

嗨,
我建议更换本节
“对于i = 1:尺寸(Points_Moved,1)
%最近找到点组
点=移动的点(i,:);
DIST =(Points_Group(:,1) - 点(1))^ 2 +(Points_Group(:,2)点(2))。^ 2 +(Points_Group(:,3) - 点(3))。^ 2;
[思维主义者,j]=最小(距离);

%查找组最近点
Points_Group_Static = Cell_Group_Static {Ĵ};
DIST =(Points_Group_Static(:,1) - 点(1))^ 2 +(Points_Group_Static(:,2)点(2))。^ 2 +(Points_Group_Static(:,3) - 点(3))。^ 2;
[思维主义者,j]=最小(距离);
Points_Match(I,:)= Points_Group_Static(J,:);
结束
"
通过
这些行。
[idx]=knnsearch(点静态,点移动);
Points_Match = Points_Static(IDX,:);
这对我来说要快得多。

本GUHL

这仅仅是黄金。非常感谢你做的这些!

本GUHL

所以

雷耶

有没有介绍相关原理的文献呢?

KIAN motahari

它确实工作得很好,但是我想知道我是否可以将RGB矩阵附加到每个点,然后结果将包含颜色我也是你有什么办法吗?

Sarun

迪尼兹萨

一切如期而至,加油!

如何引用你的代码?

@如何引用作品:
用他的博士论文,可在<http://doc.utwente.nl/78499/1/thesis_D_Kroon.pdf>. 他在149页提到这里。

N 2 S

举*

N 2 S

我想你对你的代码。可以请你告诉我,我可怎么办呢?谢谢

大家好,我想知道是否有人尝试过在非常大的数据集上使用这个算法(比如点云有300000-500000个点),以及推荐哪些选项来最小化计算时间。

谢谢你们

优素福

嘿,德克 - 扬克朗。
感谢您的代码!不知怎的,我不能,虽然运行它。我得到“Itteration错误”你能帮我找到了什么问题?
既我使用点云从一个超高动力学传感器和略微不同的捕获角度拍摄的。

我会很感激和指点,因为我是这个领域的新手!
谢谢

N 2 S

嗨,克罗恩,你的密码对我来说很好。现在我想把“kd-tree”函数作为匹配方法添加到这个算法中,你能帮我做一下吗?你好,纳齐拉

弥尔顿

您的ICP代码的伟大工程,我能实现我的点云的很好登记。

点云是使用我的三维灰度数据集的等值面顶点生成的。我想使用仿射变换矩阵M来变换三维灰度数据,就像变换顶点的点云一样。

出于某种原因,这似乎并没有工作。使用输出仿射变换矩阵时,我不能让我的数据集旋转正确。

你可以发布你如何使用M至旋转不是一个点云,但灰度3D数据集的例子吗?或者是有一些原因,不应该工作?

感谢您分享您伟大的工作。

风暴鲨

非常漂亮的代码。易于理解和适用于其他平台

赫利亚

克里斯

很好的密码。同样,参考/引文信息也很好。

克里斯

帮派

卢西亚

嗨,我已经成功地将你的国际比较项目用于我的一个项目-我想在我准备的论文中提供一个参考,你能告诉我你希望我如何引用它吗?

它可以用于注册二维点集吗?

亚历克斯

这个代码工作得非常好!谢谢你的出色工作

JK黄某

嗨,德克·詹·克罗恩。我想知道你的代码中最近点的搜索方法。在建立点的统一网格时,在代码中使用网格间距术语“spacing=size(Points_Static,1)^(1/6)*sqrt(3);”的原因是什么。有没有关于这个的资料?

*杰克斯·萨德
该代码是从头开始编写,而不是发表在一份文件中。
你当然可以参考原稿。

雅克·萨德

嗨,真是伟大的工作!但我嫌我问,如果你可以把一个参考的工作

罗伯特

固定的,但演示代码将是一个很好的补充。

罗伯特

我试图运行这个程序,以及所有我的数据模型中的点转化为奇异点。如果这可以解释,我将修改我的评价。例如,将一个演示,所以我可以看到你的作品一起工作的东西。

对不起,但我不能成功运行它。错误的是
'' ???使用错误==>抽动
太多的输出参数......”
顺便说一句,我的数据库包含大约4万个三维点。

期待您的回复。

M.

能否请您把这项工作的参考?非常感谢上传。

MATLAB版本兼容性
创建了R2009a
与任何版本兼容
平台兼容性
视窗 苹果系统 Linux系统