图像连通域标记算法是从一幅栅格图像(一般为二值图像)中,将互相邻接(4邻接或8邻接)的具备非背景值的像素集合提取出来,为不一样的连通域填入数字标记,而且统计连通域的数目。经过对栅格图像中进行连通域标记,可用于静态地分析各连通域斑块的分布,或动态地分析这些斑块随时间的集聚或离散,是图像处理很是基础的算法。目前经常使用的连通域标记算法有1)扫描法(二次扫描法、单向反复扫描法等)、2)线标记法、3)区域增加法。二次扫描法因为简单通用而被普遍使用!html
图1 连通域标记示意图算法
随着所要处理的数据量愈来愈大,使用传统的串行计算技术的连通域标记算法运行时间过长,难以知足实际应用的效率需求。随着并行计算技术的发展,利用不一样的编程模型,许多数据密集型的计算任务能够被同时分配给单机多核或多机多处理器进行并行处理,从而有可能大幅度缩减计算时间。目前在集群计算领域普遍使用MPI来进行并行化,在单机领域普遍使用OpenMP进行化,本文针对基于等价对的二值图像连通域标记算法的进行了并行化设计,利用不一样的并行编程模型分别实现了不一样的并行算法,并经过实验对利用不一样并行编程模型所实现的连通域标记算法进行了性能对比分析。编程
顾名思义,二次扫描串行算法步骤包含两部分。数组
a)标记post
b)等价关系创建性能
利用并查集链表进行标记更新。测试
二次扫描的串行算法中,非直接相邻的各像元数据之间是无关的,将图像分割为数据块后,对于各个数据块之间的主体运算也是独立无关的,可并行性较高,所以可经过对图像进行分块来加快计算时间、提升计算效率。大数据
a)各个进程分别使用串行算法计算 url
b)各个进程将各块的标记值惟一化spa
将1到n-1进程中比较得到的等价对数组统一发送给0进程,0进程生成并查集链表。
e)广播全局并查集链表,各进程更改标记值
主进程广播全局并查集链表,各进程接收后更新标记值。
并行算法详细流程图。
MPI版本和OpenMP版本的并行算法。
CPU:两颗Intel(R) Quad Core E5645 Xeon(R) CPU,共12核;
内存:80GB ;操做系统:Linux CentOS 64位。
CPU:两颗Intel(R) Quad Core E5645 Xeon(R) CPU,共12核;
内存:32GB;操做系统:Linux CentOS 64位;
节点间文件系统:Network File System (NFS)。
缘由:并查集链表的影响。
连通域标记算法不少时间用于对并查集链表进行大量查询和插入操做。
OpenMP编译制导语句会影响编译结果,这也能够解释单线程OpenMP程序比串行程序慢这一现象。
连通域标记算法的并行化研究,马益杭、占利军、谢传节、秦承志,《地理与地理信息科学》