ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:21.84KB ,
资源ID:19496519      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19496519.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于meanshift算法的图像处理Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于meanshift算法的图像处理Word文档下载推荐.docx

1、int i, j, opti, optj;SINT16 scale3=-3, 3, 0;FLOAT32 dist, optdist;SINT16 h, w, optX, optY;/try no-scalingFindNextFixScale(frame);/找出目标的下一个大致范围optdist=LastDist;optX=m_sTrackingObjectTablem_cActiveObject.X;optY=m_sTrackingObjectTablem_cActiveObject.Y;/try one of the 9 possible scalingi=rand()*2/RAND_M

2、AX;j=rand()*2/RAND_MAX;h=m_sTrackingObjectTablem_cActiveObject.H;w=m_sTrackingObjectTablem_cActiveObject.W;if(h+scalei10 & w+scalej h+scaleim_nImageHeight/2 & w+scalejm_nImageWidth/2) m_sTrackingObjectTablem_cActiveObject.H=h+scalei; m_sTrackingObjectTablem_cActiveObject.W=w+scalej; FindNextFixScale

3、(frame); if( (dist=LastDist) n, dist); else /no scaling is better m_sTrackingObjectTablem_cActiveObject.X=optX; m_sTrackingObjectTablem_cActiveObject.Y=optY; m_sTrackingObjectTablem_cActiveObject.H=h; m_sTrackingObjectTablem_cActiveObject.W=w;TotalDist+=optdist; /the latest distance);这里仍然在跟踪的基础上讲解me

4、an shift。首先还是把mean shift的原理用数学公式说一下吧。1、目标模型,算法采用的是特征值的加权概率分布来描述目标模型。这应该是模式识别中主要描述目标的模型,不同于自动控制理论中采用的状态方程。目标模型共m个特征值(可以理解为像素灰度值)其中X0是窗口中心点向量值(可能为RBG 向量或者灰度值), Xi 是窗口内第i 点向量值。C 为归一化常数,保障q1+q2+q3+qm=1,H 为核函数的带宽向量。M 为特征值的个数,对应于图像处理可以理解为灰度等级划分的个数,从而特征值u 为对应的灰度等级。d 函数为脉冲函数,保证只有具有u 特征值的像素才对概率分布作出贡献。从而k函数可以

5、理解为u 灰度值的一个加权频数。2、 匹配对象,也采用特征值加权概率分布其中,Y 为匹配对象的中心, Xi 是匹配窗口内第i 点向量值, Hh 为匹配窗口的核函数带宽向量。 Ch 为匹配窗口特征向量的归一化常数。3、 匹配对象与目标模型的相似程度,相似函数可采用Bhattacharyya 函数4、 匹配过程就是寻找相似函数最大值的寻优过程,Mean-Shift 采用的是梯度下降法。首先将(Y) 在(Y0)附近进行泰勒级数展开,取前两项。即:要使得(Y) 向最大值迭代,只要Y 的搜索方向与梯度方向一致即可,通过求导可得到Y0的梯度方向为:为权值。因此如果如下确定Y1,那么Y1-Y0将与梯度方向一

6、致。以上为mean shift的数学原理。有关文字的叙述已经在上一篇中提到了。用mean shift来跟踪属于确定性算法,粒子滤波器属于统计学方法。meanshift跟踪算法相对于粒子滤波器来说可能实时性更好一些,但是跟踪的准确性在理论上还是略逊于粒子滤波器的。mean shift跟踪的的实质就是通过对应的模板来确定目标的下一个位置。通过迭代找到新的中心点(即是目标的新的位置点)。有关跟踪的code如下所示:/*Bilkent University:Mean-shift Tracker based Moving Object Tracker in VideoVersion: 1.0Compil

7、er: Microsoft Visual C+ 6.0 (tested in both debug and release mode)Modified by Mr Zhou*/#include ObjectTracker.hutils.h#include stdio.hstdlib.h/*#define GetRValue(rgb) (UBYTE8) (rgb) #define GetGValue(rgb) (UBYTE8) (ULONG_32) (rgb) 8) #define GetBValue(rgb) (UBYTE8) (rgb) 16) */#define RGB(r, g ,b)

8、(ULONG_32) (UBYTE8) (r) | (UBYTE8) (g) 8) | (ULONG_32) (UBYTE8) (b) 16) #define min(a, b) (a) (b) #define MEANSHIFT_ITARATION_NO 5#define DISTANCE_ITARATION_NO 1#define ALPHA 1#define EDGE_DETECT_TRESHOLD 32/1 给定目标的初始位置和尺寸, 计算目标在图像中的直方图;2 输入新图像, 迭代直到收敛:计算图像上对应区域的新直方图;新直方图与目标直方图比较,计算权重;根据权重,计算图像上对应区域

9、的形心/质心;根据形心,修正目标位置;直方图分为两部分, 每部分大小4096,RGB的256*256*256种组合, 缩减为16*16*16=4096种组合. 如果目标区域的点是边缘点, 则计入直方图的后一部分, 否则计入直方图的前一部分. CObjectTracker:CObjectTracker(INT32 imW,INT32 imH,IMAGE_TYPE eImageType)m_nImageWidth = imW;m_nImageHeight = imH;m_eIMAGE_TYPE = eImageType;m_cSkipValue = 0;for (UBYTE8 i=0;iMAX_O

10、BJECT_TRACK_NUMBER;i+)/初始化各个目标 m_sTrackingObjectTablei.Status = false; for(SINT16 j=0;jHISTOGRAM_LENGTH;j+) m_sTrackingObjectTablei.initHistogramj = 0;m_nFrameCtr = 0;m_uTotalTime = 0;m_nMaxEstimationTime = 0;m_cActiveObject = 0;TotalDist=0.0;LastDist=0.0;switch (eImageType) case MD_RGBA: m_cSkipVal

