Camera Frame과 Frame Rate

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

실습 전에

01 해상도를 높이면 저장량은 얼마나 늘까요?

설명

압축 전에는 가로×세로×채널×채널당 Byte에 비례합니다.

02 요청한 FPS와 실제 기록 FPS는 왜 다를까요?

설명

노출·획득·변환·저장에 걸리는 시간과 실행 환경의 영향을 받습니다. Timestamp로 측정합니다.

실행 조건

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

실습

실습용 노트북 미리보기실습용 노트북 다운로드

1. 영상 크기와 메모리

시작 조건

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

진행 방법

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

남길 결과

기록 항목과 확인할 점
영상
shape
dtype
배열 byte 수
원본 대비 비

확인할 점

  • 배열 byte 수를 JPEG 파일 용량이라고 부르지 않았는가?
  • 두 축을 절반으로 줄였을 때 픽셀 수가 어떻게 달라지는지 확인했는가?

2. 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 수를 서로 다른 항목으로 적으세요.

남길 결과

기록 항목과 확인할 점
구간
Δt [s]
구간별 1/Δt [Hz]
지연 관찰

확인할 점

  • 전체 Frame 수를 마지막 timestamp로 단순히 나눈 값과 구간 기반 값을 구분했는가?
  • timestamp 단위를 확인했는가?

3. 관심 영역과 설정 선택

시작 조건

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

진행 방법

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

남길 결과

기록 항목과 확인할 점
방법
영역·해상도
보존한 시야
남은 세부 정보

확인할 점

  • NumPy row·column과 영상 x·y를 구분했는가?
  • 실물 촬영을 추가한 경우에만 장치 결과라고 명시했는가?