meanshift 代码.doc_第1页
meanshift 代码.doc_第2页
meanshift 代码.doc_第3页
meanshift 代码.doc_第4页
meanshift 代码.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

% Adam Kukucka% Zach Clay% Marcelo Molina % CSE 486 Project 3function trackmov probmov centers = camshift % *% initialize vari ables% *rmin = 0; %min row value for search windowrmax = 0; %max row value for search windowcmin = 0; %min col value for search windowcmax = 0; %max col value for search windownumofframes = 0; %number of frames in the avithreshold = 1; %threshold for convergencecenterold = 0 0; %for convergence. previous center of windowcenternew = 0 0; %for convergence. new center of window% *% Pre code. load movie and select initial frame% *% prompt user for avi file nameuser_entry = input(Please enter an avi filename: ,s);% load the avi file. handle is M M = aviread(user_entry);% get number of framesdontneed numberofframes = size(M);% initialize matrix to hold center coordinatesimagecenters = zeros(numberofframes, 2);% extract the first frame from the aviFrame1 = M(1,1);Image1 = frame2im(Frame1);% * images(:, :, numberofframes) = G(:,:);% get search window for first frame 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);% create histogram% translate to hsvhsvimage = rgb2hsv(Image1);% pull out the hhuenorm = hsvimage(:,:,1);% scale to 0 to 255hue = huenorm*255;% set unit typehue=uint8(hue);% Getting Histogram of Image:histogram = zeros(256);for i=rmin:rmaxfor j=cmin:cmaxindex = uint8(hue(i,j)+1); %count number of each pixelhistogram(index) = histogram(index) + 1;endend% *% Algorithm from pdf% *aviobj1 = avifile(example3.avi);aviobj2 = avifile(example4.avi);% for each framefor i = 1:200disp(Processing frame);disp(i);Frame = M(1, i);I = frame2im(Frame);% translate to hsvhsvimage = rgb2hsv(I);% pull out the hhuenorm = hsvimage(:,:,1);% scale to 0 to 255hue = huenorm*255;% set unit typehue=uint8(hue);rows cols = size(hue);% choose initial search window% the search window is (cmin, rmin) to (cmax, rmax)% create a probability mapprobmap = zeros(rows, cols);for r=1:rowsfor c=1:colsif(hue(r,c) = 0)probmap(r,c)= histogram(hue(r,c); endend endprobmap = probmap/max(max(probmap);probmap = probmap*255;count = 0;rowcenter = 0; % any number just so it runs through at least twicecolcenter = 0;rowcenterold = 30;colcenterold = 30;% Mean Shift for 15 iterations or until convergence(the center doesnt% change)while (abs(rowcenter - rowcenterold) 2) & (abs(colcenter - colcenterold) 2) | (count 15) )%for j = 1:5%disp(meanshift);% disp(j);rmin = rmin - 7; %increase window size and check for centerrmax = rmax + 7;cmin = cmin - 7;cmax = cmax + 7;rowcenterold = rowcenter; %save old center for convergence checkcolcenterold = colcenter; rowcenter colcenter M00 = meanshift(I, rmin, rmax, cmin,.cmax, probmap);% given image (I), search window(rmin rmax cmin cmax)% returns new center (colcenter, rowcenter) for window and % zeroth moment (Moo)% redetermine window around new centerrmin = 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% mark center on image %save imageG = .2989*I(:,:,1).+.5870*I(:,:,2).+.1140*I(:,:,3);trackim=G;%make box of current search window on saved imagefor r= rmin:rmaxtrackim(r, cmin) = 255;trackim(r, cmax) = 255;endfor c= cmin:cmaxtrackim(rmin, c) = 255;trackim(rmax, c) = 255;endaviobj1 = addframe(aviobj1,trackim);aviobj2 = addframe(aviobj2,probmap);%create image movie, and probability map movietrackmov(:,:,i)= trackim(:,:);probmov(:,:,i) = probmap(:,:);% save center coordinates as an x, y by doing col, rowcenters(i,:) = colcenter rowcenter;% Set window size = 2 * (Moo/256)1/2windowsize = 2 * (M00/256).5;% get side length . window size is an area so sqrt(Area)=sidelengthsidelength = sqrt(windowsize);% determine rmin, rmax, cmin, cmax rmin = round(rowcenter-sidelength/2);rmax = round(rowcenter+sidelength/2);cmin = round(colcenter-sidelength/2);cmax = round(colcenter+sidelength/2);wsize(1) = abs(rmax - rmin);wsize(2) = abs(cmax - cmin);end% end for loop% Adam Kukucka% Zach Clay% Marcelo Molina % CSE 486 Project 3function rowcenter colcenter M00 = meanshift(I, rmin, rmax, cmin,.cmax, probmap)%inputs% rmin, rmax, cmin, cmax are the coordiantes of the window% I is the image%outputs% colcenter rowcenter are the new center coordinates% Moo is the zeroth mean% *% initialize% *M00 = 0; %zeroth meanM10 = 0; %first moment for xM01 = 0; %first moment for yhistdim = (0:1:255); % dimensions of histogram. 0 to 255, increment by 1rows cols = size(I);cols = cols/3; % *8% *% Main code% *% determine zeroth momentfor c = cmin:cmaxfor r = rmin:rmaxM00 = M00 + probmap(r, c);endend% determine first moment for x(col) and y(row)for c = cmin:cmaxfor r = rmin:rmaxM10 = M10 + c*probmap(r,c);M01 = M01 + r*probmap(r,c);endend% determine new centroid% x is colscolcenter = M10/M00;% y is rowsrowcenter = M01/M00;% Adam Kukucka% Zach Clay% Marcelo Molina % CSE 486 Project 3function cmin, cmax, rmin, rmax = select( I )%UNTITLED1 Summary of this function goes here% Detailed explanation goes here% for array. x is cols, y is rowsimage(I);k = waitforbuttonpress;point1 = get(gca,CurrentPoint); %mouse pressedrectregion = rbbox; po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论