1. 이벤트 데이터의 특성

이벤트 카메라에서 생성된 데이터는 매우 높은 시간적 해상도를 갖고 있으며, 각 픽셀이 밝기 변화에 반응하여 이벤트를 발생시킨다. 이러한 이벤트 데이터는 (x, y, t, p)의 형식으로 표현되며, 여기서 x, y는 이벤트가 발생한 위치 좌표, t는 이벤트가 발생한 시간, p는 밝기의 증가나 감소를 나타내는 폴라리티 값이다. 이러한 특성으로 인해 이벤트 데이터는 기존의 프레임 기반 영상 데이터와는 다르게 처리되어야 하며, 대용량의 데이터가 발생하는 경우 효율적인 압축 방법이 필요하다.

2. 이벤트 데이터의 시간적 및 공간적 압축

이벤트 카메라에서 생성되는 데이터는 매우 빠른 속도로 발생하며, 특히 빠르게 움직이는 객체나 환경에서 이벤트의 빈도가 급격히 증가한다. 이를 처리하기 위해 시간적 및 공간적 중복성을 제거하는 방식으로 압축을 시도할 수 있다.

2.1 시간적 중복 제거

이벤트 데이터는 매우 미세한 시간 단위로 발생하므로, 이벤트가 짧은 시간 내에 유사한 위치에서 반복적으로 발생하는 경우가 많다. 이를 기반으로 시간적으로 가까운 이벤트들을 그룹화하여 압축할 수 있다. 예를 들어, 짧은 시간 동안 동일한 좌표 (x, y)에서 발생한 이벤트들을 하나의 이벤트로 통합할 수 있다.

이를 수식으로 표현하면, 시간 차이가 일정 임계값 \delta t 이하일 때, 해당 좌표에서 발생한 이벤트들을 하나의 이벤트로 통합할 수 있다.

t_i - t_{i-1} \leq \delta t \quad \text{일 때}, \quad E(x_i, y_i, t_i, p_i) \rightarrow E(x_i, y_i, \bar{t}, p_i)

여기서 \bar{t}는 통합된 시간 값이다. 이 방법은 데이터의 시간적 중복을 줄여 전체 데이터의 양을 감소시킬 수 있다.

2.2 공간적 중복 제거

이벤트 데이터는 공간적으로도 중복되는 경우가 있다. 특히, 물체가 일정 방향으로 움직일 때, 인접한 픽셀에서 유사한 이벤트가 발생하는 경향이 있다. 이를 이용하여 공간적으로 근접한 이벤트들을 클러스터링하여 압축할 수 있다.

이를 벡터 형식으로 표현하면, 각 이벤트 \mathbf{E}_i = (x_i, y_i, t_i, p_i)를 인접한 픽셀의 이벤트들과 비교하여, 공간적으로 가까운 이벤트들을 하나로 통합할 수 있다. 두 이벤트 간의 거리 d(\mathbf{E}_i, \mathbf{E}_j)가 일정 임계값 이하일 때, 해당 이벤트들을 하나로 묶는다.

d(\mathbf{E}_i, \mathbf{E}_j) = \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2} \leq \delta s

이 방법은 공간적으로 유사한 이벤트를 그룹화하여 데이터를 더욱 효율적으로 압축할 수 있게 해준다.

3. 이벤트 데이터의 코딩 기법

이벤트 데이터를 더 효율적으로 압축하기 위해 다양한 코딩 기법이 사용될 수 있다. 일반적으로 사용되는 방법은 이벤트의 시간 및 폴라리티 정보를 압축하는 방식이다.

3.1 런렝스 인코딩 (Run-Length Encoding, RLE)

런렝스 인코딩은 이벤트가 발생하지 않는 구간을 효율적으로 압축할 수 있는 방법이다. 이벤트 발생 간격이 큰 경우, 이벤트가 발생하지 않는 시간 동안의 데이터를 단순히 시간 차이로 기록하여 데이터를 줄일 수 있다. 이를 적용하면 시간 축에서 이벤트가 발생한 순간을 기록하는 방식으로 압축할 수 있다.

예를 들어, 이벤트가 발생하지 않은 기간을 0으로, 이벤트가 발생한 순간을 1로 표시하여 데이터를 압축할 수 있다.

4. 차등 인코딩 (Delta Encoding)

차등 인코딩은 각 이벤트의 시간 정보를 이전 이벤트와의 시간 차이로 변환하여 저장하는 방법이다. 일반적으로 이벤트 데이터의 시간 정보는 매우 높은 해상도를 갖기 때문에, 각 이벤트 간의 시간 차이를 인코딩하면 데이터의 크기를 크게 줄일 수 있다.

차등 인코딩을 수식으로 표현하면,

\Delta t_i = t_i - t_{i-1}

