-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathREADME.txt
46 lines (38 loc) · 3.95 KB
/
README.txt
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
注意:当工程路径改变时,程序里面的几个路径也要相应的更改(棋盘图的路径以及保存标定后得到的参数的路径,有这几个地方要改:line 66/196/206/221/230/251/295/507);
双目情况下,不加光流只用背景差分法时,噪点比较多,会出现目标检测错误!
这个.txt文件是对本程序的功能及作用的说明:
这个程序用双目进行目标追踪的。
具体过程如下:
双目追踪的步骤::立体标定、立体校正、立体匹配、前景提取、目标追踪
最开始使用高斯模型提取目标前景,后面的步骤进入了光流法:
1、立体标定(棋盘格标定):这个程序是在没对两个相机分别进行标定的时候进行立体标定的;
立体标定的时候会得到两个相机的内参数和畸变参数,还有两个相机的旋转和平移矩阵(这里是两个相机摆放位置的旋转和平移矩阵);
程序里还有对校正效果进行验证的步骤;
这里标定是用棋盘图像进行标定。
2、立体校正:立体校正要用到前面得到的内参数和畸变参数,旋转和平移矩阵;校正主要是对左右两幅图像进行极线对齐(将两幅图像行对齐)
校正之后会得到左右两幅图像校正后的图像,并得到两幅图像校正后的ROI
将校正后的ROI进行裁剪之后,用于立体匹配;
读入视频(可以是本地视频,也可以是摄像头读入的视频)后,用立体标定得到的参数进行校正,对校正后的ROI区域进行裁剪;
将裁剪后得到的图像用于后续操作;
3、立体匹配:比较了几种立体匹配算法,确定了使用块匹配方法进行立体匹配;因为其他的方法耗时太长,很难达到实时的效果;
块匹配效果相对来说效果差些,但实时性很好;
用第2步裁剪得到的图像进行立体匹配,得到视差图;
将视差图缩小(缩小也是为了实时性),用高斯背景模型获得前景图像;
4、利用裁剪后的左边的图像(右边的图像也可以)计算光流,将该图像缩小与视差图缩小的比例相同;
利用FlowFarneback算法计算视频的光流;由于计算光流比较耗时,所以在计算光流之前将原始图像缩小为原来的1/4,
加快处理速度,以达到实时的目的。
将缩小的图像转换为灰度图,计算光流,计算出图像的光流之后,将光流图转换为灰度图;
再进行阈值处理(这里的阈值要自己调,看在什么阈值范围效果最好)得到目标前景;
5(1)将第3步根据视差图获得的背景图像和第4步由光流法获得的背景图像用“与(&)”运算融合,得到两种方法获得的前景图的公共部分(可以去除误检测);
(2)再对得到的前景进行滤波去除噪声;
6、去除噪声后,对目标前景进行形态学滤波处理(膨胀去除孔洞,腐蚀去除噪点),得到比较好的目标前景;
7、查找处理好的前景的轮廓,并对轮廓按面积大小从大到小进行排序;
8、剔除面积较小的轮廓,获得剩余轮廓的外接矩形,将其作为后面求图像直方图的掩码;
9、将读进来的帧转换为HSV颜色空间,求得掩码范围内的 H通道直方图(因为CamShift是根据颜色属性进行追踪);
10、根据上面求得的直方图在hsv颜色空间的图像上求取反向映射;
11、最后将第4步中的矩形(初始化位置)和第6步中的反向映射作为CamShift追踪的参数,进行追踪;
12、将原轮廓外接矩形和CamShift返回的旋转矩形(不是水平的)的外接矩形,进行与运算得到的最终的矩形就是追踪的结果;
上面2-8步都是在缩小的帧中进行处理。
13、将得到的结果绘制到原始帧中;
这一步是将在缩小的帧中找到的目标再还原到原始帧的大小再绘制到原始帧中!
14、程序运行结束!