본문 바로가기
Programming/Computer Vision

[OpenCV] 이미지 노출 융합 (exposure fusion) 이란?

by a voyager 2020. 11. 1.
728x90
반응형

[OpenCV] 이미지 노출 융합 (exposure fusion) 이란?

얼마 전 사과사 카메라 팀과 인터뷰를 했다. 그때 인터뷰를 한 사람은 hiring manager였고, 사과 맛의 보안상 말할 수 있는 것이 제한되어 있다고 하였다. 그러다가 물어본 것이 바로 이 노출 융합에 대한 것이었다. 그 사람은 exposure fusion이라는 표현을 쓰진 않고 풀어서 질문했다.

 

"세 장의 노출 시간을 다르게 찍은 사진이 있다고 하자, 첫 번째 사진은 밝은 부분은 잘 나오지만 어두운 부분이 너무 어두워 물체를 분간할 수 없고, 반면 다른 사진은 어두운 부분은 잘 나왔지만 밝은 부분이 너무 밝아 하얗게만 표현되었다. 이 사진들을 이용해 모든 영역이 잘 나오도록 사진을 만들고 싶은데 어떻게 하겠냐

 

그 당시에는 이 알고리즘에 대해서 몰랐기에 각 이미지의 같은 지점의 픽셀 값을 interpolation 해서 characteristic curve를 얻어 적절하게 노출된 사진을 얻을 수 있겠다고 온갖 브레인 스토밍으로 대답했었다. 인터뷰 후에 제대로 알고 싶어 찾아보니 노출 융합이었고 카메라에서 굉장히 널리 쓰이는 방법이었다. 소 잃고 외양간 고치는 아픈 심정으로 노출 융합에 대해서 간략하게 정리해 보았다.

 

노출 융합(exposure fusion)은 노출시간이 다른 여러장의 사진을 합쳐서 빛의 동적 범위(dynamic range, DR)가 높은 사진을 얻어내는 방법이다. 요즘 대부분의 스마트폰에서 이 방법을 이용해 최종 사진을 만든다. 우리는 사진을 찍지만 스마트폰은 사진을 '계산'해 내는 것이다. 그래서 이것을 computational photography라고 한다. 이렇게 만들어 낸 사진은 빛의 밝기 차이가 큰 영역에서 사물의 디테일을 잘 캡처할 수 있는 장점이 있다. 즉 역광에서도 배경과 사물 모두 잘 찍을 수 있다. 

 

동적 범위 (DR)는 사진상 빛의 가장 밝은 부분과 어두운 부분의 비율을 뜻한다. 이 범위에 따라 사진의 어두운 부분과 밝은 부분이 표현되는 정도가 결정된다. 즉, 동적 범위가 넓을수록 어두운 부분에서 밝은 부분으로 변화하는 정도가 더 세밀하게 표현하여 좋은 사진을 만든다. 

 

(왼쪽) 낮은 동적 범위 (오른쪽) 높은 동적 범위의 사진 

 

위의 두 사진중 왼쪽은 낮은 동적 범위의 사진이고, 오른쪽은 높은 동적 범위의 사진이다. 왼쪽의 사진에서 하늘은 빛이 밝아 하얀색으로만 표현된 반면, 오른쪽 사진에선 구름이 보일 정도로 세밀하게 표현되었다. 이는 동적 범위가 넓어 빛의 밝기가 변하는 단계가 많기 때문이다. 

 

오른쪽과 사진과 같이 동적범위가 높게 찍힌 것을 High Dynamic Range(HDR) 이미지라고 한다. 반면 왼쪽은 Low DR (LDR) 이미지이다. LDR은 대개 8비트 이미지로 픽셀의 밝기가 0-255 사이로 표현되는 반면, HDR은 최소 16비트 범위의 확장된 픽셀 값을 가진다. 

 

위의 사진에서 보여지듯이 HDR은 LDR에 비해 세부사항을 잘 잡아낸다. 이 HDR 이미지를 얻기 위해 대부분의 카메라는 노출시간이 다르게 찍은 여러 장의 사진을 합친다.

 

예를 들어 아래와 같이 4개의 다른 노출 시간으로 찍은 사진이 있다고 하자. 방안에서 창문을 향해 사진을 찍을 때 주로 얻게 되는 사진이다. 노출시간이 짧을수록 창문 밖의 풍경은 잘 담아낼 수 있지만 방안은 빛이 적어 어둡게 나온다. 반면 긴 노출 시간으로 찍으면 방안은 잘 나오지만 빛의 양이 많은 창문은 픽셀 값이 포화되어 하얀색으로만 나온다. 

 

노출시간 A < B < C < D

 

노출시간이 적은 것을 underexposed, 긴 것을 overexposed 되었다고 한다. 적절한 노출시간을 준다고 해도 밝은 부분과 어두운 부분을 동시에 세밀하게 나타난 이미지를 얻는 것은 쉽지 않다. 따라서 이렇게 노출시간을 달리하며 여러장의 사진을 찍어 이것들을 융합해 이미지의 모든 부분이 세밀하게 표현한 사진을 얻는 것이다.

 

