资源简介

检测视频中运动的两个点,并绘制出轨迹,输出坐标,计算速度和角速度。此资源中的代码可能只能处理特定的视频,不过算法适用很广泛。(此资源以附带上所属视频,使用者可根据视频差异更改代码,将视频与代码放在一个文件夹下,用matlab即可运行。)

资源截图

代码片段和文件信息

clear all;
workingDir = tempname;
mkdir(workingDir);
mkdir(workingDir‘images‘);                                                %建立空间

mov=VideoReader(‘Video_L15a.avi‘);                                         %读入 
fx1 = 0;
fy1 = 0;
sx1 = 0;
sy1 = 0;
quan = 0;
hejiao = 0;
jiao1 = 0;
vc = 0;
w = 0;
for ii = 1: 20 :mov.NumberOfframes

imgRgb = read(movii);
subplot(321);
imshow(imgRgb);
drawnow;


bw=im2bw(imgRgb0.5);                                                      %二值化处理
L = bwlabel(bw4);                                                         %对黑点部分标记


a = 0;
b = 0;
n = 0;

for i = 1 :  480;
    for j = 1 :  640;
        if(L(ij) == 1)
                 a = i + a;
                 b = j + b;
                 n = n + 1;
                  
                  
        end
    end
end
fx = round(a/n);
fy = round(b/n);
fprintf(‘第一个点(%d%d)\t‘  fxfy );


c = 0;
d = 0;
n = 0;
for i = 1 :  480;
    for j = 1 :  640;
        if(L(ij) == 2)
                 c = i + c;
                 d = j + d;
                 n = n + 1;
                  
                  
        end
    end
end
sx = round(c/n);
sy = round(d/n);
fprintf(‘第二个点(%d%d)\t‘  sxsy );
subplot(323)
grid on;
title(‘两点轨迹‘);
set(gcf ‘doublebuffer‘ ‘on‘);
axis([0 480 0 640]);
plot(fxfy‘.‘);
plot(sxsy‘*‘);
drawnow;
hold on;

jiao = angle( fxfysxsy ) ;

   


%while(ii>1)                                                                %区分两个点
%if(((sy-fy1)^2+(sx-fx1)^2)<((fx-fx1)^2+(fy-fy1)^2))
%         as = sx;
 %        sx = fx;
 %        fx = as;
 %        as = sy1;
 %        sy = fy1;
 %        fy = as;
%end
%break;
%end

if(fx<700&&fy<700&&sx<700&&sy<700)                                         %改进屏幕只有一个点的情景
cx = (fx+sx)/2;
cy = (fy+sy)/2;
else 
    cx = fx;
    cy = fy;
    
end


fprintf(‘中心点坐标:(%f%f)\n‘  cxcy );


subplot(324)
grid on;
title(‘中心点‘)
set(gcf ‘doublebuffer‘ ‘on‘)
axis([0 480 0 640]);
plot(cxcy‘.‘);
drawnow;
hold on;


hejiao = hejiao + (jiao-jiao1); 

if(hejiao>360)
    quan = 1;
elseif(hejiao>720)
    quan = 2;
end



fprintf(‘角度为:%f\n‘hejiao);
if(ii>1)
vc = sqrt((cx - cx1)^2+(cy - cy1)^2);                                      %每20帧走多少像素
w  = hejiao - hejiao1;                                                     %每20帧转过的角度
fprintf(‘速度为:%f\n‘ vc);
fprintf(‘角速度为:%f\n‘ w);

end

subplot(325)
grid on;
title(‘速度‘)
set(gcf ‘doublebuffer‘ ‘on‘)
plot(iivc‘.‘);
drawnow;
hold on;

if(w<40&&w>-40&&w~=0)
subplot(326)
grid on;
title(‘角速度‘)
set(gcf ‘doublebuffer‘ ‘on‘)
plot(iiw‘.‘);
drawnow;
hold on;
end

fx1 = fx;                                                                  %记录上一个点
fy1 = fy;
sx1 = sx;
sy1 = sy;
jiao1 = jiao;
cx1 = round((fx1+sx1)/2);
cy1 = round((fy1+sy1)/2);
hejiao1 = hejiao;



end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件     3587008  2013-10-27 10:46  检索视频中运动的点并计算线速度角速度——图像处理matlab实现\Video_L15a.avi
     文件        3007  2013-12-26 09:26  检索视频中运动的点并计算线速度角速度——图像处理matlab实现\gaijin.m
     目录           0  2014-01-05 09:26  检索视频中运动的点并计算线速度角速度——图像处理matlab实现\

评论

共有 条评论