通过生长曲线实现艺术镶嵌的效果

今天大致看完了论文,思路仍然不是很清晰.
论文介绍了通过生长曲线的方法来实现用许多不规则的区块镶嵌成整个图案.新颖之处大概在于,不同于以往实现艺术镶嵌是采用小区块填充整个区域的方法,这里的方法是在区域内通过一定数量的粒子的运动来生成其轨迹的曲线,这些曲线最终将图案割裂成一个个不规则的细小区块.

So,主要问题就是:

  1. 对于一幅图案,如何确定粒子系统的初始分布;
  2. 确定粒子如何运动(又分为粒子并行运动和顺序运动);
  3. 粒子停止运动的条件;
  4. 对最终分好的区块进行着色.

确定粒子系统的初始分布

既然粒子要运动,当然要首先要确定粒子运动的起始位置,即确定粒子系统的初始分布.显然,粒子系统不应该是在原图像大小的区域内均匀分布,粒子系统初始分布直接影响了最终分块的效果.

粒子如何运动

接下来要确定粒子受什么样的力运动.我的第一直觉是粒子必然是根据一个由图像所确定的方向场下运动.既然要确定图像内容,以前学过的一些边缘检测的算法一下子浮出脑海,然而论文里好像是根据一个叫edge tangent flow的方法来确定的向量场,这里的具体细节还没搞懂.<<代码本色>>其中的一个FlowfieldImage的示例程序,是根据一副灰度图像的亮度值来产生方向场,然后通过鼠标点击的方式产生粒子,在方向场下运动,我稍微改动了一下代码,首先显示粒子运动的轨迹,然后又改为在整个区域内均匀分布粒子运动.果然效果和论文里的效果简直风马牛不相及.失败.

粒子停止运动的条件

根据论文,应该是当粒子运动的轨迹长度达到一定阈值时,粒子停止运动.当所有粒子停止运动时,划分区块的过程结束.

对分好的区块分别进行着色

大致思路是将封闭区块的重心(打算就是将封闭区块的定点坐标相加然后除以定点数)的色彩赋给整个区块.

推荐阅读更多精彩内容