使用Matlab并行计算工具箱工具优化图像采集

时间:2012-08-10 22:59:39

标签: image-processing parallel-processing video-capture matlab

使用单个matlab工作人员,我可以轻松地使用我的相机(使用matlab imaq工具箱)实现每秒最大帧数(fps)。这个简单的代码就是这样做的:

matlabpool(1)
start(vid)
pause(1); % give matlab time to initialize the camera
for j=1:frames
     data = getsnapshot(vid);
end

然而,一旦我尝试动态进行一些图像处理,有效率下降了50%。由于我在matlabpool(还有一个gpu)中有5个以上的工作者,我可以对其进行优化,以便抓取的每个帧都将由不同的工作人员处理吗?例如:

for j=1:frames
data = getsnapshot(vid);
      <do some analysis with worker mod((j),5)+2  i.e. worker 2 to 6 >  
end

问题是'数据'是从相机中连续获得的,并且分析大约需要2轮循环,所以如果不同的工作者(或核心)每次都要处理,那么最大fps可以是再次获得...

2 个答案:

答案 0 :(得分:2)

我看到它的方式,这里的工作流程本质上是串行的..

您可以做的最好是对图像处理功能进行矢量化/并行化(因此您仍然可以逐个抓取图像,但是您可以在多个核心上分配处理)

答案 1 :(得分:1)

我想我得到了解决方案:

for i=1:frames

     for sf=1:6; % I got 6 cores
         m(:,:,sf) = getsnapshot(vid);
     end

     spmd 
         result=f(m(:,:,labindex));
     end
end

我设法通过GPU并行化获得更好的结果......