주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

Optical Flow를 사용한 라이브 모션 감지

이 예제에서는 광학 흐름 기술을 사용하여 동작을 감지하는 비디오 알고리즘을 만드는 방법을 보여줍니다. 이 예제에서는 Computer Vision Toolbox™ System object™와 함께 Image Acquisition Toolbox™ System object를 사용합니다.

소개

이 예제에서는 라이브 비디오에서 동작을 감지하기 위해 이미지 수집 장치에서 이미지를 스트리밍합니다. 라이브 비디오 시퀀스의 각 프레임에서 모션 벡터를 추정하기 위해 광학 흐름 추정 기술을 사용합니다. 동작 벡터가 결정되면 비디오 시퀀스에서 움직이는 객체 위에 그 동작을 그립니다.

초기화

비디오 장치 System object를 생성합니다.

vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_320x240', ...
                             'ReturnedColorSpace', 'rgb', ...
                             'DeviceProperties.Brightness', 130, ...
                             'DeviceProperties.Sharpness', 50);

광학 흐름을 사용하여 한 비디오 프레임에서 다른 프레임으로의 객체 이동 방향과 속도를 추정하는 System object를 생성합니다.

opticFlow = opticalFlowHS;

스트림 수집 및 처리 루프

입력 비디오에서 동작 감지를 수행하기 위한 처리 루프를 생성합니다. 이 루프는 위에서 인스턴스화한 System object를 사용합니다.

% Set up for stream
nFrames = 0;
while (nFrames<100)     % Process for the first 100 frames.
    % Acquire single frame from imaging device.
    frameRGB = vidDevice();

    % Compute the optical flow for that particular frame.
    flow = estimateFlow(opticFlow,rgb2gray(frameRGB));

    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',25)
    hold off

    % Increment frame count
    nFrames = nFrames + 1;
end

요약

그림 창에서 예제가 검은색 파일의 움직임을 감지한 것을 볼 수 있습니다. 움직이는 물체는 이미지에서 볼 수 있듯이 벡터장선을 사용하여 표현됩니다.

릴리스

여기서는 System object의 release 메서드를 호출하여 열려 있는 모든 파일과 장치를 닫습니다.

release(vidDevice);