플렌옵틱 영상, 한 번 찍고 나중에 초점을 맞추는 카메라

마이크로렌즈 어레이로 광선장을 기록해 사후 리포커싱·심도 추정을 가능케 하는 플렌옵틱 영상의 원리와 활용을 정리한다.

2026-08-12 · 최초 발행 2025-12-06

렌즈와 마이크로렌즈 어레이를 결합하면 4차원 광선장(light field)을 단일 촬영으로 샘플링할 수 있다. 이렇게 얻은 데이터는 계산만으로 초점·시점·심도를 사후에 복원할 수 있어서, 로보틱스·현미경·산업 검사·VFX처럼 동적 장면을 한 번에 찍고 나중에 판단해야 하는 상황에서 특히 쓸모가 있다.

광선장을 기록한다는 것

플렌옵틱 영상은 센서 평면의 각 위치(x, y)와 진행 방향(u, v)을 포함하는 광선장 L(x, y, u, v)의 이산 샘플을 기록해, 사후 계산으로 초점 이동, 심도 추정, 시점 합성 등을 수행하는 영상 생성 방식이다.

핵심은 마이크로렌즈 어레이(MLA)가 주광학계의 개구상 정보를 각도 차원으로 분해해 센서에 투영한다는 점이다. 이 과정에서 공간 해상도와 각도 해상도의 곱은 픽셀 수 예산 안에서 트레이드오프를 이룬다(P ≈ Ns × Na). 공간(Ns)과 각도(Na) 중 어디에 자원을 더 배분할지가 설계의 첫 결정이다.

유형은 두 갈래로 나뉜다. Plenoptic 1.0(비초점형, unfocused)은 각도 해상도 강화와 리포커싱에 유리하고, Plenoptic 2.0(초점형, focused)은 공간 해상도 개선과 정밀 심도에 유리하다. 광학·센서 제약과 목표 과제에 따라 선택이 갈린다.

광학 스택은 어떻게 짜이는가

메인 렌즈 → 마이크로렌즈 어레이(구경, 피치, f/# 정합) → 이미지 센서(RGGB 등 CFA) 순으로 구성된다. 각도와 공간 샘플링의 균형을 맞추려면 메인 렌즈 f/#와 MLA f/# 매칭이 필수다. 설계에서는 비네팅, 마이크로이미지 간 간섭, 센서 픽셀 필 팩터, 크로스토크를 최소화해야 하고, 작업 거리와 심도 범위에 맞춰 MLA 피치·초점거리를 최적화해야 한다.

캘리브레이션이 정확도를 좌우한다

내부 파라미터는 메인 렌즈 왜곡, MLA 정렬/피치/초점거리, 센서 오프셋을 포함하며, 서브어퍼처 영상 정렬과 에피폴라 구조(EPI) 직선성 확보가 목적이다. 다카메라 동기·정합이 필요하면 외부 위치/자세 추정도 포함되고, 열(온도)이나 충격에 따른 파라미터 드리프트를 보정하는 루틴이 필요하다.

데이터는 어떤 형태로 쌓이는가

서브어퍼처 영상 묶음 또는 마이크로이미지 그리드 형태로 RAW를 저장한다. 베이어 보간 이전에 라이트필드를 정렬해두는 편이 정확도 향상에 유리하다. 메타데이터에는 광학 파라미터, 배열 기하, 노출/게인, 동기 정보가 붙으며, 대용량 연속 촬영에서는 압축·스트리밍 포맷 설계가 필요하다.

재구성과 심도 추정 알고리즘

리포커싱은 shift-and-sum, Fourier slice photography, 합성 조리개(심도를 얕게/깊게) 렌더링으로 이뤄진다. 심도 추정은 EPI 선형기울기 기반 시차와 다시점 정합(cost volume/regularization)에 신뢰도(uncertainty) 추정을 병행한다. 텍스처가 빈곤하거나 반사·투명체가 섞인 장면은 정규화와 광학 사전(prior) 결합으로 보완한다.

성능 면에서는 공간 vs 각도 해상도, 광효율 vs SNR, 실시간성 vs 정확도 사이의 상충이 있어 목표 과제에 맞춘 최적점을 찾아야 한다. 컴퓨팅 예산과 지연 시간 제약을 고려해 임베디드 GPU/FPGA 가속이나 오프보드 처리 파이프라인을 설계하는 편이 낫다.

실제로 어디에 쓰이는가

산업 검사·메트롤로지: 단발 촬영으로 높이/형상과 텍스처를 동시에 획득해 다각도 조명·다중 노출 공정을 줄인다. 라인 속도 제약이 있는 환경에서는 리포커싱으로 포커스 브래킷팅을 제거해 택트타임을 단축하고 설비를 단순화한다.

로보틱스·드론·자율주행 보조: 움직임이나 롤링셔터 영향 아래서도 한 프레임에서 심도를 얻을 수 있어 저피쳐·반사 표면에서도 안정적이다. 슬램/비전-IMU 융합의 초기화 견고성이 개선되고, 장애물 근접 구간에서는 리포커싱으로 인지 안정성을 확보한다.

현미경·의료 영상: 라이트필드 현미경(LFM)으로 3D 볼류메트릭 촬영이 가능해 살아있는 조직의 초고속 체적 이미징에 쓰인다. 디컨볼루션 기반 해상도 보정과 심도 불확실도 지도로 분석 신뢰도를 높인다.

미디어·VFX·AR/VR 캡처: 포스트 프로덕션에서 리포커싱·시점 이동이 가능해 세트에서 렌즈 교환이나 포커스 풀로우를 반복할 필요가 줄어든다. NeRF/3DGS 학습용 입력으로 쓸 때는 한 번의 촬영으로 다시점을 생성해 데이터 효율이 좋아진다.

다른 방식과 비교하면

항목 전통적 단일 카메라 플렌옵틱 카메라 스테레오/멀티뷰 리그
공간 해상도 높음 중(각도 분할로 저하) 높음(카메라 수 의존)
깊이 정확도 낮음(추가 센서 필요) 중~높음(설계·조도 의존) 높음(기선거리 확보 시)
촬영 속도 높음 높음(단발 촬영) 중(동기·동시 노출 필요)
광효율/SNR 높음 중(MLA 손실·개구 분할)
계산 비용 낮음 높음 중~높음
운영 편의 높음 중(캘리브레이션/파이프라인 필요) 낮음(동기/보정 복잡)

처리 파이프라인

촬영/수집내부·외부 캘리브레이션반복아니오전처리 완료아니오심도 추정(시차·정규화)보강아니오후처리(안정화·샤프닝)입력: 광선장 샘플(메인렌즈+마이크로렌즈 어레이RAW)RAW 정렬 디모자이킹라이트필드 구성캘리브레이션 오류 임계값?재캘리브레이션(리프로젝션오차 최소화)조도 상태: 저조도?노이즈 모델링·디노이징(SNR향상)라이트필드 재구성 EPI 정렬텍스처 부족/반사 문제?다중 정합·스팟 조명·정규화보강리포커싱/합성 조리개/시점합성출력: 리포커싱영상·심도맵·불확실도 지도

도입 전 정리해야 할 것들

요구사항 단계에서는 작업 거리, 심도 범위, 목표 해상도, 지연 시간을 정의하고 Ns–Na 분할 전략을 세운다. 광학 선택 단계에서는 메인 렌즈 f/#–MLA f/# 매칭, MLA 피치·초점거리, 센서 픽셀 크기를 결정하고 조도·SNR 예산을 계산한다. 캘리브레이션 단계에서는 온도 범위·진동 조건을 포함한 장기 안정성 시험과 자동 재보정 루틴을 설계한다. 파이프라인은 RAW→LF 재구성→심도·리포커싱→후처리를 모듈화하고 GPU 가속과 배치/스트리밍을 함께 설계한다. 검증은 표준 타겟(EPI 직선성, 해상도 차트)과 장면 기반 벤치마크(텍스처 빈곤·반사체)로 진행한다.

서브어퍼처 기반 리포커싱 코드 예시

전제: Python 3.10, numpy>=1.24, opencv-python>=4.9. 서브어퍼처 영상 목록(sa_imgs)과 그 각도 좌표(u, v)가 주어졌다고 가정한다.

import numpy as np
import cv2

def refocus_shift_and_sum(sa_imgs, uv_coords, alpha=0.0):
    """
    sa_imgs: list of HxWx3 BGR images (numpy arrays)
    uv_coords: list of (u, v) in normalized angular coords, length == len(sa_imgs)
    alpha: refocus parameter; 양수는 뒤 초점, 음수는 앞 초점
    """
    acc = None
    count = 0
    h, w = sa_imgs[0].shape[:2]
    for img, (u, v) in zip(sa_imgs, uv_coords):
        # 서브픽셀 시프트(보간), 알파-스케일 기반 이동량 계산
        dx = -alpha * u
        dy = -alpha * v
        M = np.float32([[1, 0, dx], [0, 1, dy]])
        shifted = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT)
        acc = shifted.astype(np.float32) if acc is None else acc + shifted.astype(np.float32)
        count += 1
    out = (acc / max(count, 1)).astype(np.uint8)
    return out

