如何在Matlab中并行处理视频采集等各种任务?

时间:2013-10-02 06:10:49

标签: camera matlab

我想同时或并行地从立体相机获取图像数据,保存在某处并在需要时读取数据。

目前我在做

for i=1:100
start([vid1 vid2]);
imageData1=getdata(vid1,1);
imageData2=getdata(vid2,1);

%do several calculations%
....
end

在这款相机中连续工作且速度非常慢。如何一次制作2台摄像机?

请帮助..

P.S:我也试过parfor,但没有帮助。

此致

1 个答案:

答案 0 :(得分:1)

无需并行计算工具箱!

以下解决方案通常可以解决像您这样的问题:

首先是视频,我只是使用一些向量作为“数据”并将它们保存到工作区,这些将是您的两个视频文件:

% Creating of some "videos"
fakevideo1 = [1 ; 1 ; 1];
save('fakevideo1','fakevideo1');
fakevideo2 = [2 ; 2 ; 2];
save('fakevideo2','fakevideo2');

基本技巧是创建一个生成另一个Matlab实例的函数:

function [ ] = parallelinstance( fakevideo_number )

% create command
% -sd (set directory), pwd (current directory), -r (run function) ...
% finally "&" to indicate background computation
command = strcat('matlab -sd',{' '},pwd,{' '},'-r "processvideo(',num2str(fakevideo_number),')" -nodesktop -nosplash &');
% call command
system( command{1} );

end

最重要的是在终端命令的末尾使用&

在此函数中,调用另一个函数来完成实际的视频处理:

function [] = processvideo( fakevideo_number )

% create file and variable name
filename = strcat('fakevideo',num2str(fakevideo_number),'.mat');
varname = strcat('fakevideo',num2str(fakevideo_number));
% load video to workspace or whatever
load(filename);
A = eval(varname);
% do what has to be done
results = A*2;
% save results to workspace, file, grandmothers mailbox, etc.
save([varname 'processed'],'results');
% just to show that both processes run parallel
pause(5)
exit

end

最后在主脚本中调用两个进程:

% function call with number of video: parallelinstance(fakevideo_number)
parallelinstance(1);
parallelinstance(2);

我的代码完全可执行,所以请稍微玩一下。我试着保持简单。 毕竟,您将在工作区中找到两个.mat个文件,其中包含已处理的视频“数据”。

请注意调整字符串fakevideo以命名所有视频文件的根目录。