当前位置:首页 > 代码 > 正文

目标跟踪matlab代码(目标定位跟踪原理及应用matlab仿真)

admin 发布:2022-12-19 18:56 132


今天给各位分享目标跟踪matlab代码的知识,其中也会对目标定位跟踪原理及应用matlab仿真进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

关于MATLAB中多目标的跟踪。

下面是camshift物体追踪代码,需要你用avi视频测试,matlab对avi视频格式要求比较严格。但是可以试试mmreader函数读取视频。

% Adam Kukucka

% Zach Clay

% Marcelo Molina

% CSE 486 Project 3

function [ trackmov probmov centers ] = camshift

% ******************************************************************

% initialize vari ables

% ******************************************************************

rmin = 0; %min row value for search window

rmax = 0; %max row value for search window

cmin = 0; %min col value for search window

cmax = 0; %max col value for search window

numofframes = 0; %number of frames in the avi

threshold = 1; %threshold for convergence

centerold = [0 0]; %for convergence... previous center of window

centernew = [0 0]; %for convergence... new center of window

% ******************************************************************

% Pre code... load movie and select initial frame

% ******************************************************************

% prompt user for avi file name

%%%%%user_entry = input('Please enter an avi filename: ','s');

% load the avi file... handle is M

%%%%M = aviread(user_entry);

M=aviread('8888.avi');

% get number of frames

[dontneed numberofframes] = size(M)

% initialize matrix to hold center coordinates

imagecenters = zeros(numberofframes, 2);

% extract the first frame from the avi

Frame1 = 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 hsv

hsvimage = rgb2hsv(Image1);

% pull out the h

huenorm = hsvimage(:,:,1);

% scale to 0 to 255

hue = huenorm*255;

% set unit type

hue=uint8(hue);

% Getting Histogram of Image:

histogram = zeros(256);

for i=rmin:rmax

for j=cmin:cmax

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

%count number of each pixel

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

end

end

% ******************************************************************

% Algorithm from pdf

% ******************************************************************

aviobj1 = avifile('example3.avi');

aviobj2 = avifile('example4.avi');

% for each frame

for i = 1:200

disp('Processing frame');

disp(i);

Frame = M(1, i);

I = frame2im(Frame);

% 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);

% choose initial search window

% the search window is (cmin, rmin) to (cmax, rmax)

% create a probability map

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;

% 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 center

rmax = rmax + 7;

cmin = cmin - 7;

cmax = cmax + 7;

rowcenterold = rowcenter; %save old center for convergence check

colcenterold = 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 center

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

% mark center on image

%save image

G = .2989*I(:,:,1)...

+.5870*I(:,:,2)...

+.1140*I(:,:,3);

trackim=G;

%make box of current search window on saved image

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

aviobj1 = addframe(aviobj1,trackim);

aviobj2 = addframe(aviobj2,probmap);

%create image movie, and probability map movie

trackmov(:,:,i)= trackim(:,:);

probmov(:,:,i) = probmap(:,:);

% save center coordinates as an x, y by doing col, row

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

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

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

% get side length ... window size is an area so sqrt(Area)=sidelength

sidelength = 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 3

function [ 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 mean

M10 = 0; %first moment for x

M01 = 0; %first moment for y

histdim = (0:1:255); % dimensions of histogram... 0 to 255, increment by 1

[rows cols] = size(I);

cols = cols/3; % **********************8

% **********************************************************************

% Main code

% **********************************************************************

% determine zeroth moment

for c = cmin:cmax

for r = rmin:rmax

M00 = M00 + probmap(r, c);

end

end

% determine first moment for x(col) and y(row)

for c = cmin:cmax

for r = rmin:rmax

M10 = M10 + c*probmap(r,c);

M01 = M01 + r*probmap(r,c);

end

end

% determine new centroid

% x is cols

colcenter = M10/M00;

% y is rows

rowcenter = M01/M00;

% Adam Kukucka

% Zach Clay

% Marcelo Molina

% CSE 486 Project 3

function [ cmin, cmax, rmin, rmax ] = select( I )

%UNTITLED1 Summary of this function goes here

% Detailed explanation goes here

% for array... x is cols, y is rows

image(I);

k = waitforbuttonpress;

point1 = get(gca,'CurrentPoint'); %mouse pressed

rectregion = rbbox;

point2 = get(gca,'CurrentPoint');

point1 = point1(1,1:2); % extract col/row min and maxs

point2 = point2(1,1:2);

lowerleft = min(point1, point2);

upperright = max(point1, point2);

cmin = round(lowerleft(1));

cmax = round(upperright(1));

rmin = round(lowerleft(2));

rmax = round(upperright(2));

求大神解释一下下面的MATLAB目标跟踪程序,是matlab自带的例子

听起来这个像是内存泄露。。。在matlab里面比较少见,这种现象一般由于打开的句柄没有关闭,又重新打开新的句柄,导致这些内存垃圾没有回收机制而让程序无法继续运行。通常在window开发员中讨论这个讨论的比较多,或许因为微软的编译器具有比较好的垃圾回收机制。matlab相对差一点。死循环的可能性不是没有,但是可能性很小。死循环的结果是程序没有响应,而有句柄没有关闭的情况下可能导致同时打开的句柄数达到上限之类的限制。猜测。。。

怎么更改meanshift目标跟踪的核函数 matlab代码

nction [] = select()

close all;

clear all;

%%%%%%%%%%%%%%%%%%根据一幅目标全可见的图像圈定跟踪目标%%%%%%%%%%%%%%%%%%%%%%%

I=imread('E:\数字图像处理\6\2\18.bmp');

figure(1);

imshow(I);

[temp,rect]=imcrop(I);

关于目标跟踪matlab代码和目标定位跟踪原理及应用matlab仿真的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/18869.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载