首先,如何使用openvdb找到最近的点?
其次,如果ClosestSurfacePoint
是正确的方法,那么如何使用它?
我使用OpenVDB阅读有关ICP的论文以获得更快的NNS。
(http://www.pmavridis.com/research/efficient_sparse_icp/)
作者说他通过在NNS上使用openvdb来提高速度。
其他一些人以类似的方式取得了同样的成就。
所以,我想亲自尝试一下。
经过几次尝试,我终于成功编译了。
然而,我有点困惑。
在我的观点中(在阅读了很多文档,包括在线食谱之后),采样器似乎这样做了
所以,我尝试了这些例子。
GridType::ConstAccessor accessor = grid.getConstAccessor();
GridType::ValueType v0 = openvdb::tools::PointSampler::sample(accessor, ijk);
GridType::ValueType v1 = openvdb::tools::BoxSampler::sample(accessor, ijk);
GridType::ValueType v2 = openvdb::tools::QuadraticSampler::sample(accessor, ijk);
我做了如下所述的事情
对象:找到最靠近查询点(ijk)的网格中的点
但是,这些例子显示0或1。
如果找到完全相同的位置,则返回1。 如果没有,0。
可能这个点采样器不是我想要的。
以其他方式尝试。
其他候选人
ClosestSurfacePoint, ClosestPointProjector.
我尝试了下面写的代码 它与betajippity的作品相似 https://github.com/betajippity/Ariel/blob/master/src/grid/levelset.cpp
但由于矢量
而导致错误std::vector<openvdb::Vec3s> positions = {
{ 1, 1, 1 },
{ 1, 2, 1 },
{ 2, 1, 1 },
{ 2, 2, 1 },
{ 100, 100, 100 },
{ 100, 101, 100 }
};
myPointList pointlist(positions);
const float voxelSize(1.0);
openvdb::math::Transform::Ptr transform(openvdb::math::Transform::createLinearTransform(voxelSize));
openvdb::tools::PointIndexGrid::Ptr vdbgrid =
openvdb::tools::createPointIndexGrid<openvdb::tools::PointIndexGrid>(pointlist, *transform);
openvdb::FloatGrid vdbgrid;
openvdb::util::NullInterrupter n;
std::vector<float> distances;
openvdb::tools::ClosestSurfacePoint<openvdb::tools::PointIndexGrid> csp;
csp.initialize(*vdbgrid, 0.0f, &n);
最后一行
csp.initialize(*vdbgrid, 0.0f, &n);
导致Debug Assertion失败。
File: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\vector
Line: 72
Expression: vector iterator not dereferencable
我不知道如何处理这些事情。
因为我无法修改openvdb的内部。我刚刚调用函数,它会出错:(
如果您对此有任何疑问,请提供帮助。
同样,问题是......
如何使用openvdb找到最近的点?
如果ClosestSurfacePoint
是正确的方法,那么如何使用它?
我提前感谢你。
答案 0 :(得分:1)
来自OpenVDB的回答是开发人员。
这是一个很好的问题, 我试着回答这个问题。
简而言之,是的,不是。 OpenVDB Points是一个理想的基本数据结构,用于进行最近邻搜索,因为它已经是空间组织的,
但是我们还没有为您提供任何高级API,因此您必须自己编写大部分算法。
由于网格的空间特性, 它是一个相对简单和快速的最近邻搜索,你有一个&#34;最大半径&#34;在其中搜索不会太大,因为您可以调整体素的大小以匹配此半径并最大化性能。
执行任意距离最近邻搜索更具挑战性,我建议你在没有编写支持框架(例如kd-)的情况下发现难以从数据结构中获得不错的性能树)。
我们尝试过最近邻算法, 因此,如果我没有将您的摘要告诉您,我们很乐意在此向您指出有关实施的正确方向。 :)
谢谢, 丹