모션 블러란? 모션 블러를 없애는 방법은?

“나는 배경 지식은 알고싶지 않아! 곧바로 결과를 보고싶어!” 라고 생각하신다면 스크롤을 쭉 내리셔서 4번 챕터의 비디오를 봐주세요! 스마트폰으로 블러 최소화 하는 방법도 밑으로 스크롤을 쭉 내려서 3번 챕터로 가주세요! :)

 

모션 블러란?

모션 블러는 영상기기로 영상을 취득하면서, 피사체가 움직이면서 잔상이 남는 영상 아티팩트이다…라고 하면 어려우니까, 사진 찍을 때 움직여서 번지는걸 모션 블러라고 한다 :)

모션 블러는 기존의 사진 및 영상 촬영에서는 물체의 자연스러운 움직임을 표현하기 위해 꼭 들어가야하는 요소이다.

그러나, 로보틱스 비전딥러닝 비전 등 영상을 분석해서 주위 환경에 대해 이해하고 정보를 추출하려고 하는 목적을 지닐 때에 모션 블러는 굉장히 골칫거리가 될 수 있다. 비-딥러닝 방식의 영상처리이던지, CNN 딥러닝의 컨벌루션 방식이라던지, 영상을 분석하기 위해서는 점과 선 등의 low-level feature를 조합해서 high-level 지식을 추출해야하는데, 모션 블러는 이 점과 선을 흐리게 하기 때문에 high-level 지식을 추출하기 더 어려워진다. 그러므로, 모션 블러는 가능하면 최대한 피해야한다!

디텍션 + 트랙킹을 수행할 때, 여러가지 급격한 이미지 변화를 나타내는 이유 중 몇개를 보여주는 이미지입니다. (d) Abrupt motions는 갑작스러운 움직임에 피사체 및 주위 환경이 흐려져 보이는 것을 뜻 하는데, 이는 모션 블러 효과도 포함된다고 볼 수 있습니다.

이 이미지는 ICCV 2015년 “Hierarchical Convolutional Features for Visual Tracking” 이라는 자료에서 발췌했습니다.

 


모션 블러는 어떻게 지우는 것인가? (소프트웨어)

모션 블러 효과를 지워주는 연구가 없던것은 아니다. 영상 속 픽셀들에 대해 수학적 방법으로 ‘이 픽셀은 모션 블러 효과를 받은 것인가?’를 판별해서, 블러 효과를 지워보려는 연구가 많이 있었다. 하지만 효과적으로 사용할 수 있는 방법은 결국 나타나지 않았다.

첫번째 이유는 정확도가 많이 높지 않았다. 모션 블러가 있는 이미지만을 가지고 모션 블러가 전혀 없는 깨끗한 이미지를 만들어내기는 수학적으로 쉽지 않다. 어떤 방법으로 모션 블러를 인식하고, 어떤 방법으로 지우는게 효과적이고, 어떤 방법으로 변환된 이미지에서 깨끗한 모양을 복원할까? 아무리 많은 데이터를 모으고 좋은 모델을 만들어도 이게 가능할까? 모션 블러 제거라는 문제는 단순히 더러운 데이터에서 깨끗한 데이터를 검출해내는게 아니라, 깨끗한 데이터의 정보가 거의 존재하지 않는 데이터에서 깨끗한 데이터를 추출하는 과정이다. 모션 블러가 조금만 있다면 할만 할 수도 있겠다. 근데 모션블러가 이미지를 거의 뒤덮으면 어떻게 풀어야할까?

두번째 이유는 속도가 굉장히 느렸다. 모션 블러를 인식해본다고 하자. 어떠한 픽셀을 기점으로 주위에 픽셀값들을 하나하나 비교해보면서 블러가 있는지 없는지를 확인해봐야한다. X 방향으로도 확인하고, Y 방향으로도 확인한다. 모션 블러를 지우는 연구를 제대로 들여다보지는 않았지만, 아마 추측으로는 gradient가 굉장히 뭉뜽그려진 부분을 찾으려고 하지 않을까? focus가 좋지 않거나, 형태 자체가 뭉뜽그려진 값을 준다면 모션블러와 비슷하게 보일수도 있으니, 모션 블러만을 제대로 분류하는 알고리즘도 들어갈 것이다. 모션 블러가 조금만 있는 이미지라면 계산량이 작을 수도 있겠다. 반대로, 모션블러가 엄청나게 들어간 이미지는 더 계산이 많이 필요할 수도 있겠다. 이미지마다 연산량이 그렇게 많이 차이가 나면, 동영상에서 매 프레임마다 계산을 하려고 할 때 한 프레임은 빠르게 계산하고 다음 프레임은 엄청나게 느리게 처리가 되면서, 전체적으로 엄청나게 버벅거릴 수도 있겠다.

 


진짜 모션 블러는 어떻게 지우는거지? (하드웨어)

소프트웨어만으로는 모션 블러를 지우기 쉽지 않다. 그러면 우리는 언제든지 모션 블러를 달고 살아야하는가? ㅠㅠ

아니다!

