MeanShift均值漂移目标追踪算法源码


网上下载很多均值漂移算法,代码一样,但运行老是出错,这里是自己修改后的,成功运行,运行后先在第一帧Figure里截取要追踪的汽车目标即可,是在Matlab2016b上运行的,代码简单,适合学习。
资源截图
代码片段和文件信息
%mean shift tracking
function rgb_meanshift()
clear;
rgb=imread(‘0329.jpg‘);%读取第一帧图片
figure(1)imshow(rgb);
[temprect]=imcrop(rgb);%鼠标截取需要跟踪的目标,rect=[xywh]分别是左上角坐标和图片长宽
[abc]=size(temp);
%目标框中心点坐标
tic_x=rect(1)+rect(3)/2;
tic_y=rect(2)+rect(4)/2;
m_wei=zeros(ab);%权值矩阵初始化
%定义h为搜索窗口的大小,也可称为核函数带宽,包括长度和宽度,分别为目标长度和宽度的一半,h(xy)。
%这里的h是一个固定值,即跟踪过程中搜索窗口的大小是不变的,这导致 Mean-Shift跟踪算法在跟踪过程中不能适应目标尺寸的变化,对大小有改变的目标产生定位不准确。
y(1)=a/2;
y(2)=b/2;
h=y(1)^2+y(2)^2;%带宽模的平方
%计算权值矩阵
for i=1:a
    for j=1:b
        dist=(i-y(1))^2+(j-y(2))^2;%样本点距离中心点模的平方
        m_wei(ij)=1-dist/h;%Epannechnikov核函数
    end
end
C=1/sum(sum(m_wei));%归一化系数

%计算目标权值直方图
hist1=zeros(14096);
for i=1:a
    for j=1:b
        %rgb颜色空间量化为16*16*16 bins,降维来简化彩色颜色直方图
        %把R,G,B三个通道0-255区间内的值都分为16个区间,即将0-255转换为0-15
        q_r=fix(double(temp(ij1))/16);%fix为趋近0取整函数
        q_g=fix(double(temp(ij2))/16);
        q_b=fix(double(temp(ij3))/16);
        q_temp=q_r*256+q_g*16+q_b;%设置每个像素点红色、绿色、蓝色分量所占比重,将三维向量映射为一维的
        hist1(q_temp+1)=hist1(q_temp+1)+m_wei(ij);%计算直方图统计中每个像素点占的权重
    end
end
hist1=hist1*C;
rect(3)=ceil(rect(3));
rect(4)=ceil(rect(4));
jishu=1;
%读取序列图像
for i=0329:0380
       Im=imread([‘0‘int2str(i)‘.jpg‘]);
       jishu=jishu+1;
       %Im=medfilt2(Im);
       num=0;
       Y=[22];
       tic
    %mean shift迭代
    while((Y(1)^2+Y(2)^2>0.5)&num<20)%迭代条件
       num=num+1;
       temp1=imcrop(Imrect); 
       %计算侯选区域直方图
       %hist2=C*wei_hist(temp1m_weiab);%target candidates pu                                                                                                                                                                                                                                                                                                                                                                                                   
       hist2=zeros(14096);
       for i=1:a
         for j=1:b
        q_r=fix(double(temp1(ij1))/16);
        q_g=fix(double(temp1(ij2))/16);
        q_b=fix(double(temp1(ij3))/16);
        q_temp1(ij)=q_r*256+q_g*16+q_b;
        hist2(q_temp1(ij)+1)= hist2(q_temp1(ij)+1)+m_wei(ij);
         end
       end
       hist2=hist2*C;
       %显示直方图
       figure(2);
       subplot(121);
       plot(hist2);
       hold on;
       %bdist1 = bhattacharrya(hist1 hist2)
       w=weights(hist1hist2);
       %w=sqrt(hist1./hist2);
       
       %变量初始化
       sum_w=0;
       xw=[00];
       for i=1:a
           for j=1:b
              %bitwei(ij)=w(uint32(q_temp1(ij))+1);
               sum_w=sum_w+w(uint32(q_temp1(ij))+1);
               xw=xw+w(uint32(q_temp1(ij))+1)*[i-y(1)-0.5j-y(2)-0.5];
           end
       end
       Y=xw/sum_w;
       %中心点位置更新
       rect(1)=rect(1)+Y(2);
       rect(2)=rect(2)+Y(1);
    end
    %跟踪轨迹矩阵%
    tic_x=[tic_x;rect(1)+rect(3)/2];
    tic_y=[tic_y;rect(2)+rect(4)/2];
       v

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-26 08:45  MeanShiftTracking
     文件       51271  2008-11-01 15:15  MeanShiftTracking329.jpg
     文件       51303  2008-11-01 15:15  MeanShiftTracking330.jpg
     文件       51393  2008-11-01 15:15  MeanShiftTracking331.jpg
     文件       51406  2008-11-01 15:15  MeanShiftTracking332.jpg
     文件       51413  2008-11-01 15:16  MeanShiftTracking333.jpg
     文件       51313  2008-11-01 15:16  MeanShiftTracking334.jpg
     文件       51406  2008-11-01 15:16  MeanShiftTracking335.jpg
     文件       51294  2008-11-01 15:16  MeanShiftTracking336.jpg
     文件       51331  2008-11-01 15:16  MeanShiftTracking337.jpg
     文件       51379  2008-11-01 15:16  MeanShiftTracking338.jpg
     文件       51210  2008-11-01 15:16  MeanShiftTracking339.jpg
     文件       51337  2008-11-01 15:16  MeanShiftTracking340.jpg
     文件       51169  2008-11-01 15:16  MeanShiftTracking341.jpg
     文件       51281  2008-11-01 15:16  MeanShiftTracking342.jpg
     文件       51367  2008-11-01 15:16  MeanShiftTracking343.jpg
     文件       51297  2008-11-01 15:16  MeanShiftTracking344.jpg
     文件       51305  2008-11-01 15:16  MeanShiftTracking345.jpg
     文件       51435  2008-11-01 15:16  MeanShiftTracking346.jpg
     文件       51305  2008-11-01 15:16  MeanShiftTracking347.jpg
     文件       51378  2008-11-01 15:16  MeanShiftTracking348.jpg
     文件       51562  2008-11-01 15:16  MeanShiftTracking349.jpg
     文件       51565  2008-11-01 15:16  MeanShiftTracking350.jpg
     文件       51663  2008-11-01 15:16  MeanShiftTracking351.jpg
     文件       51619  2008-11-01 15:16  MeanShiftTracking352.jpg
     文件       51456  2008-11-01 15:16  MeanShiftTracking353.jpg
     文件       51647  2008-11-01 15:16  MeanShiftTracking354.jpg
     文件       51472  2008-11-01 15:16  MeanShiftTracking355.jpg
     文件       51584  2008-11-01 15:16  MeanShiftTracking356.jpg
     文件       51871  2008-11-01 15:16  MeanShiftTracking357.jpg
     文件       51759  2008-11-01 15:16  MeanShiftTracking358.jpg
............此处省略95个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)