Camera Frame과 Frame Rate

학습 목표

해상도와 촬영 간격을 정하려면 저장량·관측 범위·Frame Rate의 교환 관계를 알아야 합니다.

실행 조건

입력: 생성 영상과 Timestamp. 실제 촬영 예제는 Raspberry Pi OS의 Picamera2를 사용합니다. OS에 없는 경우 터미널에서 sudo apt install python3-picamera2.

영상 크기와 메모리

시작 조건

제공 NumPy 코드가 만드는 120×160×3 uint8 RGB 영상을 사용합니다.

진행 방법

  1. 크기·채널·자료형·nbytes를 기록하세요.
  2. [::2,::2]로 축소한 영상과 원본을 나란히 표시하세요.
  3. 공간 크기 비와 저장 배열 byte 수의 비를 비교하세요.

남길 결과

import numpy as np
import matplotlib.pyplot as plt
x,y=np.meshgrid(np.linspace(0,255,160),np.linspace(0,255,120))
frame=np.stack([x,y,255-x],axis=-1).astype(np.uint8)
small=frame[::2,::2]
print(frame.shape,frame.nbytes,small.shape,small.nbytes)
# TODO: 비교 그림과 비율을 기록하세요.

결과 기록·자가 점검

영상:

shape:

dtype:

배열 byte 수:

원본 대비 비:

확인할 점

Timestamp에서 Frame Rate 계산

시작 조건

획득 timestamp=[00.0330.0670.10.150.183]\mathrm{timestamp}=\begin{bmatrix}0&0.033&0.067&0.1&0.15&0.183\end{bmatrix} s를 사용합니다.

진행 방법

  1. np.diff(timestamp)로 다섯 Frame 간격을 구하세요. 관측 FPS는 이 다섯 간격의 평균을 구한 뒤 그 역수로 계산하세요.
  2. 각 간격을 비교기준 1/301/30 s와 나란히 적고, 가장 긴 간격의 시작·끝 시각을 표시하세요. 구간 번호를 x축, Frame 간격 [s]를 y축으로 그리세요.
  3. 요청값으로 가정한 30 FPS, 계산한 관측 FPS, 시간 기록에 들어 있는 Frame 수를 서로 다른 항목으로 적으세요.

남길 결과

timestamp=np.array([0,.033,.067,.100,.150,.183])
intervals=np.diff(timestamp)
print('observed FPS',1/intervals.mean())
# TODO: 간격별 표와 그래프를 작성하세요.

결과 기록·자가 점검

구간:

Δt [s]:

구간별 1/Δt [Hz]:

지연 관찰:

확인할 점

관심 영역과 설정 선택

시작 조건

원본 frame의 row=20:80, col=40:120을 ROI로 선택하고 전체 축소 영상과 비교합니다.

진행 방법

  1. ROI 좌표·크기와 전체 축소 크기를 기록하세요.
  2. 둘이 보존하는 시야와 세부 정보의 차이를 설명하세요.
  3. 실제 Camera Frame과 Frame Rate가 있으면 같은 원리로 촬영한 한 장을 추가하고 backend·해상도를 기록하세요.

남길 결과

roi=frame[20:80,40:120]
# TODO: ROI·전체 축소·원본을 같은 패널에서 비교하세요.

결과 기록·자가 점검

방법:

영역·해상도:

보존한 시야:

남은 세부 정보:

확인할 점