所以我创造了一个由3D Perlin噪音组成的2D动画,其中X& Y轴是矩阵/屏幕上的像素位置,Z轴随时间推移计数。然后我应用一个阈值,因此它只显示固体形状,而不像正常噪声的云类型模式。实际上,它创建了一个永远移动的流体动画,如https://i.imgur.com/J9AqY5s.gifv
我一直试图想出一种可以追踪的方式,也许可以将不同的形状编入索引,这样我就可以将它们全部变成不同的颜色。我试图在图像上循环并填充每个形状,但这仅适用于一个帧,因为它不跟踪哪个形状是哪个以及它们如何生长和缩小。
我认为必须有办法做这样的事情,因为如果我在一张纸上有一支彩色铅笔和每一帧,我就能够着色并跟踪每个斑点并在两个斑点连接时组合颜色。我只是无法弄清楚如何以编程方式执行此操作。 Perlin-noise工作的本质以及由于形状没有被定义的对象,我发现很难围绕我如何索引它们。
希望我的解释已经足够,任何建议或帮助将不胜感激。
答案 0 :(得分:1)
您当前的算法有效地将帧中的每个像素标记为blob或背景的一部分。我们假设您有第二个帧缓冲区,可以为每个像素位置保留一种颜色。如您所述,您可以在blob / background缓冲区上使用泛光填充来查找属于blob的所有像素。
对于第一帧,为找到的每个blob指定颜色并将其保存在颜色缓冲区中。
对于第二个(以及每个后续)帧,您可以再次在blob / background缓冲区上使用泛光填充来确定属于离散blob的所有像素。从颜色缓冲区(代表最后一帧的颜色)中查找与每个像素相对应的颜色,并构建所有颜色的直方图。
直方图将包含一些背景颜色的像素(因为斑点可能已移动或生长为背景区域)。
但是,由于blob平滑移动,许多像素blob中的许多像素将成为最后一帧上相同blob的一部分。因此,如果你的直方图只有一种非背景颜色,那就是你要使用的颜色。
如果直方图仅包含背景颜色,则这是一个新的blob,您可以为其指定一种新颜色。
如果直方图包含两个(或更多)blob颜色,则两个(或更多)blob已合并,您可以混合它们的颜色(可能与它们的直方图计数成比例,与其区域相对应)。
这个技巧将有效地完成所有这些。我在此概述的算法给出了这个想法。实际的实现可能不会直接构建直方图,并且可能需要重新计算每个帧上的每个像素颜色帧划痕。