使用带有 NodeJS 的图像像素数组跟踪边界

Trace boundary using an image pixel array with NodeJS

本文关键字:像素数 像素 数组 跟踪 边界 图像 NodeJS      更新时间:2023-09-26

我有这个图像,除了中间有一个白色物体(它可以是任何东西,但它总是完全白色的)是完全黑色的。我想用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;

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

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

查看像Freeman Code这样的链码。您需要 1 个等值线点才能开始。因此,只需遍历您的线条,直到您击中您的对象。然后你绕着你的物体走,直到你到达你的起点。您将获得一个代码,描述您每一步的方向。此代码可用于计算各种对象特征或仅绘制对象的轮廓。

顺便说一句,如果您的obect始终是白色的,并且您的背景始终是黑色的,则不必处理4个通道。红色、绿色或蓝色通道包含相同的信息。只需使用其中任何一个。