给定0-1矩阵求连通域程序复现理解

给定0-1矩阵求连通域_xunan003的博客-CSDN博客_连通域

求0-1矩阵连通域这篇文章方法讲的算是比较详细,但是程序由于我没学过C++,再加上编程经验很少,这篇博文给出的程序一致没怎么看懂,啃了两天终于有点眉目了,在此做一个总结,也跟小白们分享一下,希望也能对你们有帮助。

求连通域的方法分为三步

第一步:(打开冰箱)对一个二维矩阵,先求出每一行白色团的起始和终止坐标(列),并给每个团标记序列

第二步:合并密接团的标签,鉴别密接的方式是通过轨迹(列)重叠的方式,轨迹重叠,标签归化,若某团与两类不同的团发生密接,代表这两类团等价(初筛阶段以2个为标准),需要统一隔离。

第三步:对等价团进行汇总筛选,凡有交叠的统一归为一类,以此分为不同的感染群类。

给出了三段程序,分别对应上述的三个步骤。

void fillRunVectors(const Mat& bwImage, int& NumberOfRuns, vector<int>& stRun, vector<int>& enRun, vector<int>& rowRun)

void firstPass(vector<int>& stRun, vector<int>& enRun, vector<int>& rowRun, int NumberOfRuns,
    vector<int>& runLabels, vector<pair<int, int>>& equivalences, int offset)

void replaceSameLabel(vector<int>& runLabels, vector<pair<int, int>>&
    equivalence)

阅读程序的步骤

第一段程序

一、理解程序目的和实现方式

拿到每一段程序一定要完全搞清楚程序做了什么事情,是怎么实现的,如果没有详细说明怎么实现的,就需要猜测验证,否则程序会读的很痛苦,就像一篇不认识单词也不知所云的阅读理解。

第一段程序完成每一行白色团的起始和终止坐标,并给每个团标记序列。

1、如何标记坐标

第i行的第j1个点为白色团的起始坐标j2个点为终止坐标,就需要将j1压入start队列中,j2压入end队列中,并对应处其属于第i行。

2、如何分辨起始和终止坐标

起始点(1、第一列为白色像素;2、此列为白色像素,同时左列为黑色像素)

终止点(1、此列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值