【问题标题】:Algorithm for detecting contiguous pixels of the same colo(u)r to generate an image map检测相同颜色(u)r的连续像素以生成图像映射的算法
【发布时间】:2017-02-27 00:23:38
【问题描述】:

我想编写一个应用程序,该应用程序将拍摄图像并识别组成部分并生成image map

想象一个包含美国地图的图像(不管它是 SVG、JPEG、PNG 等,现在忽略)。

如果我为州之间的边界、打印在地图上的州名和边缘的非地图内容(因为图像是矩形而美国不是)保留 3 个 RGB 值,我想识别每个州并生成一个图像映射,我可以将 JS 处理程序分配给每个状态的点击。

唉,我不知道从哪里开始算法。有人可以帮忙吗?

【问题讨论】:

    标签: algorithm imagemap


    【解决方案1】:

    这应该可以工作:Flood Fill

    【讨论】:

    • 看起来不错 (+1),但它并不能真正帮助我找到形状的轮廓;并非没有很多的工作。而且我仍然没有真正看到我需要的算法
    • 对于每个区域(在您的情况下为状态),您将有一个洪水填充过程,因此管道将如下所示:
    • 对于每个区域(在您的情况下为状态),您将有一个 floodFill 过程,因此管道将如下所示: 1. 找到第一个未处理的 px 2. 执行 floodFill 3. 重复 1. 和 2 . 直到没有未处理的 pxls。我将在下一条评论中继续...
    • 在填充过程中,当您检查 N、W、S 和 E 像素是否为目标颜色时,如果有些不是,则还应检查该像素是否为边框颜色。因此,如果其中一些不是目标颜色并且它是边框颜色,则将该像素声明为边框像素,并将其添加到边框像素集。让 floodFill 过程返回该集合。每次洪水填充后,您还将拥有区域轮廓像素。使用基于队列的实现比递归实现更容易实现这一点。
    • 我现在明白了,谢谢。但是你把它宠坏了,因为我喜欢递归 :-) 当然,这种方法可能意味着我会将边框的每个像素都包含到图像映射中。想想一个正方形 - 它只需要 4 对坐标,但我最终会为边框的每个像素得到一对。也许我可以事后处理它;将所有的绳子放入一个列表中,然后沿着列表运行,如果差异只有一个像素,并且后面的一个像素也是相同方向的相同差异,则删除该像素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2011-06-04
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多