MATLAB을 사용한 비디오 처리

활용 분야, 예제 및 기법

일반적인 활용 분야

비디오 활용 분야에서는 일반적이면서도 까다로운 문제들을 해결해야 하며 이를 위해서는 유연한 분석 및 처리 기능이 필요합니다. MATLAB과 Simulink 제품을 사용하면 비디오 안정화, 비디오 모자이크 처리, 표적 검출 및 추적과 같은 일반적인 비디오 처리 문제에 대한 솔루션을 개발할 수 있습니다.

객체 추적

객체 추적은 보행자 회피, 보안 및 감시, 증강 현실과 같은 다양한 활용 분야의 기본적인 요소입니다. 이 예제에서는 고정된 카메라로부터 동영상 안의 움직이는 사람을 모션 기반으로 추적하는 내용을 소개합니다.

객체 검출 및 개수 세기

비디오 처리는 비디오 시퀀스에서 움직이는 객체를 검출하고 개수를 세는 데 사용할 수 있습니다. 이 사례 연구에서는 호주 과학자들이 비디오 자료 영상에서 야생 물새의 개체 수를 추정합니다.

MATLAB Conference 2017 Australia Dr. Shannon Dundas, NSW Department of Primary Industries

MATLAB의 비디오 처리

MATLAB은 비디오를 보고, 분석하고, 읽고 쓰는 데 사용할 수 있는 도구와 알고리즘을 제공합니다. 비디오 처리는 다음과 같은 활용 분야에서 유용하게 사용할 수 있습니다.

간단한 네 가지 단계로 알아보는 비디오 처리

MATLAB의 비디오 처리에서는 다음과 같은 단계가 사용됩니다.

  1. 비디오 읽기
  2. 비디오 표시하기
  3. 비디오 처리하기
  4. 비디오 쓰기

1단계. 비디오 읽기

비디오는 파일에서 또는 카메라에서 직접 읽어 들일 수 있습니다.

다음과 같은 단일 MATLAB 명령으로 파일에서 비디오를 읽어 들일 수 있습니다.

 >> vid = VideoReader('filename.avi')

MATLAB은 비디오 처리를 위한 웹캠을 지원하며, Image Acquisition Toolbox를 사용하면 여러 산업용 및 과학용 카메라에서 실시간으로 영상을 얻을 수 있습니다.

MATLAB에서는 Microsoft® Windows®, Mac, Linux®와 같은 각 OS별 코덱을 비롯한 다양한 코덱을 사용하여 비디오 파일을 읽어 들일 수 있습니다.

2단계. 비디오 표시하기

MATLAB에서는 다음과 같은 두 가지 방법을 사용하여 비디오를 표시할 수 있습니다.

  • deployableVideoPlayer: 일련의 비디오 프레임을 효율적으로 표시
  • implay: 비디오를 보기 위한 비디오 뷰어 앱 실행
비디오 뷰어 앱

MATLAB 동영상, 비디오 또는 이미지 시퀀스를 재생하는 비디오 뷰어 앱. 비디오를 시작하거나 중지하고 다양한 속도로 재생할 수 있으며, 비디오의 특정 섹션으로 건너뛸 수 있습니다.

3단계. 비디오 처리하기

하나의 비디오는 일련의 개별 비디오 프레임(이미지)으로 구성됩니다. 즉, 이미지에 대해 경계 검출을 수행하도록 설계된 알고리즘을 간단히 변환하여 비디오에 대해 경계 검출을 수행할 수 있습니다.

단일 영상 읽기

비디오의 영상 프레임 읽기

current_image = imread('flowers.png');
edge(current_image);

current_image = readFrame(vid);
edge(current_image);

비디오 처리는 경계 검출을 사용하는 경우와 같이 매우 간단할 수도 있고, 이전 프레임에서의 객체 위치를 고려해야 하는 추적 알고리즘과 같이 훨씬 복잡할 수도 있습니다.

고급 비디오 처리에 대한 자세한 내용은 다음과 같은 예제를 참조하십시오.

4단계. 비디오 쓰기

처리 후에는 비디오의 각 프레임을 다시 파일에 쓸 수 있습니다. 다음 함수를 사용하여 비디오 파일을 만들 수 있습니다.

 >> vid_w = VideoWriter('newfile.avi'); >> open(vid_w) 

변수 vid_w는 새로운 프레임을 누적하여 하나의 비디오를 만들 수 있습니다.

완전한 MATLAB 예제

이번에는 모든 컴포넌트를 하나로 모아 비디오 읽기, 표시하기, 처리하기, 쓰기의 단계를 보여주는 완전한 예제를 살펴보겠습니다.

 %% MATLAB으로 비디오 읽어 들이고 처리하기 % 설정: Video Reader와 Video Writer 만들기 videoFileReader = VideoReader('tilted_face.avi'); myVideo = VideoWriter('myFile.avi'); % 설정: 배포 가능한 비디오 플레이어와 얼굴 인식기 만들기 depVideoPlayer = vision.DeployableVideoPlayer; faceDetector = vision.CascadeObjectDetector(); open(myVideo); %% 각 프레임에서 얼굴 인식하기 while hasFrame(videoFileReader)  % 비디오 프레임 읽어 들이기 videoFrame = readFrame(videoFileReader);  % 프레임 처리하기 bbox = faceDetector(videoFrame); videoFrame = insertShape(videoFrame, 'Rectangle', bbox);  % 화면에 비디오 프레임 표시하기 depVideoPlayer(videoFrame);  % 최종 비디오 파일에 프레임 쓰기 writeVideo(myVideo, videoFrame); pause(1/videoFileReader.FrameRate); end close(myVideo) 

이 코드는 MATLAB Central에서 다운로드할 수 있습니다.

고급 기법

컴퓨터 비전을 위한 비디오 처리 알고리즘

비디오 처리를 위해 시간 상관관계를 사용하는 MATLAB 알고리즘은 “상태”라는 개념을 기반으로 합니다. 상태는 알고리즘이 현재 비디오 프레임에 대해 작업하고 있지만, 이와 동시에 이전 프레임들을 사용하여 출력값을 정한다는 개념입니다. 이는 이전 정보를 사용하여 추후 동작을 결정하는 객체 추적 알고리즘에서 특히 중요합니다. 추적의 일반적인 예로 객체의 개별 점을 추적하여 객체의 위치를 추적하는 KLT 알고리즘을 들 수 있습니다.

비디오 처리 알고리즘 개발자는 Computer Vision System Toolbox의 비전 전용 알고리즘도 사용할 수 있습니다. 이러한 알고리즘을 사용하면 빠르고 메모리 효율적인 방식으로 고해상도 비디오를 읽고 볼 수 있습니다. 이 툴박스에는 3D포인트 클라우드 처리, 스테레오 비전, 객체 검출, 추적 및 인식 및 그 밖의 활용 분야를 위한 알고리즘도 포함되어 있습니다.

비디오 처리에 대해 자세히 알아보기

GPU Coder를 사용하여 MATLAB으로 작성된 포그(Fog) 수정 알고리즘에서 CUDA 코드를 생성합니다.
비전 처리 알고리즘을 FPGA 하드웨어에 타겟팅할 때의 고려사항, 워크플로, 기법 등을 알아볼 수 있습니다.
객체 인식 시스템을 개발하면서 흔히 당면하는 과제를 MATLAB으로 해결하는 방법에 관해 알아보고 딥러닝, 머신러닝 및 컴퓨터 비전을 위한 새로운 기능을 살펴볼 수 있습니다.