clshuaige 1 неделя назад
Родитель
Сommit
ed30ca9e3f
3 измененных файлов с 91 добавлено и 12 удалено
  1. 91 0
      README.md
  2. BIN
      image.png
  3. 0 12
      main.cpp

+ 91 - 0
README.md

@@ -1,2 +1,93 @@
 # abandoned-object-detection-algo
 
+## 基于双背景混合高斯建模的遗留物检测
+
+### 混合高斯建模
+
+##### 基本原理:
+
+假设数据由多个高斯分布的线性组合生成;
+
+在视频图像中,利用一定数量的帧图像,为每个像素初始化**由多个高斯分布线性组合的模型**;
+
+对于每个新的检测帧,通过比对与初始化模型差异,判断是否属于**前景**,再根据策略进行**背景更新**
+
+##### 双背景建模:
+
+图中左边部分描述了双背景建模、前景检测以及遗留物提取的过程
+
+长时间背景(Long-Term background):预设较慢的更新速度,使得大部分新增加的物体都会被认为是前景;
+
+短时间背景(Short-Term background):预设较快的更新速度,使得短暂静止的物体不会被检测为前景;
+
+两者之差就认为是遗留物
+
+![alt text](image.png)
+
+##### 背景建模基本参数:
+
+```cpp
+double short_term_rate = 0.01; // short-term 更新速度
+int short_term_history = 200; // short-term history 初始化所采用的帧数
+double long_term_rate = 0.0005; // long-term 更新速度
+int long_term_history = 5000; // long-term history 初始化所采用的帧数
+```
+
+##### 遗留物判断逻辑:
+
+将每一个从双背景消除中提取出来的前景物,绘制一个候选框
+
+为每一个候选框构建以下结构体
+
+```cpp
+struct proposal{
+    int x, y, w, h;
+    int life; // 生命周期,以帧为单位
+    int status; // 状态,用于处理
+};
+```
+
+1. 初始化proposal list;
+
+2. 出现新的proposal时,设定life=10, status=0;
+
+3. 将该proposal与list中的每个候选框进行iou匹配:
+
+   ​	if iou < iou_threshold:
+
+   ​		set proposal.status = -1;认为有重复
+
+   ​		list[i].life++; list中重叠的候选框life+1,即重复出现一帧
+
+   ​		if list[i].status==2: 
+
+   ​			continue; 表明该框曾经被判定为遗留物,不需要再次检测
+
+   ​		else: set list[i].status = 1;表明该框处于活跃状态
+
+   if proposal.status==0;
+
+   ​	list.push(proposal);
+
+4. 遍历list:
+
+   if list[i].status==1 and list[i].life > life_threshold: 认为该框存在一定时间,视为遗留物
+
+   ​	detect(list[i]);
+
+   ​	list[i].status=2;
+
+   else:
+
+   ​	list[i].life--
+
+   ​	if list[i].life==0: 认为该框不活跃,即没有重复出现该候选框
+
+   ​		list.erase(i); 移除
+
+   
+
+   
+
+
+


+ 0 - 12
main.cpp

@@ -104,18 +104,6 @@ int main() {
 
     // Initialize variables
 
-
-    // model initialization
-    // 加载clip的onnx模型
-    printf("Loading model...\n");
-    // auto ctx = clip_model_load(model_path, 1);
-    // if (!ctx) {
-    //     printf("%s: Unable  to load model from %s", __func__, model_path);
-    //     return 1;
-    // }
-
-    // printf("Model loaded\n");
-
     // proposal List
     vector<proposal> proposals;
     // loop through video