우리가 사용하는 대부분의 영상처리 알고리즘들은 ‘조금의 모션 블러’에는 강건하게 계산을 수행할 수 있다. 또, 잘 알려진 특정 알고리즘 등을 통해서 이미지를 조금 변형시켜 모션 블러 효과를 무시할 수도 있다. 우리의 목적은 모션 블러를 100% 없애는게 아니라, 이 알고리즘들이 내가 얻은 영상에서 사용할 수 있게 하는 것이다 :)

소프트웨어에서 심한 모션 블러를 잡을 수 없다면, 하드웨어에서 잡아볼 수 있겠다. 다만 소프트웨어로 처리하는데 필요한 지식과 하드웨어로 처리하는데 필요한 지식은 서로 굉장히 다르다. 하드웨어 쪽은 알고리즘에 대한 지식보다는 광학과 신호처리 쪽으로의 지식이 필요하므로, 컴퓨터 비전 / 딥러닝의 소프트웨어만을 하시던 분들은 조금 생소하실 수 도 있다.

모션 블러가 왜 나타나는지 이해하기 위해서는 카메라가 어떻게 작동하는지 이해해야한다. 카메라가 작동하는 원리는 아래와 같다

 

2.1 카메라의 원리

  1. 셔터가 열리고, 이미지 센서가 빛에 노출된다.
    lol

  2. 빛이 센서에 닿으면서, 센서의 픽셀마다 받아드린 빛의 양 만큼의 신호를 모은다.
    lol

  3. 셔터가 닫히면서, 더 이상 이미지 센서가 빛에 노출되지 않는다.
    lol

  4. 지금까지 모아온 빛 신호를 디지털 신호로 바꾸고, 2D 이미지를 만든다.
    lol

  5. 1로 돌아가서 새 사진을 찍는다.

간단히 요약하면, 이미지 센서가 빛에 노출된 동안 얻은 정보를 재구성하면 영상이 나온다. 그러면, 이미지 센서가 빛에 노출되는 동안 이 빛에 아무런 변화가 없으면 그것이 스틸샷이겠고, 모션 블러는 이미지 센서가 빛에 노출된 동안 생긴 변화가 되겠다.

 

모션블러의 원리

이미지 센서는 빛에 특정 시간동안 노출되어있어야 한다. 이 노출되어있는 시간을 우리는 Exposure, 또는 Exposure time이라고 한다.

Exposure를 받고있는 도중에 피사체가 움직여버렸다고 생각해보자. 움직이기 전과 움직이기 시작한 후에 들어오는 빛이 다를것이다. 움직이기 전의 빛을 받던 픽셀은 더 이상 빛을 받지 못하게 되고, 움직이면서 새로운 픽셀이 빛을 받게 된다. 이렇게 (이전에 빛을 받던 픽셀 + 새로 빛을 받는 픽셀)만큼의 픽셀들이 피사체에 대한 정보를 담게 된다. 하지만, 충분한 시간동안 충분한 양의 빛이 담기지 않기 때문에 약한 신호로 측정되고, 이 때문에 투명해보이는 효과가 나타난다.

lol

그렇다면, Exposure 중에만 피사체가 움직이지 않으면 모션 블러가 없겠다!

하지만 대부분 피사체들은 연속적으로 움직이고, exposure 중에만 멈춰주는 착한 피사체는 없기 때문에… Exposure 중에 번지는 효과를 최소화하기 위해서는 Exposure를 줄이면 되겠다. 10의 Exposure에서 10 픽셀의 번짐 (모션 블러)를 일으킨다면, 1의 Exposure에는 1픽셀의 번짐만이 있을 것이다. 모션 블러의 효과가 10 픽셀에서 1픽셀로 줄었다!

그리고 아주 다행히도, 괜찮은 웹캠, 스마트폰, 디지털 카메라에서도 요즘은 exposure를 조정할 수 있다!

 

ISO 값 조정하기

Exposure를 줄이면 모션 블러를 줄일 수 있지만, 다른 문제가 하나 생긴다. Exposure를 10→1로 줄인다면 모션 블러도 10→1로 줄어든다. 그러나, 빛을 받는 시간이 줄어드는 것이라… 받아드리는 빛의 양도 10→1로 줄어든다. 이 뜻은 Exposure를 줄인만큼 영상이 어두워진다는 것이다. 이론적으론 모션 블러를 최소화하다가 하마터면 시꺼면 화면을 볼 수도 있다.

다행히도, 디지털 영상 촬영에서는 ISO라는 파라미터가 있다. 이것은 받아드린 빛 신호를 증폭기 (amplifier)를 이용해서 신호를 증폭시키는 것이다.

10의 신호를 받았는데, 나는 100을 원한다? 그러면 신호를 10배 올릴 수 있는 ISO 값을 설정하면 된다. 1의 신호를 받았는데, 나는 100을 원한다? 그러면 신호를 100배 올릴 수 있는 ISO 값을 설정하면 된다.

그러면 모션 블러를 최소화하려면, Exposure를 줄이고, ISO 값을 높이면 되겠다.

