[카메라 기술 백서 #9] 카메라 너 때문이야! - 카메라 때문에 생기는 문제점 #2 젤로 현상(Rolling shutter) 현상


  오늘은 카메라 너 때문이야 시리즈 2탄… 1년에 하나씩 나오는 어벤저스 급 포스팅이 되겠다.(빈도만 따진다면…). 최근 스마트폰, 디지털 카메라에 탑재되고 있는 동영상 촬영 스펙은 UHD급 까지 발전하였으며 실제 촬영해 보면 충분히 뛰어난 화질로 상당한 만족감으로 주고 있다. 디지털 카메라로 촬영된 영상을 방송에 내보낼 정도로 commercial image sensor의 품질은 많이 좋아졌다.

머신 비전용 카메라를 다른 말로 표현하면 그냥 동영상 촬영이 가능한 카메라이다. 기계식 셔터 없이 노출을 제어하고 연속적으로 영상을 촬영할 수 있는 카메라 이다. 그렇다면 스마트폰, 디지털 카메라에서 사용하는 이미지 센서를 머신 비전에 사용할 수 없을까? 결론부터 말하면 부분적으로는 가능하다. 그리고 “부분적” 이라는 단어를 붙이게 된 가장 큰 이유는 Rolling shutter 때문이다.


 먼저 Rolling shutter는 CCD와는 전혀 관계없는 현상이며 CMOS 센서에서만 나타나는 현상이다. Rolling shutter를 설명하기 이전에 “shutter”의 의미를 먼저 한번 짚고 가 보자. shutter라는 단어는 분명 shut이라는 동사에서 파생된 단어일 것이다. 한글로 풀어 말하면 “무언가를 닫을 수 있도록 만드는 것” 정도가 되겠다. 그리고 이미지 센서 앞에서 닫는다는 것은 “문을 닫아 빛을 막아주는 장치” 정도로 해석 할 수 있지 않을까 생각한다. 여기까지는 형태적인 정의에 가까우며 기능적인 정의를 하면… 빛을 막아준다는 것은 “내가 원하는 시점의 빛만 얻을 수 있도록 해주는 장치” 라고 할 수도 있겠다. 

 이미지 센서는 빛에 반응하는 장치며 항상 빛을 받게 되면 charge를 생성하게 된다. 내가 원하든 원하지 않든 말이다. 그래서 내가 원하는 시점의 빛만 받아들이기 위해 아래 그림과 같은 방법을 사용하게 된다.


    시간의 흐름 중에서, 사용자는 ↔로 표시된 시점의 빛만 받고 싶어 한다. 즉 사용자가 원하는 시점의 빛만을 얻는 “shutter” 기능이 필요하다. 이미지 센서에서 셔터의 기능을 구현하는 방법은 아래 3가지 사실에 따른다. 


1. 빛을 받게 되면 항상 charge는 생성된다.

2. 필요 없는 구간의 charge는 pixel reset 기능을 통해 버린다.

3. 필요한 구간의 charge는 read out 하여 출력한다.


 종합하면 사용자가 원하는 노출시간이 시작하는 지점에서 pixel reset을 통해 내부의 charge를 비워 놓고 exposure time만큼 쌓인 charge는 read out하여 출력하는 것이다. 이 방법이 우리가 흔히 말하는 전자셔터의 구동 방식이다.


 다시 rolling shutter로 돌아가면…

 Rolling shutter는 이런 전자 셔터의 구동 방식인데, 문제는 이런 셔터 기능을 모든 pixel에 동시에 적용시키는 것이 어렵다는 것이다. 모든 pixel에 쌓여있는 charge를 원하는 시점에 동시에 read out 할 수 있으면 좋겠지만, 이 read out이라는게 그렇게 간단하지 않다. charge의 양을 측정하여 전압을 생성하고 이를 digital 신호로 변환하고 data 출력까지 해줘야 한다. 모든 pixel을 동시에 하는 것은 물론이며 한번에 1개의 pixel를 처리할 수밖에 없다. 일반적인 CMOS image sensor는 read out register라는 공간을 통해 한번에 한 줄의 row를 가져와 1pixel씩 처리한다. 여기서 1개의 row를 가져오는 시점이 exposure end가 이루어 지는 순간이 된다. 그러다 보니 각각의 row의 exposure end 타이밍이 차이가 나게 된다. 그림으로 표현하면 아래처럼 4번의 row line을 전송하는 과정이 된다.

   


 이렇게 각각의 row를 순차적으로 read out할 때 object가 움직이게 되면 어떻게 될까? 

좌측의 그림처럼 이미지 센서가 보고 있는 영역에서 파란색 세로 막대가 우측으로 평행 이동하고 이를 Rolling shutter로 촬영하게 되면 우측의 그림처럼 보이게 된다. 아래에 위치한 row부터 순차적으로 readout을 하고 각 row에서는 exposure time 동안 object가 움직인 만큼 image blur가 발생하게 된다.

 가장 쉽게 해당 현상을 볼 수 있는 방법은 차를 타고 이동하는 도중 창 밖의 가로수를 스마트폰으로 촬영해 보자. 가로수들이 비스듬히 누워있는 것을 볼 수 있을 것이다. 만약 동영상 촬영 중이라면 이 rolling shutter에 의해 발생하는 현상은 마치 젤리가 울렁거리고 있는 것처럼 보이며 이를 젤로 현상이라고 부른다.


 머신 비전에서는 이런 rolling shutter에 의한 row별 exposure timing 차이 현상을 해결하기 위해 CMOS image sensor를 특별한 형태로 제작한다. 각 pixel에 저장소를 하나씩 만들고 read out이 필요한 시점에 해당 저장소로 각 pixel의 charge data를 이동시킨다. 그리고 저장소에 있는 각 row를 꺼내어 가면서 read out을 진행하게 된다. 이런 방식을 Global shutter 방식이라고 하며 이 기능을 구현하기 위해서는 CMOS 이미지 센서의 pixel에 해당 기능을 수행하기 위한 transistor를 추가적으로 만들어야 한다. 이런 이유로 각 pixel의 크기가 작은 스마트폰 용 image sensor는 각 기능을 수행할 충분한 transistor를 탑재하지 못해 rolling shutter로 동작할 수 밖에 없는 것이다.


 결론은 pixel에 더 많은 transistor를 탑재하여 Global shutter를 구현해야 젤로 현상을 피할 수 있다는 것인 데 다른 방법이 없는 것은 아니다. 정확히 말하면 젤로 현상을 없애는 방법이 아닌 줄이는 방법이 있다.


 2개의, rolling shutter로 동작하는 CMOS 이미지 센서가 있다.

 

 해상도

 최대 fps

 1장 촬영 시 소요시간(read out time)

 CMOS 1

 1920 x 1080

 60fps

17ms

 CMOS 2

 1920 x 1080

 360fps

2.8ms


일반적으로 이미지 센서의 최대 frame rate의 역수는 이미지 1장을 촬영하여 read out하는 시간과 동일하다. 그리고 이 read out 시간 동안 가장 마지막 row와 가장 첫 row의 촬영 시간차가 발생하게 된다. 위에 예시로 든 2개의 이미지 센서로 움직이는 물체를 촬영하게 되면 아래의 그림처럼 보일 것이다. 분명 젤로 현상은 CMOS 2 센서로 촬영했을 때 줄어들 것이며 더 자연스러운 동영상으로 보일 것이다.


<좌측: CMOS 1 , 우측: CMOS 2>


다시 한번 결론 지으면 젤로 현상을 완전히 피하고 싶다면 Global shutter를 사용하고 Rolling shutter를 사용하면서라도 젤로 현상을 줄이고 싶다면 read out time이 짧은 이미지 센서를 선택하는 것이 방법이다. 그리고 read out time은 최대 frame rate을 통해 어느 정도 유추할 수 있다.


 필진 소개



목한상, Kyle Mok

(앤비젼 Product Engineer/카메라 담당)


사진가가 되고 싶었던... 그래서 카메라와 함께 일하는...

카메라 담당 Product Engineer



Posted by 비전만

댓글을 달아 주세요

  1. 정민 2016.08.09 10:37  댓글주소  수정/삭제  댓글쓰기

    포스팅 항상 잘 보고 있습니다.
    이번 내요을 보고 하나 질문이 있어서 질문을 남깁니다.


    맨아래 그림과 설명을 보면
    젤로 현상을 줄이고 싶으면 read out time 이 짧은 이미지 센서를 선택해야 한다라는 설명이 있습니다.
    이 설명 대로라면 CMOS1 이 read out time이 더 짧은 센서로, 이미지가 1, 2번이 바뀐게 아닌가요?

    • 목한상 2016.08.09 13:03  댓글주소  수정/삭제

      먼저 관심을 가지고 봐 주셔서 감사드립니다.

      말씀해 주신 부분이 맞습니다. 위의 표는 1번 센서가 더 짧은 readout 시간을 가지는 것으로 되어 있으며 아래의 이미지는 2번 센서가 더 짧은 readout 시간을 가지는 것으로 되어 있네요.

      한번더 글을 상세히 검토하지 못해 발생한 오류이며 관심을 가지고 지적해 주셔서 정말 감사합니다.

      오류는 바로 수정하도록 하겠습니다.

  2. 김대광 2017.07.08 18:44  댓글주소  수정/삭제  댓글쓰기

    재미있게 잘 읽고 갑니다.
    앞으로는 자주 오도록 하겠습니다.

    좋은 글 감사 합니다.

  3. KT 2018.03.02 02:25  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다.

  4. knamsang 2019.07.19 12:35  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 궁금한 점이 있어 문의드립니다. CMOS 센서에서 read out register를 통해 한 줄의 row를 가져와 한 pixel을 처리한다 하였는데, 그럼 한 row 전체 pixel을 처리하려면 row당 column번의 read out이 필요한 것인가요? 아니면 한 row를 가져와 한 row 전체를 처리하는 것인가요?