اطلاعیه

Collapse
No announcement yet.

اجرای کد meanshift

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اجرای کد meanshift

    سلام
    http://www.mathworks.es/matlabcentral/fileexchange/35520-mean-shift-video-tracking?download=true
    من کد meanshift رو گرفتم اما توی اجراش مشکل زیر رو دارم

    gui.m رو run می کنم فایل ویدیویی رو هم انتخاب می کنم اما موقع انتخاب select target خطای زیر رو میده:
    کد:
    ??? Error: File: Select_patch.m Line: 14 Column: 38
    Unexpected MATLAB operator.
    
    Error in ==> GUI>Select_Target_Callback at 377[left][left]
    [handles.T,handles.x0,handles.y0,handles.H,handles.W] = ...
    
    Error in ==> gui_mainfcn at 96
        feval(varargin{:});
    
    Error in ==> GUI at 49
      gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uicontrol Callback[/left]
    [/left]
    انما الحیوة عقیدة و جهاد

    #2
    پاسخ : اجرای کد meanshift

    سلام
    این برنامه ی ساده ی ردیابی به روش meanshift هست
    این برنامه بخشی از یک برنامه ی بزرگتر هست که توسط Jifeng Ning, College of Information Engineering, Northwest A&F نوشته شده
    بنده فقط اونو جدا کردم و بطور ساده تر بعضی قسمت ها رو بازنویسی کردم و یا با دستورات جدیدتر MATLAB جایگزین کردم


    Main

    کد:
    %% Clear Memory & Command Window
    clc
    clear all
    close all
    %% Initialize
    OBJ    = mmreader('test.avi');       % Select Video File (Frames, video data)
    numberofframes = get(OBJ,'numberOfFrames');  % Total Frame Numbers   
    startFrm  = 30;                % start frame
    endFrm   = 150;               % end frame
    CL     = zeros(endFrm-startFrm+1,2);    % Centroid Location
    minDist  = 0.1;               % convergence threshold of mean shift       
    maxIterNum = 15;                % maximal iteration number
    incre   = 7;                % increase size of candidate window
    redBins  = 16;                % default color quant sheme (fixed in this demo)
    greenBins = 16;
    blueBins  = 16;
    %% Select Object
    frame00  = read(OBJ,startFrm);        % define the target in startFrm;
    figure() 
    imshow(frame00)                % Show Image and Wait Till Get Rect
    IR     = round(getrect(figure(1)));    % Coded RectFrame [xmin,ymin,width,height]
    cmin    = IR(1);
    cmax    = IR(1)+IR(3);
    rmin    = IR(2);
    rmax    = IR(2)+IR(4);
    center(1,1)= floor((rmin+rmax+1)/2);      % center of target window
    center(1,2)= floor((cmin+cmax+1)/2);              
    w_halfsize(1) = round(abs(rmax - rmin)/2);   % half window 
    w_halfsize(2) = round(abs(cmax - cmin)/2); 
    w_halfsize_bg = 2*w_halfsize;         % size of background winodw
    %% Object Model
    q_u=rgbPDF(double(frame00),center,w_halfsize); % target model(histogram)
    height  = size(frame00,1);          % height of each frame
    width   = size(frame00,2);          % width of each frame
    %% Start Tracking
    for i = startFrm:endFrm            % number of frames    
      if i==startFrm               % draw initial target region in first frame
      framei=frame00;
      elseif i>1  
      framei=read(OBJ,i);
      center=rgbTracking(double(framei),center,w_halfsize,q_u,minDist,maxIterNum,incre); % tracking target with mean shift
      end 
      rmin=center(1)-w_halfsize(1);  
      rmax=center(1)+w_halfsize(1);  
      cmin=center(2)-w_halfsize(2);
      cmax=center(2)+w_halfsize(2);
      CL(i-startFrm+1,:)=[center(2),center(1)];  
      %% Prevent From Exceed Image
      if rmin<2; rmin=2; end  
      if rmax>height-1; rmax=height-1; end  
      if cmin<2; cmin=2; end  
      if cmax>width-1; cmax=width-1; end
      %% Show  
      imshow(framei)
      title([num2str(i-startFrm+1),'/',num2str(endFrm-startFrm+1)])
      hold on
      rectangle('Position',[cmin,rmin,cmax-cmin,rmax-rmin],'LineWidth',3,'EdgeColor','g')
    %   plot(CL(1:i-startFrm+1,1),CL(1:i-startFrm+1,2),'g','LineWidth',2)
      plot(center(2),center(1),'g*')
      hold off
      pause(0.1)
      
    end
    %% Record
    inf{1} = CL;                  % Centroid Locations
    tmsz  = [IR(3),IR(4)]; inf{2} = tmsz;     % Template Size
    save output.mat inf
    rgbPDF

    کد:
    function q_u=rgbPDF(image,center,w_halfsize)
    
    sum_q=0;
    histo=zeros(16,16,16);
    
    rmin=center(1)-w_halfsize(1);
    rmax=center(1)+w_halfsize(1);
    cmin=center(2)-w_halfsize(2);
    cmax=center(2)+w_halfsize(2);
    
    wmax=(rmin-center(1)).^2+(cmin-center(2)).^2+1;
    for i=rmin:rmax 
      for j=cmin:cmax
        d=(i-center(1)).^2+(j-center(2)).^2;
        w=wmax-d; 
        R=floor(image(i,j,1)/16)+1;
        G=floor(image(i,j,2)/16)+1;
        B=floor(image(i,j,3)/16)+1;
        histo(R,G,B)=histo(R,G,B)+w;    
      end
    end
    
    for i=1:16
      for j=1:16
        for k=1:16
          index=(i-1)*256+(j-1)*16+k;      
          q_u(index)=histo(i,j,k);
          sum_q=sum_q+q_u(index);
        end
      end
    end
    
    q_u=q_u/sum_q; % normalize
    rgbTracking

    کد:
    function center=rgbTracking(image,center,w_halfsize,q_u,minDist,maxIterNum,incre)
    
    sum_p=0; 
    histo=zeros(16,16,16);   % initilize candiate model
    
    iterations=0;        % 
    center_old=center;
    
    % position of candidate target window
    rmin=center(1)-w_halfsize(1)-incre;
    rmax=center(1)+w_halfsize(1)+incre;
    cmin=center(2)-w_halfsize(2)-incre;
    cmax=center(2)+w_halfsize(2)+incre;
    
    height=size(image,1);
    width=size(image,2);
      
    while 1
      wmax=(rmin-center(1)).^2+(cmin-center(2)).^2+1;  
      for i=rmin:rmax     % 
        for j=cmin:cmax
          if (i>=1 & i<=height & j>=1 & j<=width)
            d=(i-center(1)).^2+(j-center(2)).^2;
            w=wmax-d; % 
            R=floor(image(i,j,1)/16)+1;
            G=floor(image(i,j,2)/16)+1;
            B=floor(image(i,j,3)/16)+1;
            histo(R,G,B)=histo(R,G,B)+w;
          end
        end
      end
    
      for i=1:16
        for j=1:16
          for k=1:16
            index=(i-1)*256+(j-1)*16+k;
            p_u(index)=histo(i,j,k);
            sum_p=sum_p+p_u(index);
          end
        end
      end
      
      p_u=p_u/sum_p; 
    
      n=1;
      for i=rmin:rmax % compute w=sqrt(q_u(i)/p_u(i))
        for j=cmin:cmax
          if (i>=1 & i<=height & j>=1 & j<=width) 
            R=floor(image(i,j,1)/16)+1;
            G=floor(image(i,j,2)/16)+1;
            B=floor(image(i,j,3)/16)+1;
            u=(R-1)*256+(G-1)*16+B;
            x(1,n)=i;
            x(2,n)=j;        
            w_i(n)=sqrt(q_u(u)/p_u(u));                                
            n=n+1;
          end
        end
      end
    
      center_r=(x*w_i'/sum(w_i))';        % new centroid  
      MS=sqrt(sum((center_r-center_old).^2));  % norm of mean shift vector 
      iterations=iterations+1;          % mean shift iteration number
      
      % is mean shift convergence?
      if (MS<minDist | iterations>=maxIterNum)
        break;
      end
      
      center_old=center_r;             
      center=floor(center_r);           
    
      rmin=center(1)-w_halfsize(1)-incre;     
      rmax=center(1)+w_halfsize(1)+incre;
      cmin=center(2)-w_halfsize(2)-incre;
      cmax=center(2)+w_halfsize(2)+incre;
      
      histo=zeros(16,16,16);           % reinitilize candiate model
      sum_p=0;     
    end

    یک مقایسه و بررسی خوب از روش meanshift در این مقاله ارائه شده
    RECENT ADVANCE ON MEAN SHIFT TRACKING: A SURVEY 2013
    HE, LIWEN, YONG XU, YAN CHEN, and JIAJUN WEN

    object tracking: http://www.eca.ir/forum2/index.php?topic=88447.msg547644#msg547644

    any help or opinion on robot mapping will be welcome

    دیدگاه


      #3
      پاسخ : اجرای کد meanshift

      من کد MEAN SHIFT را اجرا کردم اما در خط RGBTRACKING این پیغام رو میده که که این دستور تعریف نشده

      دیدگاه


        #4
        پاسخ : اجرای کد meanshift

        سلام
        باید سه تا کد بالا رو به صورت جداگانه ذخیره کند و داخل یک پوشه باشند
        انما الحیوة عقیدة و جهاد

        دیدگاه

        لطفا صبر کنید...
        X