4.20. 마무리

스크립트가 프레임을 캡처할 때마다 등장하는 카메라 이미징 스택의 여러 부분을 살펴보았습니다:

  • 센서 앞의 광학계 – 가장 단순한 이미지 형성 요소인 핀홀에서 시작해, 초점을 맞추면서도 훨씬 더 많은 빛을 모으는 렌즈로 나아갔으며, 초점 거리, 조리개, 피사계 심도, 화각이 응용에서 선택하는 조절 손잡이입니다. 실제 렌즈에는 왜곡, 비네팅, 주광선 각도 효과가 따르며, 이는 센서와 ISP가 나중에 보정합니다.

  • 센서 격자 – 광자를 전하로 바꾸는 포토다이오드의 2차원 배열로, 노출 시간과 아날로그 게인이 밝기를 모션 블러 및 노이즈와 맞바꿉니다. 롤링 셔터와 글로벌 셔터는 배열의 행이 읽히는 방식을 결정하며, 칩 위에서 이루어지는 소수의 보정들 – 컬럼 FPN, 블랙 레벨, 결함 픽셀, 렌즈 셰이딩 – 이 데이터가 칩을 떠나기 전에 이를 정리합니다. 두 개의 버스가 칩과 MCU를 연결합니다. 레지스터용 느린 I2C 제어 버스와 픽셀용 빠른 병렬 또는 MIPI 버스입니다.

  • 색상과 ISP – 베이어 컬러 필터 배열은 각 픽셀에 빨강, 초록, 파랑 중 하나를 부여하며, 디베이어링은 누락된 두 채널을 보간합니다. 이미지 신호 프로세서는 나머지 파이프라인을 하나로 엮습니다 – 통계 추출, 자동 화이트 밸런스, 디베이어링, 컬러 매트릭스 보정, 감마, 스케일링, 크로핑, 그리고 요청된 픽셀 형식으로의 최종 패킹입니다.

  • 픽셀 형식 – 원시 베이어, RGB888, RGB565, YUV422, 그레이스케일, BINARY, 그리고 압축된 JPEG / PNG 출력은 메모리 크기를 색상 충실도 및 후속 알고리즘 호환성과 맞바꿉니다. RGB565는 MCU의 워드 폭에 맞아떨어지고 RGB888 대비 메모리 비용을 절반으로 줄이기 때문에 완성된 색상의 기본값입니다.

  • CSI API – 다섯 줄의 설정과 스냅샷 루프가 모든 스크립트가 출발하는 형태입니다. 프레임버퍼 풀(단일, 더블, 트리플, 비디오 FIFO, 또는 트리거 방식)은 응용과 카메라가 프레임을 공유하는 방식을 결정합니다. 별도의 미리보기 채널은 응용의 버퍼와 경쟁하지 않고 연결된 디버그 프로그램에 영상을 공급합니다. 센서 조절 손잡이는 방향, 노출, 게인, 화이트 밸런스, 프레임 속도 상한, 컬러 바 테스트 패턴을 다룹니다.

  • 다중 센서와 메모리 풀 – 두 개의 센서를 가진 보드는 칩마다 CSI 를 하나씩 인스턴스화하고 각각을 자체 속도로 실행합니다. 그 아래에서 프레임버퍼 풀, 미리보기 영역, MicroPython 힙, 그리고 더 작은 고속 메모리 할당은 RAM의 서로 다른 영역에 위치하며, 속도가 필요한 부분은 속도를 얻고 크기만 필요한 부분은 그 대신 크기를 얻도록 배치됩니다.

이로써 장면에 맞는 형식, 프레임 크기, 노출로 센서에서 프레임을 가져오고, 응용의 처리 시간에 맞는 프레임버퍼 모드를 고르고, 연결된 무엇에든 라이브 미리보기를 노출하고, Image 를 Python으로 다시 읽어들여 연산할 준비를 마치기에 충분합니다.

4.20.1. 이 레퍼런스를 나중에 활용하기

이미징 장들을 한 번에 끝까지 읽는 것이 아니라 참고 자료로 다루십시오. 프레임버퍼 모드, 픽셀 형식, 또는 특정 센서 조절 손잡이의 의미를 다시 확인하러 돌아오는 것이 의도된 사용법입니다. csi.CSI 레퍼런스 페이지는 “이 호출의 정확한 이름이 뭐였더라” 하는 질문일 때 모든 메서드를 한곳에 나열합니다.

4.20.2. 여기서 어디로 갈 것인가

이미지 처리 가 자연스러운 다음 주제입니다. 버퍼를 손에 쥐고 csi API를 이해했으니, 남은 것은 픽셀로 무엇을 것인가입니다. 임계값, 에지 검출, 블롭 찾기, 선과 도형 검출, QR 코드, AprilTag, 머신러닝 추론입니다. 도구는 image 모듈과 Image 객체에 대한 메서드 목록으로 옮겨갑니다. 이 섹션의 모든 내용이 이어집니다. 루프 형태, 프레임버퍼 모드, 픽셀 형식 – 이 모든 것이 바로 이미지 처리 메서드가 다루는 대상입니다.