1. Why DVS Rectification?

캘리브레이션은 렌즈 왜곡과 카메라의 배치를 측정해 보정에 필요한 값을 구하는 과정입니다. Rectify는 이 값을 실제 DVS 스트림에 적용해 이벤트 좌표를 보정합니다. 이 장에서는 왜 이 보정을 실시간으로 적용해야 하는지와, 보정된 좌표가 스테레오 매칭·특징점 매칭·AI 및 깊이 처리에서 어떤 의미를 가지는지 설명합니다.

In this chapter 캘리브레이션 결과가 라이브 DVS 패킷에 적용되는 과정과, 보정된 좌표가 스테레오·특징점·AI 처리에 필요한 이유를 설명합니다.

1.1 Calibration measures; Rectify applies

캘리브레이션을 완료하면 렌즈와 카메라에 대한 보정값이 calibration.yaml에 저장됩니다. 하지만 이 파일이 존재하는 것만으로 카메라에서 들어오는 이벤트 좌표가 자동으로 바뀌지는 않습니다.

Rectify Setup에서는 이 값을 읽어 좌표 변환에 필요한 정보를 미리 준비합니다. 이후 라이브 스트림이 시작되면 들어오는 DVS 패킷의 이벤트 좌표에 실제 보정을 적용합니다.

Calibration→calibration.yaml→Rectify Setup→Live DVS에 적용

1.2 Lens distortion changes actual event coordinates

실제 렌즈에서는 장면의 한 점이 이상적인 카메라 모델이 예측한 위치와 조금 다른 센서 좌표에 기록될 수 있습니다. 이 차이는 화면 가장자리로 갈수록 커질 수 있으며, 실제로 곧은 선도 이벤트 화면에서는 휘어진 것처럼 보일 수 있습니다.

정렬 전 이벤트 선
Rectify OFF
정렬 후 이벤트 선
Rectify ON

Undistortion은 하나의 카메라(Mono)에서 캘리브레이션으로 얻은 렌즈 모델을 이용해 좌표 차이를 보정하는 과정입니다. Rectify는 스테레오에서 좌·우 카메라의 왜곡을 함께 보정하고, 같은 장면의 대응점이 가능한 한 같은 영상 행에 놓이도록 좌표를 정렬하는 과정입니다. NRV DVS에서는 새로운 밝기 영상을 만드는 것이 아니라, 각 이벤트가 사용될 위치를 보정된 좌표로 변경합니다.

1.3 Why rectification must happen in real time

저장된 DVS 데이터를 나중에 보정하는 것도 가능합니다. 하지만 그렇게 하면 이미 Preview, 스테레오 매칭, AI 추론 등에 사용된 라이브 데이터까지 다시 바꿀 수는 없습니다.

따라서 실시간 기능에서 보정된 좌표를 사용하려면, 해당 기능이 데이터를 받기 전에 Rectify를 적용해야 합니다.

1.3.1 Stereo matching searches a simpler correspondence

스테레오 깊이 추정은 왼쪽 영상에서 본 한 점과 오른쪽 영상의 같은 점을 찾는 과정에서 시작합니다. 정렬 전에는 같은 점이 좌우 영상에서 가로와 세로 방향으로 모두 어긋날 수 있어 주변의 2차원 영역을 함께 확인해야 합니다. 정렬을 적용하면 대응점이 가능한 한 같은 영상 행에 놓이므로 이후 매칭은 주로 수평 방향에서 수행할 수 있습니다.

예를 들어 세로 방향으로 ±4픽셀까지 확인하던 경우에는 9개의 행을 비교해야 하지만, 정렬 후 같은 행만 사용한다면 세로 방향 후보는 1개가 됩니다. 이는 탐색 후보 수를 설명하기 위한 예이며, 전체 스테레오 알고리즘이 항상 9배 빨라진다는 의미는 아닙니다.

스테레오 정렬에 따른 대응점 행 정렬

1.3.2 Feature matching benefits from stable coordinates

특징점 매칭은 서로 다른 영상에서 같은 물체의 같은 지점을 찾는 과정입니다. 렌즈 왜곡이 있으면 화면 위치에 따라 같은 구조의 위치와 모양이 조금씩 달라질 수 있어 대응점을 찾기 어려워집니다. 먼저 좌표를 보정하면 이러한 위치에 따른 변형을 줄인 상태에서 특징점을 비교할 수 있습니다.

