Альфа, смешивающая переданные потоком пары изображений

В этом примере показано, как получить изображения потоковой передачи от устройства получения изображений, выполните онлайновую обработку изображений на каждой системе координат и отобразите обработанные кадры.

Результатом является альфа-смешение двух изображений, одно стационарный маятник, другой маятник в движении, делающие движущиеся функции кажутся прозрачными.

Шаг 1: получите фоновое изображение

Регистрируйте и отобразите снимок состояния фона без перемещения функций.

% Access an image acquisition device.
vidobj = videoinput('winvideo', 1, 'RGB24_320X240');

% Using the preview window, properly position the camera.
preview(vidobj)
pause(1)

% Capture an image with no moving features.
background = getsnapshot(vidobj);

% Convert the background from uint8 to double.
background = double(background)/255;

% Display the background image in a figure window.
imagesc(background);

Шаг 2: записанные данные процесса

Используя передававшие изображения, выполните онлайновую обработку изображений и отобразите обработанные изображения в окне рисунка.

Для каждого переданного потоком фрейма изображения вычислите линейную комбинацию между той системой координат и фоновым изображением. Линейная комбинация эффективно альфа смешивает два изображения, таким образом, любые движущиеся функции кажутся прозрачными.

% Set the object into motion.
pause(2);

% Configure the figure to produce flash-free rendering.
fig = gcf;
fig.DoubleBuffer' = 'on';

% Configure the acquisition.
vidobj.FramesPerTrigger = 20;

% Start the acquisition.
start(vidobj)

% While logging data, perform a linear combination between
% the current and background images.
current = getdata(vidobj, 1, 'double');
transparent = (current * 0.5) + (background * 0.5);

% Display the processed image.
imagesc(transparent);

% Repeat for all remaining images.
while (vidobj.FramesAvailable > 0),
    % Perform a linear combination between the current and background images.
    current = getdata(vidobj, 1, 'double');
    transparent = (current * 0.5) + (background * 0.5);

    % Display the processed image.
    imagesc(transparent);
end

% Once the video input object is no longer needed, delete
% it and clear it from the workspace.
delete(vidobj)
clear vidobj