今天对FPFH的算法进行详细研究,然而发现该算法的入口为点云和该点云的法线估计,然而看到别人把法线估计和FPFH的入口点云设置为同一点云,然而这种各个点都计算特征描述子的方法必然会耗费大量时间,而且没必要。
我的想法就是FPFH的入口仅仅是对点云获取到的关键点,而发现估计则是对关键点的法线估计。这样做的好处是可以计算量大大减少,同时节约很多时间。可是问题来了,发现估计如果入口是关键点集的话,则对关键点进行法线估计的时候则是对该关键点周围的关键点进行的法线估计,这样做肯定是不准确的,而且不稳定。然而如果发现估计是原始点云的话,那么就是对所有的原始点云里面的点进行法线估计,这样做毫无意义。
针对这个问题,解决方法应该是入口依然是原始点云,但是同时把关键点的索引送给法线估计,这样对关键点周围的所有的原始点云进行法线估计才是最准确的,可是关键点的索引怎么获取呢?
SIFT关键点搜索的输出是关键点的点集,不像NARF关键点搜索完成之后的输出是点的索引,因此获取关键点索引的这个程序需要自己重新编程:
想法一:建立一个循环,循环控制条件是 i , i 从0开始,到cloud->size(),然后使用cloud->points[i]和关键点集中的每一个关键点做对比,相同的,则记录这个点的 i ,存储到一个整型数组中,从头至尾。
想法二:在SIFT关键点搜索的过程中已经建立了kd-tree,对关键点集中的每个点在原始点云中进行最近邻搜索不就可以得到他们的索引了么?
比较:两种方法中,无疑&
我的想法就是FPFH的入口仅仅是对点云获取到的关键点,而发现估计则是对关键点的法线估计。这样做的好处是可以计算量大大减少,同时节约很多时间。可是问题来了,发现估计如果入口是关键点集的话,则对关键点进行法线估计的时候则是对该关键点周围的关键点进行的法线估计,这样做肯定是不准确的,而且不稳定。然而如果发现估计是原始点云的话,那么就是对所有的原始点云里面的点进行法线估计,这样做毫无意义。
针对这个问题,解决方法应该是入口依然是原始点云,但是同时把关键点的索引送给法线估计,这样对关键点周围的所有的原始点云进行法线估计才是最准确的,可是关键点的索引怎么获取呢?
SIFT关键点搜索的输出是关键点的点集,不像NARF关键点搜索完成之后的输出是点的索引,因此获取关键点索引的这个程序需要自己重新编程:
想法一:建立一个循环,循环控制条件是 i , i 从0开始,到cloud->size(),然后使用cloud->points[i]和关键点集中的每一个关键点做对比,相同的,则记录这个点的 i ,存储到一个整型数组中,从头至尾。
想法二:在SIFT关键点搜索的过程中已经建立了kd-tree,对关键点集中的每个点在原始点云中进行最近邻搜索不就可以得到他们的索引了么?
比较:两种方法中,无疑&