您现在的位置:首页 >> 图像处理 >> 内容

基于meanshift算法的目标聚类和目标跟踪matlab仿真

时间:2022/12/24 16:19:06 点击:

  核心提示:A145包括程序操作录像+详细word设计文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5qal59u

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览





3.算法概述

        meanshift算法其实通过名字就可以看到该算法的核心,mean(均值),shift(偏移),简单的说,也就是有一个点 ,它的周围有很多个点  我们计算点  移动到每个点  所需要的偏移量之和,求平均,就得到平均偏移量,(该偏移量的方向是周围点分布密集的方向)该偏移量是包含大小和方向的。然后点  就往平均偏移量方向移动,再以此为新的起点不断迭代直到满足一定条件结束。

       中心点就是我们上面所说的  周围的小红点就是  黄色的箭头就是我们求解得到的平均偏移向量。那么图中“大圆圈”是什么东西呢?我们上面所说的周围的点  周围是个什么概念?总的有个东西来限制一下吧。那个“圆圈”就是我们的限制条件,或者说在图像处理中,就是我们搜索迭代时的窗口大小。

       步骤1、首先设定起始点  ,我们说了,是球,所以有半径  , 所有在球内的点就是  , 黑色箭头就是我们计算出来的向量  , 将所有的向量  进行求和计算平均就得到我们的meanshift 向量,也就是图中黄色的向量。 

        接着,再以meanshift向量的重点为圆心,再做一个高维的球,如下图所示,重复上面的步骤,最终就可以收敛到点的分布中密度最大的地方

算法步骤:

           1)在未被标记的数据点中随机选择一个点作为起始中心点center;

           2)找出以center为中心半径为radius的区域中出现的所有数据点,认为这些点同属于一个聚类C,同时在该聚类中记录数据点出现的次数加1;

           3)以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift;

           4)center=center+shift,即center沿着shift方向移动,移动距离为||shift||;

           5)重复步骤2,3,4,直到shift很小,记得此时的center。注意,这个迭代过程中遇到的点都应该归类到簇C;

           6)如果收敛时当前簇C的center与其它已经存在的簇C2中心的距离小于阈值,那么把C2与C合并,数据点出现次数也对应合并。否则把C作为新的聚类;

           7)重复1,2,3,4,5直到所有点都被标记为已访问;

           8)分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。

4.部分源码

........................

[cmin, cmax, rmin, rmax ] = select( Image1 );

cmin = round(cmin);

cmax = round(cmax);

rmin = round(rmin);

rmax = round(rmax);

wsize(1) = abs(rmax - rmin);

wsize(2) = abs(cmax - cmin);

hsvimage = rgb2hsv(Image1);

% pull out the h

huenorm = hsvimage(:,:,1);

hue = huenorm*255;

hue=uint8(hue);

histogram = zeros(256);

for i=rmin:rmax

    for j=cmin:cmax

        index = uint8(hue(i,j)+1);   

        histogram(index) = histogram(index) + 1;

    end

end

disp('start');

for i = 50:numberofframes-10

    disp('Processing frame');

    disp(i);

%     Frame = M(1, i);

    I = allFrames(:,:,:,i);

    % translate to hsv

    hsvimage = rgb2hsv(I);

    % pull out the h

    huenorm = hsvimage(:,:,1);

    % scale to 0 to 255

    hue = huenorm*255;

    % set unit type

    hue=uint8(hue);

    [rows cols] = size(hue);

    probmap = zeros(rows, cols);

    for r=1:rows

        for c=1:cols

            if(hue(r,c) ~= 0)

                probmap(r,c)= histogram(hue(r,c));   

            end

        end  

    end

    probmap = probmap/max(max(probmap));

    probmap = probmap*255;

    count = 0;

    rowcenter = 0;  % any number just so it runs through at least twice

    colcenter = 0;

    rowcenterold = 30;

    colcenterold = 30;

    while (((abs(rowcenter - rowcenterold) > 2) && (abs(colcenter - colcenterold) > 2)) || (count < 15) )

        rmin = max(min(rmin - 15,R),1);  %increase window size and check for center

        rmax = max(min(rmax + 15,R),1);

        cmin = max(min(cmin - 15,C),1);

        cmax = max(min(cmax + 15,C),1);

        rowcenterold = rowcenter; %save old center for convergence check

        colcenterold = colcenter;

        [ rowcenter colcenter M00 ] = meanshift(I, rmin, rmax, cmin,cmax, probmap);

        rmin = round(rowcenter - wsize(1)/2);

        rmax = round(rowcenter + wsize(1)/2);

        cmin = round(colcenter - wsize(2)/2);

        cmax = round(colcenter + wsize(2)/2);

        wsize(1) = abs(rmax - rmin);

        wsize(2) = abs(cmax - cmin);

        

        count = count + 1;

    end

    G = .2989*I(:,:,1)+.5870*I(:,:,2)+.1140*I(:,:,3);

    trackim=I;

    if isnan(cmin)==0 & isnan(cmax)==0 & isnan(rmin)==0 & isnan(rmax)==0

    for r= rmin:rmax

        trackim(r, cmin,:) = 255;

        trackim(r, cmax,:) = 255;

    end

    for c= cmin:cmax

        trackim(rmin, c,:) = 255;

        trackim(rmax, c,:) = 255;

    end

    end

    centers(i,:) = [colcenter rowcenter];

    % Set window size = 2 * (Moo/256)^1/2

    windowsize = 2 * (M00/256)^.5;

    sidelength = sqrt(windowsize);

A145

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168