how to implement optical flow to get center of moving object

3 次查看(过去 30 天)
I am working on video segmentation using optical flow technique with horn suchunk method.
i tried code available on site given below function [u, v] = HS(im1, im2, alpha, ite, uInitial, vInitial, displayFlow, displayImg) % Horn-Schunck optical flow method % Horn, B.K.P., and Schunck, B.G., Determining Optical Flow, AI(17), No. % 1-3, August 1981, pp. 185-203 http://dspace.mit.edu/handle/1721.1/6337 % % Usage: % [u, v] = HS(im1, im2, alpha, ite, uInitial, vInitial, displayFlow) % For an example, run this file from the menu Debug->Run or press (F5) % % -im1,im2 : two subsequent frames or images. % -alpha : a parameter that reflects the influence of the smoothness term. % -ite : number of iterations. % -uInitial, vInitial : initial values for the flow. If available, the % flow would converge faster and hence would need less iterations ; default is zero. % -displayFlow : 1 for display, 0 for no display ; default is 1. % -displayImg : specify the image on which the flow would appear ( use an % empty matrix "[]" for no image. ) % % Author: Mohd Kharbat at Cranfield Defence and Security % mkharbat(at)ieee(dot)org , http://mohd.kharbat.com % Published under a Creative Commons Attribution-Non-Commercial-Share Alike % 3.0 Unported Licence http://creativecommons.org/licenses/by-nc-sa/3.0/ % % October 2008 % Rev: Jan 2009
%% Default parameters if nargin<1 nargin<2 im1=imread('1.jpg'); im2=imread('52.jpg'); end if nargin<3 alpha=1; end if nargin<4 ite=100; end if nargin<5 nargin<6 uInitial = zeros(size(im1(:,:,1))); vInitial = zeros(size(im2(:,:,1))); elseif size(uInitial,1) ==0 size(vInitial,1)==0 uInitial = zeros(size(im1(:,:,1))); vInitial = zeros(size(im2(:,:,1))); end if nargin<7 displayFlow=1; end if nargin<8 displayImg=im1; end
%% Convert images to grayscale if size(size(im1),2)==3 im1=rgb2gray(im1); end if size(size(im2),2)==3 im2=rgb2gray(im2); end im1=double(im1); im2=double(im2);
im1=smoothImg(im1,1); im2=smoothImg(im2,1);
tic;
%% % Set initial value for the flow vectors u = uInitial; v = vInitial;
% Estimate spatiotemporal derivatives [fx, fy, ft] = computeDerivatives(im1, im2);
% Averaging kernel kernel_1=[1/12 1/6 1/12;1/6 0 1/6;1/12 1/6 1/12];
% Iterations for i=1:ite % Compute local averages of the flow vectors uAvg=conv2(u,kernel_1,'same'); vAvg=conv2(v,kernel_1,'same');
% Compute flow vectors constrained by its local average and the optical flow constraints
u= uAvg - ( fx .* ( ( fx .* uAvg ) + ( fy .* vAvg ) + ft ) ) ./ ( alpha^2 + fx.^2 + fy.^2);
v= vAvg - ( fy .* ( ( fx .* uAvg ) + ( fy .* vAvg ) + ft ) ) ./ ( alpha^2 + fx.^2 + fy.^2);
end
u(isnan(u))=0; v(isnan(v))=0;
%% Plotting if displayFlow==1 plotFlow(u, v, displayImg, 5, 5); end
i only get the u,v motion values, how to get center of moving object in video. pls help out. Dimple

回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by