Meansift

function [] = select()
close all;
clear all;
%%%%%%%%%%%%%%%%%%根据一幅目标全可见的图像圈定跟踪目标%%%%%%%%%%%%%%%%%%%%%%%
I=imread('e:/jiansheng.jpg');
figure(1);
imshow(I);


[temp,rect]=imcrop(I);  %用户手选裁剪的区域
[a,b,c]=size(temp); 

rect
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%计算目标图像的权值矩阵%%%%%%%%%%%%%%%%%%%%%%%
y(1)=a/2;
y(2)=b/2;
tic_x=rect(1)+rect(3)/2;
tic_y=rect(2)+rect(4)/2;
m_wei=zeros(a,b);%权值矩阵
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(i,j)=1-dist/h; %epanechnikov profile
    end
end
C=1/sum(sum(m_wei));%归一化系数


%计算目标权值直方图qu
%hist1=C*wei_hist(temp,m_wei,a,b);%target model
hist1=zeros(1,4096);
for i=1:a
    for j=1:b   
        %rgb颜色空间量化为16*16*16 bins
        q_r=fix(double(temp(i,j,1))/16);  %fix为趋近0取整函数
        q_g=fix(double(temp(i,j,2))/16);
        q_b=fix(double(temp(i,j,3))/16);
        q_temp=q_r*256+q_g*16+q_b;            %设置每个像素点红色、绿色、蓝色分量所占比重           
        hist1(q_temp+1)= hist1(q_temp+1)+m_wei(i,j);    %计算直方图统计中每个像素点占的权重
    end
end
hist1=hist1*C;
rect(3)=ceil(rect(3));
rect(4)=ceil(rect(4));




%%%%%%%%%%%%%%%%%%%%%%%%%读取序列图像
%myfile=dir('e:/meansift/*.jpg');
%lengthfile=length(myfile);
lengthfile = 1

for l=1:lengthfile
    %Im=imread(myfile(l).name);
    Im = imread('e:/jiansheng.jpg')
    num=0;
    Y=[2,2];


     %%%%%%%mean shift迭代
    while((Y(1)^2+Y(2)^2>0.5)&num<20)   %迭代条件
        num=num+1;
       temp1=imcrop(Im,rect); 
       %计算侯选区域直方图
       %hist2=C*wei_hist(temp1,m_wei,a,b);%target candidates pu                                                                                                                                                                                                                                                                                                                                                                                                                          
       hist2=zeros(1,4096);
       for i=1:a
         for j=1:b
        q_r=fix(double(temp1(i,j,1))/16);
        q_g=fix(double(temp1(i,j,2))/16);
        q_b=fix(double(temp1(i,j,3))/16);
        q_temp1(i,j)=q_r*256+q_g*16+q_b;
        hist2(q_temp1(i,j)+1)= hist2(q_temp1(i,j)+1)+m_wei(i,j);
         end
       end
       hist2=hist2*C;
       figure(2);
       subplot(1,2,1);
       plot(hist2);
       hold on;
       
       w=zeros(1,4096);
       for i=1:4096
           if(hist2(i)~=0)
              w(i)=sqrt(hist1(i)/hist2(i));
           else
           w(i)=0;
           end
       end
           


        %变量初始化
        sum_w=0;
        xw=[0,0];
       for i=1:a;
           for j=1:b
               sum_w=sum_w+w(uint32(q_temp1(i,j))+1);            
               xw=xw+w(uint32(q_temp1(i,j))+1)*[i-y(1)-0.5,j-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];
    
    v1=rect(1);
    v2=rect(2);
    v3=rect(3);
    v4=rect(4);
    %%%显示跟踪结果%%%
    subplot(1,2,2);
    imshow(uint8(Im));
    title('目标跟踪结果及其运动轨迹');
    hold on;
    plot([v1,v1+v3],[v2,v2],[v1,v1],[v2,v2+v4],[v1,v1+v3],[v2+v4,v2+v4],[v1+v3,v1+v3],[v2,v2+v4],'LineWidth',2,'Color','r');
    plot(tic_x,tic_y,'LineWidth',2,'Color','b');


end

在网上我找不到关于MeanShift算法的Matlab实现代码,但是根据网上的文字描述,你可以根据基本形式来编写相关的Matlab代码。MeanShift算法是一种基于核密度估计的爬山算法,可以用于聚类、图像分割和跟踪等任务。它不需要任何先验知识,完全依靠特征空间中样本点的计算其密度函数值。 在MeanShift算法中,最初的方式是采用颜色直方图的建模方式。RGB模型和HSV模型是两种常用的颜色模型。RGB模型的彩色直方图是三维的,将三个通道的值划分成256个小区间,共有256*256*256种色彩。为了减小计算量,可以将这256个小区间划分为16个大的区间,然后用一个颜色特征值代替三维的特征向量。另一种降维的方法是将RGB模型转换为HSV模型,只使用其中的H分量,即色调分量。 根据上述描述,你可以编写Matlab代码来实现MeanShift算法,具体的实现方式需要根据你的具体应用场景和数据情况进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [均值漂移(mean shift )聚类算法Matlab实现详解](https://blog.csdn.net/HJ199404182515/article/details/121694298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【目标跟踪】|Meansift 算法原理及对应代码解释 matlab C](https://blog.csdn.net/qq_35608277/article/details/115585735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值