SIFT 특징점 대응 예시

실제 연구에서도 방사 왜곡을 보정한 뒤 동일한 특징점을 다시 찾는 비율이 20%에서 36%로, 올바른 특징점 매칭 비율이 40%에서 74%로 증가한 결과가 보고되었습니다.

Source: sRD-SIFT: Keypoint Detection and Matching in Images With Radial Distortion.

1.3.3 Models trained with rectified images need rectified input

많은 스테레오 및 깊이 추정 모델은 렌즈 왜곡이 제거되거나 좌·우 영상이 정렬된 데이터를 사용해 학습합니다. 이 경우 모델은 학습 과정에서 본 것과 같은 카메라 좌표 관계가 실제 입력에서도 유지된다고 가정합니다.

그런데 정렬된 영상으로 학습한 모델에 렌즈 왜곡이 그대로 남은 영상을 입력하면, 같은 물체가 학습 때와 다른 위치와 형태로 들어오게 됩니다. 특히 스테레오 모델에서는 좌·우 대응점이 같은 행에 있다는 조건도 깨질 수 있어 깊이 추정 성능이 떨어질 수 있습니다.

따라서 NRV DVS의 Rectify는 기존의 보정·정렬된 영상을 기준으로 학습된 AI 및 Depth 모델에 라이브 DVS 데이터를 연결할 때, 모델이 기대하는 입력 형태에 맞춰 이벤트 좌표를 보정하는 역할을 합니다.

스테레오 깊이 추정 예시

이런 차이는 실제 깊이 추정 성능에도 영향을 줄 수 있습니다. Depth Any Camera에서는 보정된 Perspective 영상 조건을 기준으로 한 모델에 왜곡된 fisheye 영상을 그대로 입력했을 때 Depth RMSE가 2.12에서 3.57로 증가했습니다.

Source: Depth Any Camera: Zero-Shot Metric Depth Estimation from Any Camera.

1.3.4 Calibration geometry is also an operating condition in vehicle systems

실제 차량의 ADAS나 자율주행 시스템에서도 카메라 캘리브레이션은 단순한 초기 설정으로 끝나지 않습니다. 카메라 장착 위치가 바뀌거나 캘리브레이션이 정상적으로 완료되지 않으면 일부 기능을 제한하거나 다시 캘리브레이션하도록 요구하는 사례가 있습니다.

즉 카메라 보정값은 저장만 해 두는 정보가 아니라 실제 운용 중 사용하는 영상의 위치 관계에 영향을 주는 조건입니다. 아래 그림은 자동차를 포함한 많은 실시간 카메라 시스템이 캘리브레이션 값을 실제 운용 데이터에 적용하는 단계를 거쳐야 함을 보여줍니다. 이 예시는 자동차가 NRV DVS와 동일한 Rectify 구현을 사용한다는 의미는 아닙니다.

차량 카메라 캘리브레이션

Source: Tesla Model Y DIY — Calibrating Cameras.

NRV DVS에서도 캘리브레이션 결과를 실제 라이브 스트림에 실시간으로 적용할 수 있도록 Rectify 기능을 제공합니다. 이를 통해 Viewer의 Preview와 저장뿐 아니라, 이후 스테레오 매칭이나 AI 처리에서도 보정된 이벤트 데이터를 바로 사용할 수 있습니다.

1.4 Rectify is applied to DVS packets before Viewer processing

NRV DVS에서 들어온 원시 패킷은 Preview나 저장 기능으로 전달되기 전에 Rectify 모듈을 통과합니다.

Rectify는 Setup에서 준비한 좌표 맵을 이용해 이벤트 좌표를 보정한 뒤, 다시 일반 DVS 패킷 형식으로 Viewer에 전달합니다. 따라서 Preview, 저장, 후속 처리는 별도의 정렬 전용 데이터 형식 없이 같은 보정 데이터를 사용합니다.

DVS 패킷이 Rectify와 Viewer를 거쳐 화면으로 전달되는 흐름
Next: 2장에서는 지금까지 설명한 좌표 보정이 실제로 어떻게 계산되는지 살펴봅니다. 렌즈 왜곡을 수식으로 표현하고, 보정된 화면의 각 위치에 대응하는 원본 센서 좌표를 구한 뒤 DVS 이벤트에 적용하는 과정까지 순서대로 설명합니다.