Concept
일반적으로 YOLO, SSD, Faster R-CNN 등의 CNN 기반의 객체 탐지 알고리즘을 다루는 경우에는 단일 이미지로 학습을 진행하게 됩니다. 모델 최적화를 통해 학습을 완료한 후 AP(Average Precision)를 측정하는 과정을 통해 학습을 마무리하는데 테스트 과정에서 객체 탐지 모델의 성능을 시각화하는 경우 이미지를 동영상으로 변환해야 하는 상황이 생깁니다. 그리고 학습에 사용할 데이터셋을 구축하기 위해 동영상의 프레임에서 이미지를 추출하기도 합니다.
이번 포스트는 위와 같은 상황에서 이미지를 비디오로, 비디오를 이미지로 변환해주는 매트랩 소스 코드입니다.
자율주행 벤치마킹 데이터셋 KITTI를 활용하여 간단하게 소스 코드를 작성해보겠습니다.
1. 이미지를 비디오로 변환
이미지를 비디오로 변환하는 소스 코드는 일반적인 파일 입출력 코드와 유사합니다.
dList_img = dir(strcat('이미지가 저장된 디렉토리', '*.png'));
먼저 '이미지가 저장된 디렉토리'를 설정하여 해당 폴더의 특정 확장자(png)의 파일들을 읽어 디렉토리 변수를 설정합니다. 이미지들의 파일명은 프레임 순서에 따라 정렬되어있어야 합니다.
그리고 불러온 이미지로 생성할 '비디오를 저장할 디렉토리 + 파일명'과 프레임레이트를 설정합니다. 예를 들어 D드라이브에 movie라는 이름으로 비디오를 저장한다면 소스 코드는 vid = VideoWriter('D:/movie.avi')가 됩니다.
그리고 프레임레이트가 높을수록 동영상의 속도가 빨라집니다.
vid = VideoWriter('비디오를 저장할 디렉토리 + 파일명');
vid.FrameRate = 10;
마지막으로 비디오를 저장하기 위해 파일을 열고 이미지 디렉토리 변수에서 이미지들을 불러옵니다. 이미지들은 비디오 파일에 작성되며 쓰기가 완료된 후에는 파일을 닫아줍니다.
open(vid)
for i = 1 : length(dList_img)
img = imread(strcat('이미지가 저장된 디렉토리', dList_img(i).name));
writeVideo(vid, img);
end
close(vid)
최종코드
dList_img = dir(strcat('이미지가 저장된 디렉토리', '*.png'));
vid = VideoWriter('비디오를 저장할 디렉토리 + 파일명');
vid.FrameRate = 10;
open(vid)
for i = 1 : length(dList_img)
img = imread(strcat('이미지가 저장된 디렉토리', dList_img(i).name));
writeVideo(vid, img);
end
close(vid)
2. 비디오를 이미지로 변환
이미지를 비디오로 변환하는 소스 코드는 1번의 과정을 반대로 진행합니다.
vid = VideoReader('비디오가 저장된 디렉토리 + 파일명');
numFrames = vid.NumberOfFrames;
먼저 비디오를 불러온 후에 프레임 개수를 카운팅합니다.
for t = 1 : numFrames
img = read(vid, t);
imwrite(img, strcat('이미지를 저장할 디렉토리', sprintf('%03d', t), '.png'));
end
그리고 for문을 사용해서 모든 프레임을 이미지 저장경로에 하나씩 저장합니다.
최종코드
clear all
vid = VideoReader('비디오가 저장된 디렉토리 + 파일명');
numFrames = vid.NumberOfFrames;
for t = 1 : numFrames
img = read(vid, t);
imwrite(img, strcat('이미지를 저장할 디렉토리', sprintf('%03d', t), '.png'));
end
Contact Us
Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발
인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
'Matlab' 카테고리의 다른 글
[Matlab] 매트랩 화면에 개발자용 테마 적용하기 (3) | 2021.01.27 |
---|---|
[Matlab] 변환 행렬 (Transformation matrix)을 이용한 LIDAR 라이다 PCD 데이터 전처리 #3 (0) | 2021.01.25 |
[Matlab] 극좌표계를 이용한 LIDAR 라이다 PCD 데이터 Segmentation #2 (0) | 2021.01.04 |
[Matlab] LIDAR 라이다 PCD (Point Cloud Data) 데이터 전처리 #1 KITTI DATASET 활용 (0) | 2020.12.10 |
[Matlab] 다층 퍼셉트론(MLP)을 이용한 MNIST 손글씨 인식 알고리즘 구현 (0) | 2020.12.05 |