可能有些东西是文字叙述不清,若有疑问,请联系[email protected]
本程序使用的IDE是code::blocks,在ubuntu下运行可实现所有功能。具备简单的跨平台能力,只需做一些小改动就可以在VS上运行(opencv3.1或2.4皆可),但不可实现串口通信功能。
- getConfig.h 读取与写入配置头文件
- video.cfg 配置文件
- opticalFlow.h 光流法头文件,用于检测无人机
- myHead.hpp 自定义头文件,包含装甲检测和串口通信
- main.cpp 主要功能的实现
- 装甲检测,详见myHead.hpp中的装甲类Armors,每个成员函数都有注释,这是本程序最关键的一个
- 无人机检测,主要检测定背景下运动的前景,目前还有些局限
- 视频记录,在讲DEBUG注释掉后,每次运行都会生成avi文件,不会覆盖,请自行查看删除
- 串口通信,检测到无人机发送0xee,检测到装甲发送0x11到0xdd,代表第几行第几列,如0x5a表示目标在第5行第10列,由于只把画面分成13行13列,故只用到0xdd。
- 还有诸多细节请自行探索。
我想这才是最中要的。目前基本功能都能实现,但效果并不十分理想,需要改进的有如下几点:
- 识别准确率的提高,目前在特定光照下效果比较理想,但是光线过强时目标丢失严重。
- 预测精度的提高,目前的预测仅处于线性预测阶段,近估算出目标速度进行预测,效果基本没有。
- 针对目标运动过快的问题,可以提升处理速度,尝试采用cuda,也可以增加某种跟踪算法。
- 关于广角与细节的矛盾:采用广角的分辨率(本次采用的相机分辨率设置成1280x720就会变成广角模式,640x480是普通角度),视角广,但是目标变小了,识别就会变苦难(尤其是在远距离时,这个远距离也就3m远),但是为了处理速度,分辨率1280x720通常ZOOM_FACTOR参数调成0.5,这样分辨率又降下去了,所以解决方法1是采取2个普通角度相机,把图像拼起来;2是采用高分辨率广角,又不损失处理速度
- 画面分成13行13列,还是有些粗糙,这个可以进一步细分
- 无人机检测有待加强,这是临时加上去的,并没有仔细打磨