2016-06-12 3 views
1

Я пытаюсь захватить изображение с двух камер одновременно, см следующий код MatLab:Run Matlab код одновременно

cam1 = initCamera(1); 
cam2 = initCamera(2); 

image1 = cam1.getSnapshot(); 
image2 = cam2.getSnapshot(); 

, потому что процесс MatLab этот код строка за строкой, их задержка SLite между изображениями полученных из кода.

Я хочу, чтобы вызвать инструкцию getSnapshot для обеих камер синхронно, потому что я хочу получить изображения точно в одно и то же время от двух камер.

Есть ли способ сделать это в Matlab? Я попытался использовать parfor и spmd, но у меня есть проблемы с областью переменных объектов камеры.

+4

Я думаю, что вы имеете в виду «асинхронно» – Buddy

+0

Связано: http://www.mathworks.com/matlabcentral/fileexchange/56686-asynchronous-video-reader – Suever

+0

Вы правы, я имею в виду асинхронно, но одновременно. – Anas

ответ

0

Параллельная панель инструментов может вам помочь.

matlabpool % Use default parallel configuration 
spmd   % By default uses all labs in the pool 
    INP = load(['somedatafile' num2str(labindex) '.mat']); 
    RES = somefun(INP); 
end 

RES на лаборатории доступен от клиента как RES{1} из лаборатории 1, RES{2} из лаборатории 2 и т.д.

+0

Я пробовал этот метод следующим образом spmd; cam = initCamera (labIndex); конец; spmd; image = cam {labIndex} .getSnapshot(); конец; , но он не может получить моментальный снимок, похоже, что после завершения spmd все объекты были освобождены. поэтому объект кулачка не инициализирован. – Anas

0

Если вы хотите запустить его на каждом работнике (т.е. spmd):

spmd 
    cam = initCamera(labindex); 
end 

spmd 
    img = cam.getSnapshot(); 
end 

img{1}; % access first image 
img{2}; % access second image, etc 

Обратите внимание, что переменная существует в рабочем пространстве каждого рабочего. Это не отрезанная переменная, поэтому вам не нужно индексировать ее. Вы можете получить результат от каждого работника с помощью индексации массива клеток, таких как img{1} и т.д.

Если вы хотите использовать parfor, вы можете сделать это следующим образом:

parfor i = 1:2 
    cam{i} = initCamera(i); 
end 

parfor i = 1:2 
    img{i} = cam{i}.getSnapshot(); 
end 

img{1}; % access first image 
img{2}; % access second image 
Смежные вопросы