Skip to content

Commit d474017

Browse files
committed
docs(selectivesearch): 算法总体流程解析
1 parent 04fa09f commit d474017

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

docs/imgs/selectivesearch-mind.png

111 KB
Loading

docs/选择性搜索-源码解析.md

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
*`GraphSegmentation`声明了图分割算法的公共函数
7171
*`SelectiveSearchSegmentationStrategy`声明了相似度度量策略的公共函数
7272
*`Region`实现了并查集,作用于区域合并
73-
*`Neighbor`定义了边
73+
*`Neighbor`定义了相邻区域对
7474

7575
![](./imgs/selectivesearchsegmentationstrategy.png)
7676

@@ -89,10 +89,12 @@
8989
* $k$:用于计算阈值函数τ,控制两个分量之间的差异必须大于其内部差异的程度
9090
* $\sigma$:作用于高斯滤波
9191

92-
## 函数流程
92+
## 算法流程
9393

9494
根据测试代码`samples/selectivesearchsegmentation.cpp`,总体函数流程图如下所示
9595

96+
![](./imgs/selectivesearch-mind.png)
97+
9698
1. 创建选择性搜索对象,输入原始图像,设置检测策略
9799
2. 处理图像,获取候选区域
98100
3. 绘制候选区域边框
@@ -151,4 +153,41 @@
151153

152154
### 第二步:区域检测
153155

154-
在预处理阶段设置了多个分组策略,
156+
区域检测操作在类`SelectiveSearchSegmentationImpl`的函数`process`中实现,步骤如下:
157+
158+
* 获取初始分割集
159+
* 计算分层分组区域
160+
* 组合所有区域并过滤重复区域
161+
162+
#### 获取初始分割集
163+
164+
基于不同颜色空间下的图像以及基于不同图分割参数的`GraphSegmentation`对象,调用函数`processImage`获取初始分割区域
165+
166+
#### 计算分层分组区域
167+
168+
* 计算初始分割区域个数
169+
* 计算初始分割区域大小
170+
* 计算初始分割区域所属边框坐标
171+
* 计算初始分割集中的相邻区域对
172+
173+
基于不同的分组策略,调用函数`hierarchicalGrouping`进行分层分组算法
174+
175+
1. 计算初始分割集中相邻区域对的相似度
176+
2. 基于相似度进行排序,合并相似度最高的区域对
177+
3. 重新计算新区域与相邻区域的相似度
178+
4. 重新排序,重复上述步骤,直到合并成一个区域
179+
5. 通过随机数和合并`level`重新计算每个区域的秩(`rank`
180+
181+
#### 组合所有区域并过滤重复区域
182+
183+
1. 组合所有分组区域
184+
2. 按秩排序
185+
3. 过滤重复区域
186+
187+
### 第三步:绘制候选区域边框
188+
189+
每次绘制`10`个区域,按`d`键增加`10`个,按`a`键减去`10`个,按`q`键退出
190+
191+
## 相似性度量
192+
193+

0 commit comments

Comments
 (0)