使用带有NodeJS的图像像素阵列跟踪边界

时间:2016-02-18 21:59:43

标签: javascript node.js image-processing png

我有这个图像是完全黑色的,除了中间的白色物体(它可以是任何东西,但它总是完全白色)。我想用nodeJs做的是跟踪对象的边界(我想找到黑色旁边的所有白点)(性能很关键!)

使用pngjs我可以读取一个图像,它给出了一个数组,其中每个像素有4个值(RGBA)。它是一维数组。因此,假设图像是1000 x 1000像素,它给我一个1000 x 1000 x 4 = 4000000个条目的数组。

以下表达式将xy转换为数组索引

 var idx = (1000 * y + x) << 2;

 data[idx] = 243;
 data[idx + 1] = 16;
 data[idx + 2] = 16;

无论如何,我可以遍历整个阵列并注册黑色变为白色的点,但正如我所说,性能非常重要。我可以想象某种智能迭代搜索算法存在,可以以某种方式遵循边界:)

也许有人知道一个可以提供帮助的图书馆,或者有关如何做到这一点的文章也会很棒!!

1 个答案:

答案 0 :(得分:1)

查看像Freeman Code这样的连锁代码。你需要1个轮廓点。所以只需遍历你的线,直到你击中你的对象。然后你走动你的物体,直到你到达你的起点。您将获得一个代码,描述您为每个步骤所采取的方向。此代码可用于计算各种对象特征或仅绘制对象的轮廓。

顺便说一下,如果你的对象总是白色而你的背景总是黑色的,你就不必处理4个通道。红色,绿色或蓝色通道包含相同的信息。只需使用其中一个。