% 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))
可以用复数表示,比如x=[1+j;2+2j;3+3j]。
坐标是一维坐标x还是二则型维坐标(x,y)?如果是孙迅猜前者,就用plot(t,x);如果是后者,就用plot3(t,x,y)。其中,t为每个坐标对应的时刻。
试试下面的效果是不是你要的
clearall
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line('xdata',[],'ydata',[],'color','r','marker','。','markersize',30);
forii=1:length(x)
set(h,'xdata',x(ii),'ydata',y(ii));
扩展资料:
x'表达方式
>昌睁 >X is equal to rand of 6.
X=
0.18690.27600.95970.5060
0.04620.03440.48980.67970.34040.6991
Thereisnoneedtomakeadifference
0.64630.16260.22380.9593
0.69480.76550.70940.11900.75130.5472
0.75470.49840.25510.1386
>>X(2:4, [2, 3, 5])
Ans=
0.03440.48980.3404
0.43870.44560.5853
0.38160.64630.2238
>>
可靠,所以现在主要以手势/人脸识别为主;这是因为手和脸上面有比较独特的特征点。你说的滤波归根结底还是要找出具有灰度跳变的高频部分作为人体;这除非背景中除了人以外没有其他突出的物体;否则光凭滤波二值法检测人体是不太现实。2 两张图片中人要是产生相对运动,检测起来就容易多了;利用帧间差分找到图像中灰度相差大的部分(你用的滤波也是一种手段);然后二值化区域连通;要是图像中没有其他移动物体计算枯销磨连通区域的变动方向就是人的运动方向。
你可以没斗去PUDN上搜搜相关的目标检测的代码完全和你这个对应是不可能的。照你说的情况可以先建立起静态背景的模型(或者直接在没人的时候拍张);然后不断的与这个背景做差,原理和帧间差分一样。建议你先从典型的帧间差分例程开始下手(比如移动车辆的检测,这个比较多)。
你在二值化之后加上一个区域连通的步骤;即使用膨胀或者闭运算;这样你的轮廓就是连续的了;用matlab的话bwlabel可以统计连通区域里面像素的个数也就是人体面斗尺积大小。质心就是横竖坐标的平均值;取所有人体点的横竖坐标分别累加;除以坐标总数得到的x和y平均值;这个就是质心了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)