题目

Easy Mesh Cutting

概述

文章介绍的是一种简单的网格裁剪工具。这种工具采用类似于Lazy snapping的简单操作,用在了3D模型上。这种简单体现在了它不需要用户精确地指定裁切的边缘,也不需要太多的操作,只需要示意性的几个笔划,就达到对3D模型的“部位”区分。并且在这个基础上,工具运用其他简单的笔划和按键组合,实现了对区分后的部位进行边缘调整,裁剪,拼接,甚至是编辑操作。

论文内容

论文背景

文章认为,人们对于部位的认知,其实是基于有意义的部分的区分。而如何界定什么东西有意义,对于人来说可能是非常方便的,就像是“把兔子模型的耳朵裁减掉”这么简单。但是这种建立在人的主观意识的想法,对于计算机而言就显得十分困难了。

况且,对于同一个物体,不同的想法就可以定义出不同的部位划分,例如有时候会把腿部看成一个部分,有时候则要区分大腿和小腿。如下图:

week7-pic1

所以文章的目标就是找到一个方法,可以按照用户的意图进行网格划分,用户通过指定网格中的哪些部分属于“前景”(即需要的部分)和背景(即不需要的部分)来切割出一个“有意义”的部位。

这种找到有意义的部分,区别于传统的碎片分割,“部分”其实是建立在碎片之上的,因为它的“有意义”,所以我们可以对它赋予更多有相对完整性的东西。

week7-pic2

操作方法

这个工具主要的操作就是前景背景笔画,边缘调整,裁剪拼接,编辑。

前景笔划

这个工具里面是采用绿色的笔划代表前景(即需要的部分),采用红色的笔划代表背景(即不需要的部分),然后鼠标的左键操作的是前景,右键操作的是背景,直接在模型上面进行涂画操作即可。如下:

week7-pic3

边缘调整

只需要使用鼠标在边缘处进行操作,直接对于边缘一些不理想的区域进行手动的拉伸等操作。从文章中举的众多例子来看,这种操作在一般情况下使用的概率不高,只有在碰到一些特殊模型的情况,或者使用者有极其细致的要求时,才能用上。可以说这是文章这个工具做得严谨的一个体现。虽然说使用频率不大,但是对于这个工具可以操作的精细程度就增加很多!如下图:

week7-pic4

拼接

拼接可以说是作者比较幽默的地方,其实本质上就是裁剪,但是作者在文章中把裁剪出来的东西互相拼接,做出了一些很有趣的组合,让大家为之一笑的同时,也更加深刻地理解到这个功能的用处。因为对于模型的处理来说,很多情况下我们可能是在其他渠道找到一个模型(不是自己绘制),而且可能只是需要用到这个模型的一个部分,那么这个时候就可以使用这种简单地裁剪,拼接到我们需要用到的地方上面去。

week7-pic5

编辑

文章中采用的是前面的方法,先要选择一个需要编辑的区域,然后在选择了的情况下,画出一条与前景相对应的变换后的线条,代表选中的区域按照前景线到当前线的变化。十分的方便快捷易用,如下:

week7-pic6

算法实现

大体思路

  1. 先进行等照度计量(Isophotic Metric),然后利用最小规则,得到所有负的最小主曲率的边界之间的部分,来分解三维形状的凹纹。将最小规则加入等照度计量之中优化,得到经过最小规则改进的等照度计量。

  2. 区域分割,从种子顶点开始增长前景区域(绿色笔触)和背景区域(红色笔触),两个部分同时增长。

  3. 边界优化:对于边界的锯齿状区域,进行网格上的“蛇”边界平滑。计算snaxel(我大胆猜测这个词是作者造的,意思就是蛇上面的一个元素,pixel of snake大概是这个意思,实在不好翻译而且容易歧义所以下面保留了英文)的内部能量和外部能量。

    a) 内部能量:基于角的蛇邻边θ在切平面上的投影线

    b) 外部能量:基于两个主要曲率

具体内容:

  1. 等照度计量改进:

上面我们提到了它是利用了最小规则,得到下面式子

week7-pic7

KD为沿路径方向曲率

week7-pic8

g(x)为负曲率大曲率的增强函数

  1. 区域增长策略

从种子顶点开始,增长前景区域的绿色笔触,增长背景区域的顶点上红笔划的种子,两个部分同时增长。文章中的描述概括出来大概是这样,可能显得不太好理解,所以下面用图的形式来进行步骤的递进演示:

首先是在模型上绘制出的前景线和背景线,三角形代表模型上面的网格,这里只是抽取一小块的部分来进行示意性的表示。

week7-pic9

根据上面计算出来的等照度距离,对于周围的点进行排序,并找到距离最小的点。

week7-pic10

将找到的这个距离最小的点,与笔划进行连接,构成的一个小三角形归入该笔划(无论是前景还是背景)的范围中。

week7-pic14

继续上面的步骤,对剩下的周围的点进行等照度距离的排序,不断扩充前景线和背景线的范围(注意,两者是同时进行的,就是看距离如果更小的优先处理)

week7-pic11

最后,当整个区域都被绿色和红色覆盖时(其实体现出来是用F和B去替代顶点的值,判断标准就是当所有的值都是F或者B时),则结束循环,分解完成。

week7-pic12

  1. 边缘优化

采用一个贪婪算法,以最大限度地提高蛇的能量,通过操作上述三个操作的迭代方式。在文章中,细化迭代是快速的,实时细化切割边界。精炼切割边界使用我们的蛇技术,在原切割边界线在蓝色锯齿而精致的边界线,是光滑的蛇绿色分区的优化效果。

week7-pic13

心得

这周的这篇周报可能我放了比较多的图,因为这篇论文其实他是有对应的PPT还有视频的,上面也有源代码可以跑一下。后面还做了很多十分有趣的扩展。我觉得在PPT的帮助下,理解这篇论文才变得更加容易,就是因为它里面有很多的图,所以我觉得周报的话结合这些图来进行论述可能相比于我单纯用文字的话,更加清晰一点。这次算是做了一点尝试吧。

这篇文章也是十分有趣的,讲述了他们做的一个非常简单方便的处理模型的工具。这种操作的方法十分简单,但是达到的效果却十分的奇妙,特别是他的编辑操作,虽然我没有很懂它的变形原理,但是看了它示意的效果,觉得做得很精致。突然觉得毕业设计如果做这个方向的可能也是不错的,就是对于建立的模型可以通过简单的操作来达到变形之类的功能。

但是我是结合Kinect来开发的,所以可能可以用手势来代替这里面的鼠标操作,可能需要一点模式识别的知识来区分手势,做一些简单的手势来达到对于一个模型的操控,如挤压,拉伸,扭曲等,应该也是十分有趣的。不知道能不能做,先记录下来,下周可能再找一篇编辑三维模型的文章更深入地来了解一下这个方向的东西吧。