다만 ISO 값은 높이면 높일수록 노이즈가 커진다. 이미지 센서 특성 상 항상 어느정도의 노이즈가 들어가는데, 그 값을도 함께 증폭이 되기 때문이다. 이 때 생기는 노이즈는 피할 수 없다. 최소화 하려면 이미지 센서 사이즈를 큰거를 쓰거나, 가우시안 블러 등으로 노이즈를 없애면 되지만… 이 부분은 다른 글에서 다루기로 한다.

 


스마트폰에서 모션블러 지우기

스마트폰에서는 다행히도 Exposure 값을 바꿀 수 있다. 사용한 스마트폰은 삼성 갤럭시 S7 Edge이다.

기존의 카메라 앱에 들어가서, 왼쪽으로 슬라이드하면 ‘프로 모드’가 있다.

프로 모드에서는 Exposure, ISO 등 여러 값들을 사용자가 원하는대로 바꿀 수 있다.

아이폰, 다른 안드로이드 스마트폰에서도 비슷한 기능을 찾아 들어가면 된다.

비교를 위해서 Exposure를 1/5정도로 가능한 높이고 손을 가볍게 흔들면서 사진을 찍었다. 엄청난 양의 모션 블러가 보인다. 그에 비해, 뒤에 움직이지 않는 물체들은 선명하게 촬영되었다.

(아래 사진은 블러가 가득하다)

lol

이제 Exposure를 줄여보기로 한다. 약 1/250 정도로 줄여보았다.

이렇게 되서 모션 블러와 함께 피사체가 함께 사라졌다. 우리가 원하는건 피사체는 남고 블러만 사라지는거니까, ISO를 높여보기로 한다.

(이미지가 전체적으로 어두워졌다. 이미지가 로딩이 안되는게 아니다! 사진 오른쪽 위를 보면 빛을 강하게 발산하는 컴퓨터 화면은 보인다.)

lol

ISO를 높이고, 가볍게 손을 흔들면서 다시 촬영해보았다.

오른쪽의 사진이 방금 ISO를 높인 후 찍힌사진이다.

사진만 봐서는 손을 움직이지 않고 찍은것 처럼 보이나, 실제로는 아까전에 찍은 왼쪽의 블러 이미지를 얻을 때와 똑같이 움직인 사진이다.

모션 블러가 없어진건 정말 다행이다! 하지만 ISO를 높이면서 이미지에 노이즈가 생겼다.

지금 나오는 두개의 이미지는 각각 높은 ISO에서 얻어진 이미지와, 기존의 낮은 ISO에서 얻어진 이미지이다. 높은 ISO에서 얻어진 이미지는 노이즈가 생겼다. 사진을 찍는 사람들은 이걸 보고 사진의 grain (질감)이라고 하고 이를 통해 특정한 느낌을 표현하려고 하지만, 로보틱스 비전이나 딥러닝 비전을 하는 우리에게는 전혀 필요 없다. 깔끔한 이미지가 최고다!

 

머신 비전 카메라 / Scientific Camera로 모션 블러 제거하기

위의 스마트폰과 같은 방식으로 진행되었다.

FLIR사의 Chameleon 3 Monochrome 카메라를 이용해서 촬영되었고, Spinnaker Evaluation S/W를 사용했다.

머신 비전 카메라들은 Exposure time와 ISO를 훨씬 더 정확하게 조정할 수 있다. FLIR 사의 경우에는 ISO를 Gain이라는 단어로 표현한다. 머신 비전 회사마다 명칭을 다르게 부르는 경우가 있으니, 이 점 유의해야한다. 보통 Exposure와 ISO는 오토모드로 고정이 되어있어서, 이 락을 먼저 풀어줘야한다.

첫번째 영상은 레퍼런스 영상이다.

약 이정도의 속도로 손을 열심히 흔들어서 모션 블러를 만들어보려고 했다.

[alternative_text]

2번째 영상에서는 기본 세팅에서 잡혀있는 Exposure 값으로 촬영을 해보았다.

기본 세팅이 워낙 잘 잡혀있어서 모션 블러가 스마트폰 만큼 크진 않지만, 모션블러가 없지는 않다.

이정도 모션 블러라면, 데이터셋이 충분하지 않은 딥러닝 비전은 검출에 실패할 수도 있고, 로보틱스 비전의 경우 피쳐 검출이 부정확할 수 있다.

[alternative_text]

세번째 영상에서는 Exposure 값을 줄이고, 밝아질 때 까지 Gain을 높여보았다.

빠르게 움직이는 피사체임에도 불구하고, 모션 블러가 없는 영상을 얻을 수 있었다.

그러나, 영상 썸네일에서 보이듯이 전체적으로 영상에 노이즈가 생긴 것을 확인할 수 있다.

[alternative_text]


참고자료 + 소스

  • ICCV 2015 - “Hierarchical Convolutional Features for Visual Tracking”

    링크

  • 카메라 센서 이미지를 가져온 원본 비디오

    How Camera Sensors Pick up Light with John Greengo

  • ISO 노이즈 값 설명하는 그래프를 가져온 웹사이트

    Camera Sensor Size Photography Guide [Updated 2019]