Algorithm 如何跟踪/分色使用柏林噪波生成的形状?

Algorithm 如何跟踪/分色使用柏林噪波生成的形状?,algorithm,indexing,graphics,processing,perlin-noise,Algorithm,Indexing,Graphics,Processing,Perlin Noise,因此,我创建了一个由3D柏林噪声组成的2D动画,其中X和Y轴是矩阵/屏幕上的像素位置,Z轴只是随着时间的推移计数。然后,我应用一个阈值,使其仅显示实体形状,而不像正常噪波的云型图案。实际上,它创建了一个永久移动的流体动画,就像这样 我一直在想一种方法,我可以跟踪,也许索引不同的形状,所以我可以让他们都是不同的颜色。我试着在图像上循环并填充每个形状,但这只适用于一帧,因为它无法跟踪哪个形状是哪个形状以及它们是如何生长和收缩的 我想一定有办法做到这一点,因为如果我有一支彩色铅笔,在一张纸上画上每一帧

因此,我创建了一个由3D柏林噪声组成的2D动画,其中X和Y轴是矩阵/屏幕上的像素位置,Z轴只是随着时间的推移计数。然后,我应用一个阈值,使其仅显示实体形状,而不像正常噪波的云型图案。实际上,它创建了一个永久移动的流体动画,就像这样

我一直在想一种方法,我可以跟踪,也许索引不同的形状,所以我可以让他们都是不同的颜色。我试着在图像上循环并填充每个形状,但这只适用于一帧,因为它无法跟踪哪个形状是哪个形状以及它们是如何生长和收缩的

我想一定有办法做到这一点,因为如果我有一支彩色铅笔,在一张纸上画上每一帧,我就可以对每一个斑点进行着色和跟踪,并在两个斑点结合时组合颜色。我就是不知道如何通过编程来实现这一点。柏林噪声的工作性质,以及由于形状不是定义的对象,我发现很难理解如何索引它们


希望我的解释已经足够了,任何建议或帮助都将不胜感激。

您当前的算法有效地将帧中的每个像素标记为斑点或背景的一部分。假设您有第二个帧缓冲区,可以保存每个像素位置的颜色。正如您所指出的,您可以在blob/背景缓冲区上使用整体填充来查找属于blob的所有像素

对于第一帧,为找到的每个blob指定颜色,并将其保存在颜色缓冲区中

对于第二帧(以及随后的每一帧),可以再次在blob/背景缓冲区上使用整体填充来确定属于离散blob的所有像素。从“颜色缓冲区”(表示上一帧的颜色)中查找与每个像素对应的颜色,并为找到的所有颜色构建直方图

直方图将包含背景颜色的一些像素(因为blob可能已移动或生长到背景区域)

但由于斑点平滑移动,因此作为该帧给定斑点一部分的许多像素将是最后一帧上相同斑点的一部分。所以如果你的直方图只有一种非背景色,那就是你要使用的颜色

如果直方图仅包含背景色,则这是一个新的斑点,您可以为其指定一种新颜色

如果直方图包含两个(或更多)斑点颜色,则两个(或更多)斑点已合并,您可以混合它们的颜色(可能与它们的直方图计数成比例,并与它们的区域相对应)


这个诀窍将是有效地完成所有这一切。我在这里概述的算法给出了这个想法。实际的实现可能不会直接构建直方图,可能需要重新计算每一帧上的每个像素颜色帧刮痕。

堆栈溢出并不是专门为一般的“我该怎么做”类型问题设计的。这是针对特定的“我尝试了X,期望是Y,但得到了Z”类型的问题。我能告诉你做的最好的事情就是试着去做,然后一步一步地去做。然后,如果你被卡住了,你可以发布一个带有特定技术问题的帖子。祝你好运