有效检查图像的两个像素是否连接

时间:2015-08-03 01:11:56

标签: algorithm

假设您有一张任意黑白图像,请考虑以下图像:

...........     ........... 
...........     ........... 
...........     ........... 
.OOO...O...     ........... 
X...O.O.OOY     XOOO...OOOY 
.....O.....     ........... 
...........     ........... 
...........     ........... 
...........     ........... 

"."代表黑色像素,"O""X""Y"代表白色像素

左图片的XY像素在O的路径之间相互关联(就Moore's neighbourhood而言) 。在右侧图片上XY像素已断开连接。通过具有任意黑白图像,我需要高性能算法,该算法将回答一组像素是否连接到另一组像素的问题。我非常肯定必须有一个完善的解决方案来解决这个问题,因为这个问题看起来很常见,但我似乎无法找到一个适合我的方案。顺便说一句,我知道Flood Fill算法,但目前我还没有考虑它,因为它比回答最初问题所需的工作更多。

我希望参考主题方向的任何信息,

P.S。

万一你得到原始问题的答案,也许你可能会回答以下问题:

...........
...........
...........
.OOO...O...
X...O.O.OOY
.....O.....
..........Z
..........U
..........V

这也很好(但不是必须的)可以用以下形式回答最初的问题:

像素X已连接到像素Y

像素X未连接到像素Z

像素X未连接到像素U

像素X未连接到像素V

提前谢谢!

1 个答案:

答案 0 :(得分:1)

你是对的,这个问题很常见,并且有一个众所周知的高性能算法,它在时间上与输入的大小成比例:O(n)(因为每个顶点最多有8个边)。您所需要的只是通过图像来创建图形,其中每个像素是顶点,边缘是2个顶点是邻居。

然后使用图表,只需在图表上运行DFS / BFS,从X顶点开始,如果到达Y,则停止,或者在你的边疆没什么。

请注意,在这里您还可以利用启发式方法甚至使用A* algorithm(您的启发式方法为manhattan distance)。