我有一个带有X,Y和Z列的CSV文件来提供3D点。在该文件中,大约有4000个数据点。我在网上找到了有关如何对2D进行随机样本一致性(RANSAC)拟合但对3D却无任何拟合的东西,而我对找到所有图形数据点的“最佳拟合线”完全迷失了
答案 0 :(得分:0)
在Matlab中,ransac
似乎是计算机视觉工具箱的一部分。 function help page提供了对输入数据的以下描述:
“要建模的数据,指定为m×n矩阵。每一行对应于要建模的集合中的数据点。例如,要对一组二维点建模,请指定点数据作为m×2矩阵”
这似乎表明您只是将3D数据作为m×3阵列提供。例如:
DATA = [ 0 0 0; 0 0 1; 1 2 3];
等
如果CSV数据仅是3列乘以〜4000行的数组,而没有其他文本或数据,则您应该能够简单地以以下方式读取数据:
>> DATA = dlmread('data.txt')
DATA =
0 0 0
0 0 1
1 2 3
后跟类似的内容:
[model, inpoints] = ransac (DATA, ...model options...)
Matlab帮助页面中描述了各种模型参数,并提供了一个二维数据集示例,该数据集使用“ M估计器SAmple and Consensus”(MSAC)模型比较了最小二乘拟合和RANSAC。如果距离公式是错误和包含的主要评估方法,则应该能够将其从2D扩展到3D。
我注意到您也将此问题标记为Octave。目前,八度似乎没有实现与ransac
兼容的功能。如果您确实希望在Octave中运行代码,快速搜索就会发现一些表明Octave兼容性的实现,具体是:
请注意,这些实现可能会有所不同,包括处理3D数据的方法或能力。