와 같이 각 이벤트의 시간 차이를 저장한다. 이 방법은 특히 짧은 시간 간격에서 다수의 이벤트가 발생하는 경우 데이터의 크기를 효과적으로 줄일 수 있다.

5. 폴라리티 기반 압축

이벤트 카메라에서 이벤트는 밝기의 증가 또는 감소를 나타내는 폴라리티 값 p를 포함한다. 이 폴라리티 값은 이벤트 발생 시 밝기 변화의 방향을 나타내며, 일반적으로 p = +1 또는 p = -1로 설정된다. 하지만 대부분의 경우, 폴라리티 값은 시간이 지남에 따라 많은 픽셀에서 동일한 값을 유지하는 경향이 있다. 이를 이용하여 폴라리티 데이터를 효율적으로 압축할 수 있다.

5.1 동일 폴라리티 이벤트 묶음

시간적 또는 공간적으로 연속된 이벤트들 중 폴라리티가 동일한 경우, 이러한 이벤트들을 묶어 하나의 그룹으로 처리할 수 있다. 즉, 시간과 공간 상에서 동일한 폴라리티 값을 갖는 이벤트들을 하나로 묶어, 폴라리티 정보를 중복 저장하지 않고 데이터를 줄일 수 있다.

수식으로 표현하면, 일정 시간 간격 \delta t 동안 동일한 좌표에서 발생한 이벤트들이 동일한 폴라리티 값을 가질 때, 이를 하나로 묶어 처리할 수 있다.

p_i = p_{i+1} = \dots = p_{i+n} \quad \text{일 때}, \quad E(x_i, y_i, \bar{t}, p_i) \rightarrow E(x_i, y_i, \bar{t}, p_i)

이때 \bar{t}는 이벤트들이 발생한 평균 시간으로 계산할 수 있다.

5.2 폴라리티 데이터 압축을 위한 비트 레벨 인코딩

폴라리티 데이터는 이진 값으로 이루어져 있기 때문에, 이를 더욱 효율적으로 저장하기 위해 비트 수준에서 인코딩할 수 있다. 예를 들어, 한 번에 여러 폴라리티 값을 비트로 표현하여 압축하는 방법을 사용할 수 있다.

예를 들어, p 값이 +1인 경우 1비트로, p 값이 -1인 경우 0비트로 표현하여 여러 개의 이벤트를 묶어 압축할 수 있다.

6. 비손실 압축 기법

이벤트 데이터의 특성상, 중요한 정보 손실 없이 압축하는 비손실 압축 기법도 적용할 수 있다. 이는 특히 객체 추적이나 SLAM과 같이 정밀한 데이터가 요구되는 애플리케이션에서 유용하다.

6.1 허프만 코딩 (Huffman Coding)

허프만 코딩은 데이터의 발생 빈도에 따라 가변 길이의 코드워드를 할당하는 방법으로, 빈도가 높은 데이터에는 짧은 코드워드를, 빈도가 낮은 데이터에는 긴 코드워드를 할당하여 데이터를 압축한다.

이벤트 데이터에서 발생하는 다양한 정보들, 예를 들어 x, y, t, p 값들의 빈도를 분석하여 빈도가 높은 값에 짧은 코드워드를 할당하면 전체 데이터의 크기를 줄일 수 있다.

6.2 산술 코딩 (Arithmetic Coding)

산술 코딩은 데이터 전체를 하나의 실수 값으로 인코딩하는 방식으로, 발생 확률에 따라 데이터를 효율적으로 압축한다. 이벤트 카메라의 경우, 폴라리티, 시간, 좌표 등의 값을 모두 포함한 이벤트 스트림을 하나의 실수 값으로 인코딩하여 압축할 수 있다.

이 코딩 기법은 특히 데이터의 발생 확률 분포가 불균형한 경우에 매우 효율적이며, 이벤트 데이터의 특성에 잘 맞는다.

7. 손실 압축 기법

비손실 압축 기법과 달리 손실 압축 기법은 데이터의 일부를 제거하여 압축률을 높이지만, 데이터 복원 시 원본과 완벽히 일치하지 않을 수 있다. 이벤트 데이터는 손실 압축이 가능하며, 특히 고속 처리나 저장 용량 절감이 필요한 애플리케이션에서 유용하다.

7.1 공간적 다운샘플링

이벤트 데이터의 공간적 해상도를 줄여 데이터 양을 감소시키는 방법이다. 카메라의 해상도가 높을수록 더 많은 이벤트가 발생하므로, 일정 영역을 대표하는 하나의 이벤트로 압축할 수 있다. 예를 들어, 2 \times 2 크기의 픽셀 블록을 하나의 이벤트로 통합하여 압축하는 방식이다.

수식으로 표현하면, x_i, y_i 좌표가 일정 범위 내에 있는 이벤트들을 하나로 묶어 압축한다.

