
图像处理之基于图的广度优先搜索组件标记算法
一:图的遍历与广度优先搜索算法
图的遍历算法最常用是广度优先搜索算法(BFS)与深度优先搜索算法(DFS),从一个的
节点开始,访问相邻的所有子节点,接着从这些子节点出发访问下个相邻子节点,如
此重复直到所有节点都被访问。
二:二值图像组件标记实现流程
如果把图像的每个像素点看成为图的一个节点,则二值图像中的每个连通区域都可以
看成一个无向图,只要遍历图像中的每个像素点就可以找出每个连通区域,实现对二
值图像连通区域组件的标记。大致步骤为:
1. 扫描图像的每个像素点,获得位置信息与图像的灰度值强度(0~255)成为图的节点
2. 对每个节点,初始化状态与获取它的上下左右四个邻域节点
1. 遍历每个节点- BFS
2. 输出结果与显示
三:运行效果
四:关键程序实现代码
图的搜索算法,节点状态有三种,未访问(Unvisit),已经访问(Visited),已经标记(Marked)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
package com.gloomyfish.image.watershed;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Breath First Search for graphics
* @author gloomyfish
*
*/
public class BFSAlgorithm {
private List<PixelPoint> pixelList = null;
private int grayLevel = 1;
public int getGrayLevel() {
return grayLevel;
}
public int getTotalOfLabels()
{
Map<Integer, Integer> labelMap = new HashMap<Integer, Integer>();
for(PixelPoint p : pixelList)
{
if(p.getValue() >= grayLevel)
{
if(labelMap.containsKey(p.getLabel()))
{
Integer count = labelMap.get(p.getLabel());
count += 1;
labelMap.put(p.getLabel(), count);
}
else
{
labelMap.put(p.getLabel(), new Integer(1));
}
}
}
Integer[] keys = labelMap.keySet().toArray(new Integer[0]);
for(Integer key : keys)
{
System.out.println("Label index : " + key);
}
System.out.println("total labels : " + labelMap.size());
return labelMap.size();
}
public void setGrayLevel(int grayLevel) {
this.grayLevel = grayLevel;
}
public BFSAlgorithm(List<PixelPoint> pixelList)
{
this.pixelList = pixelList;
grayLevel = 1; // front color - target pixel
}
public void process()
{
if(this.pixelList == null) return;
int label = 1;
for(PixelPoint pp : pixelList)
{
if(pp.getValue() >= grayLevel)
{
if(pp.getStatus() == PixelPoint.UNMARKED)
{
pp.setStatus(PixelPoint.VISITED);
pp.setLabel(label);
MyQueue mq = new MyQueue(10000);
for(PixelPoint npp : pp.getNeighbours())
{
if(npp.getStatus() == PixelPoint.UNMARKED && npp.getValue() >= grayLevel)
{
npp.setStatus(PixelPoint.MARKED);
mq.enqueue(npp);
}
}
while(!mq.isEmpty())
{
PixelPoint obj = (PixelPoint)mq.dequeue();
if(obj.getStatus() == PixelPoint.MARKED)
{
obj.setLabel(label);
obj.setStatus(PixelPoint.VISITED);
}
for(PixelPoint nnpp : obj.getNeighbours())
{
if(nnpp.getStatus() == PixelPoint.UNMARKED && nnpp.getValue() >= grayLevel)
{
nnpp.setStatus(PixelPoint.MARKED);
mq.enqueue(nnpp);
}
}
}
label++;
}
}
}
}
}
|
图像组件标记算法代码:
1
2
3
4
5
6
|
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA 数据分析师证书含金量几何?一文为你讲清楚 在当今数字化时代,数据成为了企业决策和发展的重要依据。数据分析师这一职业 ...
2025-06-13CDA 数据分析师:数字化时代的关键人才 在当今数字化浪潮席卷全球的时代,数据已然成为驱动企业发展、推动行业变革的核心要素。 ...
2025-06-13CDA 数据分析师报考条件全解析 在大数据和人工智能时代,数据分析师成为了众多行业追捧的热门职业。CDA(Certified Data Analyst ...
2025-06-13“纲举目张,执本末从。”若想在数据分析领域有所收获,一套合适的学习教材至关重要。一套优质且契合需求的学习教材无疑是那关键 ...
2025-06-092025 年,数据如同数字时代的 DNA,编码着人类社会的未来图景,驱动着商业时代的运转。从全球互联网用户每天产生的2.5亿TB数据, ...
2025-05-27CDA数据分析师证书考试体系(更新于2025年05月22日)
2025-05-26解码数据基因:从数字敏感度到逻辑思维 每当看到超市货架上商品的排列变化,你是否会联想到背后的销售数据波动?三年前在零售行 ...
2025-05-23在本文中,我们将探讨 AI 为何能够加速数据分析、如何在每个步骤中实现数据分析自动化以及使用哪些工具。 数据分析中的AI是什么 ...
2025-05-20当数据遇见人生:我的第一个分析项目 记得三年前接手第一个数据分析项目时,我面对Excel里密密麻麻的销售数据手足无措。那些跳动 ...
2025-05-20在数字化运营的时代,企业每天都在产生海量数据:用户点击行为、商品销售记录、广告投放反馈…… 这些数据就像散落的拼图,而相 ...
2025-05-19在当今数字化营销时代,小红书作为国内领先的社交电商平台,其销售数据蕴含着巨大的商业价值。通过对小红书销售数据的深入分析, ...
2025-05-16Excel作为最常用的数据分析工具,有没有什么工具可以帮助我们快速地使用excel表格,只要轻松几步甚至输入几项指令就能搞定呢? ...
2025-05-15数据,如同无形的燃料,驱动着现代社会的运转。从全球互联网用户每天产生的2.5亿TB数据,到制造业的传感器、金融交易 ...
2025-05-15大数据是什么_数据分析师培训 其实,现在的大数据指的并不仅仅是海量数据,更准确而言是对大数据分析的方法。传统的数 ...
2025-05-14CDA持证人简介: 万木,CDA L1持证人,某电商中厂BI工程师 ,5年数据经验1年BI内训师,高级数据分析师,拥有丰富的行业经验。 ...
2025-05-13CDA持证人简介: 王明月 ,CDA 数据分析师二级持证人,2年数据产品工作经验,管理学博士在读。 学习入口:https://edu.cda.cn/g ...
2025-05-12CDA持证人简介: 杨贞玺 ,CDA一级持证人,郑州大学情报学硕士研究生,某上市公司数据分析师。 学习入口:https://edu.cda.cn/g ...
2025-05-09CDA持证人简介 程靖 CDA会员大咖,畅销书《小白学产品》作者,13年顶级互联网公司产品经理相关经验,曾在百度、美团、阿里等 ...
2025-05-07相信很多做数据分析的小伙伴,都接到过一些高阶的数据分析需求,实现的过程需要用到一些数据获取,数据清洗转换,建模方法等,这 ...
2025-05-06以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda.cn/g ...
2025-04-30