@dragonfive
2016-11-20T08:27:42.000000Z
字数 1414
阅读 1211
计算机视觉
收集数据
来自网络marrineTraffic的船只做证样本
我把待检测图像的分辨率降低到1/10后才快速地得到这个结果 因为我用的正样本的分辨率是 128*64 而待检测的图像分辨率是 4224*2376 差距太大
核心函数
hog.detectMultiScale(img, found, 0.4, cv::Size(8, 8), cv::Size(4, 4), 1.05, 30);
第一个参数是原图片
第二个参数是返回的窗口
第三个参数是判断当前这个窗口离SVM分界面的距离相关的阈值,越大检测出来的窗口越少
第四个参数是移动尺寸,是HOG特征的块大小的整数倍
第五个参数是图像边缘填充大 小
第六个参数是窗口扩张比例
第七个参数是检测的窗口间认为是一个窗口的阈值
对于比较大的船检测出的窗口比较多 经常一个船身上有许多窗口留下来,这是因为在遍历窗口的时候设置的判断两个窗口是否是同一物体的阈值比较小
hog.detectMultiScale(img, found, 0.4, cv::Size(8, 8), cv::Size(4, 4), 1.05, 30);
调整最后一个参数到很大,这个参数就是上面说的阈值,但是如果设置得太大,许多船又连一个窗口都检测不出来,如果只是调整参数,达到的折衷效果并不理想,见下面的效果。如果想达到更好的效果,可能需要自己写窗口筛选算法,这个工作需要大量的先验知识。
结果:
如果图片中有多个船只,而把最后一个参数设置得太大就会只检测到其中一部分。这时候最后一个参数设置得小一点反而效果会比较好,下面是设置为4的结果
下面是设置为30的结果
现在就产生了一对矛盾,对于比较大的船(在图片中占比大的船)要求最后窗口合并阈值尽量大
对于图片中有多个船只的,要求这个参数小一点。
发现结果与图像的分辨率有很大的关系
Why do linear SVMs trained on HOG features perform so well?
Histogram of Oriented Gradients and Object Detection
SVM classifier based on HOG features for “object detection” in OpenCV
Training custom SVM to use with HOGDescriptor in OpenCV
Opencv 3 SVM training
HOG目标检测专题博客
目标检测的图像特征提取之(一)HOG特征
利用Hog特征和SVM分类器进行行人检测
HOG特征与opencv类实现
OpenCV HOGDescriptor 参数图解
OpenCV中的HOG+SVM物体分类
opencv下自带例子总结
学习OpenCV——HOG+SVM
HOG+SVM行人检测识别的两种方法
OpenCV 2.4+ C++ 行人检测
libsvm使用专题
svm专题博客
github上的相关例子
CodeForge上的例子
DaHoC/trainHOG: Example program showing how to train your custom HOG detector using openCV
https://github.com/DaHoC/trainHOG