11、ue = 4 ;break ; case MD_RGB:m_cSkipValue = 3 ; break ;CObjectTracker()/returns pixel values in format |0|B|G|R| wrt to (x.y)ULONG_32 CObjectTracker:GetPixelValues(UBYTE8 *frame,SINT16 x,SINT16 y)ULONG_32 pixelValues = 0;pixelValues = *(frame+(y*m_nImageWidth+x)*m_cSkipValue+2)|/0BGR *(frame+(y*m_nIm

12、ageWidth+x)*m_cSkipValue+1) 8| *(frame+(y*m_nImageWidth+x)*m_cSkipValue) 8) &/ *(frame+(y*m_nImageWidth+x)*m_cSkipValue) = UBYTE8(pixelValues 16) &/setpix32fsetpix8c(r, y, x, UBYTE8(pixelValues & 0xFF);setpix8c(g, y, x, UBYTE8(pixelValues setpix8c(b, y, x, UBYTE8(pixelValues / returns box color GetB

13、oxColor()switch(m_cActiveObject)case 0:pixelValues = RGB(255,0,0);break;case 1:pixelValues = RGB(0,255,0);case 2:pixelValues = RGB(0,0,255);case 3:pixelValues = RGB(255,255,0);case 4:pixelValues = RGB(255,0,255);case 5:pixelValues = RGB(0,255,255);case 6:pixelValues = RGB(255,255,255);case 7:pixelVa

14、lues = RGB(128,0,128);case 8:pixelValues = RGB(128,128,0);case 9:pixelValues = RGB(128,128,128);case 10:pixelValues = RGB(255,128,0);case 11:pixelValues = RGB(0,128,128);case 12:pixelValues = RGB(123,50,10);case 13:pixelValues = RGB(10,240,126);case 14:pixelValues = RGB(0,128,255);case 15:pixelValue

15、s = RGB(128,200,20);default:/初始化一个目标的参数 ObjectTrackerInitObjectParameters(SINT16 x,SINT16 y,SINT16 Width,SINT16 Height) m_sTrackingObjectTablem_cActiveObject.X = x; m_sTrackingObjectTablem_cActiveObject.Y = y; m_sTrackingObjectTablem_cActiveObject.W = Width; m_sTrackingObjectTablem_cActiveObject.H =

16、 Height; m_sTrackingObjectTablem_cActiveObject.vectorX = 0; m_sTrackingObjectTablem_cActiveObject.vectorY = 0; m_sTrackingObjectTablem_cActiveObject.Status = true; m_sTrackingObjectTablem_cActiveObject.assignedAnObject = false;/进行一次跟踪ObjeckTrackerHandlerByUser(IplImage *frame) /计算目标的初始直方图 /在图像上搜索目标/

17、Extracts the histogram of box/frame: 图像/histogram: 直方图/在图像frame中计算当前目标的直方图histogram/直方图分为两部分,每部分大小4096,/RGB的256*256*256种组合,缩减为16*16*16=4096种组合/如果目标区域的点是边缘点,则计入直方图的后一部分,/否则计入直方图的前一部分FindHistogram(IplImage *frame, FLOAT32 (*histogram)SINT16 i = 0;SINT16 x = 0;SINT16 y = 0;UBYTE8 E = 0;UBYTE8 qR = 0,qG

18、 = 0,qB = 0;/ ULONG_32 pixelValues = 0;UINT32 numberOfPixel = 0;IplImage* r, * g, * b;r = cvCreateImage( cvGetSize(frame), frame-depth, 1 );g = cvCreateImage( cvGetSize(frame), frame-b = cvCreateImage( cvGetSize(frame), frame-cvCvtPixToPlane( frame, b, g, r, NULL ); /divide color image into separate

19、 planes r, g, b. The exact sequence doesnt matter.for (i=0;i+) /reset all histogram histogrami = 0.0;/for all the pixels in the regionfor (y=max(m_sTrackingObjectTablem_cActiveObject.Y-m_sTrackingObjectTablem_cActiveObject.H/2,0);y=min(m_sTrackingObjectTablem_cActiveObject.Y+m_sTrackingObjectTablem_

20、cActiveObject.H/2,m_nImageHeight-1);y+) for (x=max(m_sTrackingObjectTablem_cActiveObject.X-m_sTrackingObjectTablem_cActiveObject.W/2,0);x=min(m_sTrackingObjectTablem_cActiveObject.X+m_sTrackingObjectTablem_cActiveObject.W/2,m_nImageWidth-1);x+) /边缘信息: 当前点与上下左右4点灰度差异是否超过阈值 E = CheckEdgeExistance(r, g, b,x,y); qR = (UBYTE8)pixval8c( r, y, x )/16;/quantize R component qG = (UBYTE8)pixval8c( g, y, x )/16;/quantize G component qB = (UBYTE8)pixval8c( b, y, x )/16;/quantize B component histogram4096*E+256*q

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1