아래 사진은 위의 사진들을 융합한 결과이다. 집의 내부와 외부의 모습 모두 세밀하게 표현되어있다. 이 결과는 본인이 Mertens (2005)이 제안한 다중 해상도를 이용한 알고리즘으로 얻은것이다. 이 방법은 tone-mapping이라는 postprocess 없이 최종 결과를 얻을 수 있다는 장점이 있다. 이 알고리즘에 대한 자세한 설명은 아래 링크에서 볼 수 있다.

 

융합된 사진

 

Exposure Fusion algorithms (Classical method)

노출 융합에 대한 다양한 알고리즘이 존재한다. 그중 가장 클래식한 것은 아래의 두 방법이다. 각 알고리즘의 자세한 내용은 링크한 논문에서 볼 수 있다. 인터뷰에서 내가 대답한 방법이 바로 첫 번째 알고리즘과 비슷한 것이었다. 두 번째 링크는 from-scratch로 알고리즘을 파이썬으로 직접 코딩해 본 것이다. 

 

  1. 카메라 반응 곡선을 통한 융합 (Camera Response Function)
    [Debevec et al. 1997]
    [My implementation]

  2. 다중 해상도를 이용한 융합 (Multi-resolution blending)
    [Mertens et al. 2005]
    [My implementation

 

Deep Fusion (노출 융합의 최신 기술)  

 

Deep Fusion은 고전적인 이미지 융합 방법과는 다르게 Deep Learning을 이용하는 방법으로 아이폰에는 11부터 적용되었다. 구글의 픽셀폰에 비하면 다소 늦은 적용이지만, 아이폰 카메라의 업그레이드에 시기적으로 맞춘 것으로 보인다.

 

딥 퓨전은 AI 기술을 이용해 노출시간이 다른 여러장의 사진을 융합하며 사진의 선명함(sharpness)를 개선하는 방법이다. 이것은 아이폰 11의 A13 Bionic Neural Engine을 사용하여 사진 속 물체의 질감과 디테일을 향상하며, 빛이 적을 때는 노이즈 제거하여 사진의 품질을 높인다. 하지만 아이폰에서 실제 이 딥 퓨전 기능이 있는지 확인할 수 있는 표시는 없다. 즉, 우리는 찍은 사진이 딥 퓨전으로 찍은 것인지 아닌지 알 수 없다. 단지 주변 빛의 조건을 고려해 자동으로 기능이 활성화된다고 한다. 빛의 양이 적을 때 그 기능이 활성화되며, 밝은 곳에서는 smart HDR 만 작동한다. 또한, 딥 퓨전은 아이폰 11 pro 카메라에서 Tele와 Wide 렌즈에만 작용하며, super-wide 렌즈에는 기능이 없다고 한다.

 

 

Deep Fusion은 어떻게 작동하는가?

총 9장의 사진을 찍는다. 이중 8장(짧은 노출로 4장 + 표준 노출로 4장) 은 셔터를 누르기 전에 카메라가 이미 찍어 놓는다. 셔터를 누르면 나머지 한장을 긴 노출시간으로 찍는다. 여기에서 표준 노출의 사진은 낮은 주파수(low frequency)의 정보를 가진다. 따라서 이것은 세밀한 부분을 캡처하기보다 사진의 컬터 톤과 같은 정보를 포함하는 사진이 된다.

 

반면, 짧은노출의 사진은 아주 짧은 시간 동안만 빛을 받아 높은 주파수의 정보 즉 세밀한 특징을 잡아낸다. 이 사진들을 가지고 딥 퓨전은 우선 긴 노출 하나와 표준 노출 3개로 synthetic long로 불리는 긴 노출 사진을 하나 만든다.

 

이 synthetic long과 짧은 노출 사진을 뉴럴 네트워크에 넣어 분석한다. DF는 노이즈 감소하는 필터를 각각의 이미지에 적용하여, 픽셀 by 픽셀로 이미지들을 합성한다. 

 

사진을 찍는 아주 간단한 작업에서 이렇게 복잡한 과정이 있다는게 신기하기만 한데, 어떤 알고리즘이 사용되는지 공개되진 않았을 것 같지만, 일반적으로 deep fusion에서 사용되는 것이 Convolutional Neural Network이다. 이것에 대한 실습은 다른 포스팅으로 넘기도록 하겠다.

 

Deep Fusion for iPhone 12 

이번에 소개된 아이폰 12에서는 이 딥 퓨전 방법이 훨씬 빠르고 좋아졌다고 한다. 특히, night mode에서도 이 방법의 적용으로 아주 선명한 사진을 얻을 수 있을 것이라고 하였다. 이는 머신러닝 계산을 담당하는 Neural Engine의 코어수의 증가와 CPU 성능의 향상으로 이뤄진 것으로 보인다. 실제 사진이 어떻게 기대된다. 

 

 

 

References

  1. Google's night sight on Pixel 

  2. Deep Fusion Demo

  3. Comparison with Smart HDR 

 

728x90
반응형

댓글