# 예시 사용
# sa_imgs = [...]  # 서브어퍼처 영상 리스트
# uv_coords = [...]  # 각 서브어퍼처의 (u,v), 예: 그리드 중심 기준 [-1,1]
# img_refocused = refocus_shift_and_sum(sa_imgs, uv_coords, alpha=0.7)
# cv2.imwrite("refocus_0p7.png", img_refocused)

실제 시스템에서는 RAW 베이어 처리 이전 정렬, 왜곡 보정, LF 좌표 보정, 게인 보정을 함께 수행하는 편을 권장한다.

결과적으로 무엇을 얻는가

다중 촬영·스택을 제거하면 공정 시간이 2040% 단축될 수 있고(공정·광학 조건 의존, 최신 정보 확인 필요), 동적 장면에서 프레임 간 불일치가 사라져 아티팩트가 줄고 리포커싱 기반 초점 실패율도 낮아진다. 다카메라 리그 대비 장비·보정·동기화 비용은 줄지만 계산 비용은 늘어나므로, 엣지 가속을 채택하면 총소유비용(TCO) 균형을 맞출 수 있다. 작업 거리 0.32m 범위에서는 수 mm~수 cm 수준의 심도 정밀도를 기대할 수 있다(광학 설계·조도·알고리즘에 따라 변동, 최신 정보 확인 필요).

플렌옵틱 영상은 단일 촬영으로 다중시점·심도를 복원하는 라이트필드 기반 기술이다. 공간–각도 해상도 트레이드오프, 광효율·SNR 저하, 높은 계산 비용이라는 제약이 있지만, 동적 장면에서의 단발 심도 획득과 포스트 리포커싱, 장비 단순화라는 실무 이점이 명확하다. 캘리브레이션 체계화, 파이프라인 가속, 품질 보증 프로세스를 갖춘 뒤 도입하는 순서가 현실적이다.

플렌옵틱영상라이트필드리포커싱심도추정컴퓨테이셔널포토그래피