x_{\text{new}} = \frac{x_1 + x_2 + \cdots + x_n}{n}, \quad y_{\text{new}} = \frac{y_1 + y_2 + \cdots + y_n}{n}

이 방식은 해상도를 줄임으로써 데이터 양을 줄이지만, 공간적 세밀함을 잃을 수 있다.

7.2 시간적 다운샘플링

이벤트의 시간 해상도를 줄여 데이터를 압축하는 방법이다. 이벤트 데이터는 매우 높은 시간적 해상도를 가지므로, 특정 임계값보다 작은 시간 간격으로 발생하는 이벤트를 제거하거나 그룹화하여 압축할 수 있다.

예를 들어, 시간 간격 \delta t보다 작은 이벤트들을 하나의 이벤트로 통합한다.

t_{\text{new}} = \frac{t_1 + t_2 + \cdots + t_n}{n}

이 방법은 시간적 정밀도를 희생하지만 데이터 양을 크게 줄일 수 있다.

8. 학습 기반 압축 기법

딥러닝 모델을 활용하여 이벤트 데이터를 압축하는 방법도 연구되고 있다. 이 방법은 이벤트 데이터를 입력으로 하여, 중복된 정보나 중요하지 않은 정보를 제거하는 신경망을 학습시키는 방식이다.

8.1 오토인코더 (Autoencoder)

오토인코더는 입력 데이터를 압축된 잠재 공간으로 변환한 후, 다시 원래 데이터로 복원하는 신경망이다. 이벤트 데이터를 오토인코더에 입력하여 중복 정보를 제거하고, 압축된 벡터 형식으로 표현할 수 있다.

오토인코더의 구조는 크게 인코더와 디코더로 나뉜다. 인코더는 이벤트 데이터 \mathbf{E}를 저차원 공간 \mathbf{z}로 매핑하며, 디코더는 이 저차원 벡터를 다시 원본 데이터로 복원한다.

\mathbf{z} = f_{\text{encoder}}(\mathbf{E}), \quad \hat{\mathbf{E}} = f_{\text{decoder}}(\mathbf{z})

이때 \mathbf{z}는 압축된 데이터의 잠재 공간을 의미하며, 이는 원본 데이터보다 훨씬 작은 차원을 가질 수 있다.

8.2 변이형 오토인코더 (Variational Autoencoder, VAE)

변이형 오토인코더는 오토인코더의 확장판으로, 데이터의 잠재 공간을 확률 분포로 모델링하여 더욱 다양한 표현을 가능하게 한다. VAE는 이벤트 데이터의 복잡한 분포를 더 잘 학습하여, 더욱 효율적인 압축을 가능하게 한다.

VAE에서 인코더는 입력 데이터 \mathbf{E}를 평균 \mu와 분산 \sigma로 표현하고, 이로부터 잠재 벡터 \mathbf{z}를 샘플링한다.

\mathbf{z} \sim \mathcal{N}(\mu, \sigma^2)

이후 디코더는 이 샘플링된 \mathbf{z}를 통해 원본 데이터를 복원한다.

9. 압축 후 품질 평가

이벤트 데이터의 압축 후 품질을 평가하는 방법도 중요하다. 압축률과 함께 데이터 손실로 인한 품질 저하를 평가하는 다양한 방법들이 있다.

9.1 PSNR (Peak Signal-to-Noise Ratio)

PSNR은 압축된 데이터의 품질을 평가하기 위해 자주 사용되는 지표로, 원본 데이터와 압축된 데이터 간의 차이를 신호 대 잡음비로 측정한다. PSNR 값이 높을수록 압축 후 데이터의 품질이 높다.

PSNR은 다음과 같이 계산된다.

\text{PSNR} = 10 \cdot \log_{10} \left( \frac{L^2}{\text{MSE}} \right)

여기서 L은 데이터의 최대값, \text{MSE}는 원본 데이터와 압축된 데이터 간의 평균 제곱 오차이다.

9.2 SSIM (Structural Similarity Index)

SSIM은 인간 시각 시스템에 기반하여 두 이미지 간의 유사성을 평가하는 지표로, 이벤트 데이터의 압축 후 품질을 평가할 때도 사용할 수 있다. SSIM은 데이터의 밝기, 대비, 구조적 유사성을 평가하여 품질을 측정한다.

SSIM은 다음과 같이 계산된다.

\text{SSIM}(x, y) = \frac{(2 \mu_x \mu_y + C_1)(2 \sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)}

여기서 \mu_x, \mu_y는 각각 원본 데이터와 압축된 데이터의 평균값, \sigma_x^2, \sigma_y^2는 분산, \sigma_{xy}는 공분산을 의미하며, C_1, C_2는 안정화 상수이다.