meanshift优缺点和算法代码

更新时间:2023-07-20 19:05:31 阅读: 评论:0

meanshift 做跟踪的优缺点及其代码
  (2012-03-28 12:45:16)
转载▼
标签: 
转载
原文地址:meanshift 做跟踪的优缺点及其代码作者:千里8848
meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过不断迭代meanShift向量使得算法收敛于目标的真实位置,从而达到跟踪的目的。
传统的meanShift算法在跟踪中有几个优势:
(1)算法计算量不大,在目标区域已知的情况下完全可以做到实时跟踪;
(2)采用核函数直方图模型,对边缘遮挡、目标旋转、变形和背景运动不敏感。
同时,meanShift算法也存在着以下一些缺点:
(1)缺乏必要的模板更新;
(2)跟踪过程中由于窗口宽度大小保持不变,当目标尺度有所变化时,跟踪就会失败;
(3)当目标速度较快时,跟踪效果不好;
(4)直方图特征在目标颜色特征描述方面略显匮乏,缺少空间信息;
由于其计算速度快,对目标变形和遮挡有一定的鲁棒性,所以,在目标跟踪领域,meanShift算法目前依然受到大家的重视。但考虑到其缺点,在工程实际中也可以对其作出一些改进和调整;例如:
(1)引入一定的目标位置变化的预测机制,从而更进一步减少meanShift跟踪的搜索时间,降低计算量;
(2)可以采用一定的方式来增加用于目标匹配的“特征”;
(3)将传统meanShift算法中的核函数固定带宽改为动态变化的带宽;
(4)采用一定的方式对整体模板进行学习和更新;
代码如下,使用方法:先圈出要跟踪对象的初始位置,然后双击。输入为图片序列。
///////////////////////////////////////////////////////////////////////////////////////////
clo all;
clear all;
rgb = imread('0015.jpeg');
figure(1);
imshow(rgb);
[temp,rect] = imcrop(rgb);%交互式切图
[a,b,c] = size(temp);
%中心点位置
y(1) = a/2;面包车英语
y(2) = b/2;
%带宽
h = y(1)^2 + y(2)^2;
%用epanechnikov计算权值矩阵
t_weight = zeros(a,b);
for i = 1:a
    for j = 1:b
        dist = (i - y(1))^2 + (j - y(2))^2;
        t_weight(i,j) = 1 - dist/h;
    end
end
%归一化系数
C = 1/sum(sum(t_weight));
%计算跟踪目标直方图,16*16*16 bins
hist1 = zeros(1,4096);
for i = 1:a
    for j = 1:b
        t_r = fix(double(temp(i,j,1))/16);
        t_g = fix(double(temp(i,j,2))/16);
        t_b = fix(double(temp(i,j,3))/16);
        位颜色
        t_color = 256*t_r + 16*t_g + t_b;
        hist1(t_color + 1) = hist1(t_color + 1) + t_weight(i,j);
    end
end
hist1 = C*hist1;  %归一化直方图
%读取待跟踪序列
for k = 0015:0053
    Im = imread(['00',num2str(k),'.jpeg']);
    num = 0; %迭代次数
    Y = [2,2]; %移动向量
    %meanshift迭代
    while ((Y(1)^2 + Y(2)^2)>0.5) & (num < 20)
     传帮带工作总结   num = num + 1;
    开心的文案    temp1=imcrop(Im,rect); 
        hist2 = zeros(1,4096);%候选区域直方图
        for i = 1:a
            校车购车for j = 1:b
                m_r = fix(double(temp1(i,j,1))/16);
                m_g = fix(double(temp1(i,j,2))/16);
                m_b = fix(double(temp1(i,j,3))/16);
                m_color(i,j) = 256*m_r + 16*m_g + m_b;
           昂刺鱼烧豆腐     hist2(m_color(i,j) + 1) = hist2(m_color(i,j) + 1) + t_weight(i,j);
            end
        end
        hist2 = C * hist2;
误解的英语
        w = weight(hist1,hist2);
        %计算移动量
      摇晃的意思  sum_w = 0;
        xw = [0 0];
        for i = 1:a
            for j = 1:b
                sum_w = sum_w + w(m_color(i,j) + 1);
                xw = xw + w(m_color(i,j)+1)*[i-y(1),j-y(2)];
            end
        end
        Y = xw/sum_w;
        %中心点位置更新
        rect(1) = rect(1) + Y(2);
        rect(2) = rect(2) + Y(1);
    end
    %显示跟踪结果
    v1=rect(1);
    v2=rect(2);
    v3=rect(3);
    v4=rect(4);
    figure(2);
    clf;
    imshow(Im);
    hold on
    rectangle('Position',[rect(1) rect(2) rect(3) rect(4)],'EdgeColor','r');
end
///////////////////////////////////
function w = weight(hist1,hist2)
w = zeros(1,4096);
for i = 1:4096
    if hist2(i) ~= 0
        w(i) = sqrt(hist1(i)/hist2(i));
    el
        走访礼品w(i) = 0;
    end
end
return

本文发布于:2023-07-20 19:05:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089485.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:目标   跟踪   直方图   算法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图