最新消息:南山南 北秋悲

三维模型SDF直方图

图形 darksea 165643浏览 0评论

一个多维的直方图能够很好的表示一个模型的空间结构和局部细节,因此模型的直方图常常被用来三维形状匹配。本文试着实现论文Data-Driven Suggestions for Creativity Support in 3D Modeling里基于模型SDF描述算子的三维直方图。这篇论文里的三维模型直方图如下:

data-driven

 

对你看的没错,图中那灰灰的就是三维直方图,刚看论文的时候一头雾水,直方图怎么长这样,上面的直方图确实画的不清晰,自己实现后才有点明白。模型的颜色指示了模型表面SDF的大小,蓝色和绿色表示SDF较大,红色表示SDF较小。

1、三维直方图的坐标

要画三维直方图,首先要想清楚三维直方图的三个坐标分别是什么,这里使用了一个“descriptor-descriptor-distance”描述的三维直方图。这里的descriptor指的是SDF,即:X轴 Y轴均为模型SDF值,并且沿所指方向递增,Z轴为XSDF与YSDF的差值。

2、模型SDF值

使用CGAL求模型SDF值,需要CGAL4.4以上版本,具体使用参考前面一篇文章代码基于sdf的抽骨架之散点图

3、SDF稀释及排序

我使用matlab构造直方图,由于所用的三维模型三角面片达4000多个,如果不经过稀释直接进行构造三维直方图将会在matlab中带来“Maximum variable size allowed by the program is exceeded”的错误,这个错误表示所处理数组的数量级超过了程序所允许的最大值,因此进行稀释,事实上也没必要用如此高的精度画直方图。由于SDF值沿着X Y轴递增,因此对SDF进行排序。代码如下:

4、将模型每对SDF差值存为matlab可以读取的矩阵形式

5、matlab构造三维直方图

输入:

M = load(‘E:/VCC程序/AssimpToPolyhedron/Data/ddd/386_50.txt’);//或者386_20.txt
bar3(M)

得到稀释50倍的直方图:

386_50

 

稀释20倍的直方图:

386_20

 

到这里可以发现论文里的直方图是从Z轴上往下看到的一个截面。

参考文献:

Data-driven suggestions for creativity support in 3D modeling

 

转载请注明:小菜C不是菜 » 三维模型SDF直方图

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址