我有一大组点(大约 10k 点)由粒子轨迹(在 xy 平面上的移动由相机拍摄,因此在我的示例集中为 3d - 256x256px 和 ca 3k 帧)和噪声。这些粒子在大致直线上大致(但只是大致)沿相同方向行进,因此为了分析它们的轨迹,我试图通过这些点拟合线。我尝试使用 Sequential RANSAC,但找不到可靠地挑选出误报以及 T-和 J-Linkage 的标准,它们太慢且不够可靠。
这是我使用顺序 Ransac 获得的数据集的一部分图像,具有良好和不良拟合: 我在这里使用粒子斑点的质心,斑点大小在 1 到大约 20 像素之间变化。
我发现例如仅使用每 10 帧的子样本也工作得很好,因此可以通过这种方式减少要处理的数据大小。
我读了一篇关于神经网络可以完成的所有事情的博客文章,并想在我开始阅读之前问你这是否是一个可行的应用程序(我来自非数学背景,所以我必须做一点阅读)?
或者你能建议一种不同的方法吗?
谢谢!
附录:这是 Matlab 函数的代码,用于生成包含 30 条平行噪声线的样本点云,我还无法区分:
function coords = generateSampleData()
coords = [];
for i = 1:30
randOffset = i*2;
coords = vertcat(coords, makeLine([100+randOffset 100 100], [200+randOffset 200 200], 150, 0.2));
end
figure
scatter3(coords(:,1),coords(:,2),coords(:,3),'.')
function linepts = makeLine(startpt, endpt, numpts, noiseOffset)
dirvec = endpt - startpt;
linepts = bsxfun( @plus, startpt, rand(numpts,1)*dirvec); % random points on line
linepts = linepts + noiseOffset*randn(numpts,3); % add random offsets to points
end
end