matlab dpm目标检测,DPM目标识别 windows 下配置

DPM(Deformable Parts

Model)

Reference:

Object detection with discriminatively trained

partbased models. IEEE Trans. PAMI, 32(9):1627–1645,

2010.

"Support Vector Machines for Multiple-Instance

Learning,"Proc. Advances in Neural Information Processing

Systems,2003.

最近在研究车辆跟踪,其中对粒子滤波跟踪以及CT跟踪做了相关实验和测试,感觉都不是很理想,所以,考虑到先检测车辆再对检测出来的车辆进行匹配相结合的一种跟踪方法,对于车辆检测方法,打算采用adboost和svm结合的算法检测,即:先通过adboost粗检测出车辆目标,然后通过svm进行二次精确识别。针对该方法,首先要制作车辆样本,之前是手动扣去一些,后来网上看到一种基于DPM的目标检测方法,所以就看了一下,网上(http://cs.brown.edu/~pff/latent-release4/)下载了DPM源码(linux下matlab版本),而本人的电脑只能在windows下运行,所以就很无语,但是经过在网上的翻阅,终于实现了windows

版本的DPM,其中,主要是借鉴:xun悟空博主的经验。下面就具体的操作做一个简单的介绍:

1、解压voc-release4.01.tgz......

2、修改dt.cc,fconv.cc,features.cc,getdetections.cc,resize.cc的后缀.cc为.cpp;

3、在修改后的dt.cpp中添加 #define int32_t int

blog_4af4d81f0101dk38.html

a4c26d1e5885305701be709a3d33442f.png

4、在features.cpp和resize.cpp中加入

#define bzero(a, b) memset(a, 0, b)

int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }

a4c26d1e5885305701be709a3d33442f.png

5、resize.cpp中

将alphainfo ofs[len]; 改成struct alphainfo *ofs

= (struct alphainfo *)malloc(sizeof(struct alphainfo)*len);

在该函数的结尾要free(ofs);

a4c26d1e5885305701be709a3d33442f.png

6、在compile.m中配置如下图:

a4c26d1e5885305701be709a3d33442f.png

7、经过以上步骤,就可以编译了,在matlab命令界面上运行compile.m,当没有错误出现的话,说明编译成功,此时就可以运行demo.m了,如果出现编译错误,可以根据对应的错误修正代码(应该是windows变量定义问题,这个只要把变量的定义放在函数操作前就能解决)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DPM目标检测算法可以用于检测各种物体,包括树木。但是,由于不同的树木形状和大小差别较大,因此需要针对具体的树木进行模型训练和参数调整,才能得到更好的检测效果。在这里给出一个基于DPM目标检测算法的树木检测Python源代码,供参考。 ```python import cv2 import numpy as np from skimage import transform as tf # 加载模型 model = cv2.dpm.readDPM('tree.dpm') # 定义滑动窗口大小 winSize = (64, 128) # 定义检测阈值 thresh = 0.5 # 加载测试图片 img = cv2.imread('tree.jpg') # 定义图像金字塔 scale = 1.2 pyramid = [img] for i in range(5): pyramid.append(cv2.resize(pyramid[-1], (int(pyramid[-1].shape[1]/scale), int(pyramid[-1].shape[0]/scale)))) # 定义滑动窗口步长 step = 8 # 定义横向和纵向滑动窗口数量 nx = int((img.shape[1]-winSize[0])/step) + 1 ny = int((img.shape[0]-winSize[1])/step) + 1 # 遍历所有滑动窗口 for i in range(ny): for j in range(nx): # 截取当前滑动窗口 x1 = j*step y1 = i*step x2 = x1 + winSize[0] y2 = y1 + winSize[1] roi = img[y1:y2, x1:x2] # 对滑动窗口进行金字塔缩放 for k in range(6): resized_roi = cv2.resize(roi, (int(winSize[0]/scale**k), int(winSize[1]/scale**k))) # 对当前滑动窗口进行HOG特征提取 hog = cv2.HOGDescriptor(winSize, (16,16), (8,8), (8,8), 9) features = hog.compute(resized_roi) # 对当前滑动窗口进行分类 score = model.predict(features) # 如果分类得分超过阈值,则认为检测到目标 if score > thresh: # 计算目标框的位置 x1 = int(x1/scale**k) y1 = int(y1/scale**k) x2 = int(x2/scale**k) y2 = int(y2/scale**k) # 绘制目标框 cv2.rectangle(img, (x1,y1), (x2,y2), (0,255,0), 2) # 显示检测结果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这个代码使用了一个名为"tree.dpm"的模型进行检测,可以根据实际需要进行模型训练和参数调整。同时,需要使用一些树木的正样本和负样本进行模型训练,以确保检测效果的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值