'10 bit'에 해당되는 글 1건

  1. 2016.08.22 [머신비전]카메라 출력 bit depth 8bit 10bit 12bit (5)

[카메라 기술 백서 #9] 카메라 출력 bit depth 8bit 10bit 12bit


  업무를 하다 보면 고객에게 가끔 이런 요구를 받는 경우가 있다. “검사 대상을 촬영한 영상에서 매우 적은 양의 gray 차이까지 구분해야 해서 8bit 출력으로는 부족합니다. 10bit나 12bit가 지원되는 카메라가 있으면 소개 바랍니다.”


 먼저 8bit / 10bit / 12bit는 무엇을 의미하는 것이며 왜 이런 차이가 발생하는지부터 알아보자. 8bit / 10bit / 12bit 출력과 같은 spec은 output bit depth라고 하며 이를 설명하기 위해 Digital과 Analog의 차이부터 시작해야 하지만 이건 독자를 너무 무시하는 처사로 보여 바로 bit depth에 대해 설명 하겠다.


디지털신호는 0과 1의 조합을 통해서 데이터의 크기를 나타내는 수단 중 하나이다. 그리고 bit depth는 몇개의 자릿수를 사용하여 표현할 것인가에 대한 것이다. 0과 1만을 사용한 숫자를 몇 자리 사용하는가 이며 아래는 8bit / 10bit / 12bit를 예시로 들었다.


 그래 여기까진 다 알고 있다. 그런데 이런 bit depth를 이용해서 영상의 밝기를 표현하면 어떨까. 아래 문제를 한번 풀어 보자.


문제. 다음 보기 중 가장 밝은 pixel data는?

  1. 128DN (8bit)
  2. 512DN (10bit)
  3. 2048DN (12bit)

답은 없다. 3개 모두 동일한 밝기의 pixel data가 된다. 우리가 보고 있는 영상에서 가장 어두운 영역은 0DN 그리고 가장 밝은 영역은 bit depth별로 달리 표현된다.



Bit depth는 결국 동일한 밝기 범위를 얼마나 숫자로 잘게 쪼개는데 있는 것이다.


 이제 센서를 한번 들여다 보자. 실제 카메라에서 output bit depth가 결정되는 곳은 2곳이 있다. 첫 번째로는 analog 형태의 전압을 digital 형태로 변환 시키는 Digitization 과정이다.



위 그림에서 Digitization 부분에 있는 계단이 256단계이면 8bit 출력 4096단계이면 12bit 출력이 될 것이다. Digitization을 하는 소자는 ADC이며 이 ADC의 출력이 10bit라면 이후의 데이터는 10bit의 분해능을 넘는 것은 불가능 하다. 그리고 이후의 image processing은 이 10bit scale의 데이터를 통해 이루어 진다. 그리고 카메라 사용자가 8bit 출력을 원한다면 10bit data를 8bit로 down scale하여 출력하게 된다. 뭐 간단하게 4로 나눈 출력을 최종적으로 내보내게 된다.

 그렇다면 10bit / 12bit 출력은 언제 필요한 것일까? 아래 그래프는 적당한 난수를 생성해서 8bit와 12bit 형태로 표현해 보았다. 만약 내가 검출해야 하는 대상이 8bit 기준 3DN 정도의 차이를 보이는 검은색 화살표 표시지점이면 8bit scale로도 충분하다 말할 수 있다. 그러나 오랜지 색 화살표로 표기된 부분을 검출해야 한다면 8bit bit depth로 프로세싱 하기엔 어려움이 따른다.



그러나 한가지 문제가 있다. 위의 오랜지색으로 표시된 부분이 정말 defect라 보증할 수 있을까? shot noise와 같은 random성을 지닌 노이즈가 아니라는 것은 어떻게 보증할 수 있을지에 대한 해답이 필요하다.

 그러므로 기본적으로 카메라가 가지고 있는 spec이 내가 검출 하고자 하는 defect을 충분히 구분해 낼 수 있는 능력을 가지고 있는지 검토하고 output bit depth 변경을 고려하는 것이 순서이다.


 여기까지 쓰려고 했지만 다시 읽어보니 그래서 어쩌라고? 라는 목소리가 어딘가에서 들리는 것만 같다. 그래서 어떤 상황에서 10bit, 12bit output을 이용하는 것이 검사를 더 유리하게 할 수 있을지 한번 생각해 보자.  랜덤하게 발생하는 노이즈가 8bit 1DN을 넘어서지 않는다고 가정해 보자 8bit scale 0.2DN정도 오르락 내리락 한다고 하면. 8bit scale 0.5DN의 불량은 카메라가 감지할 수 있을 것이다.(실제 소수점 이하 출력은 없다. 단순 가정이라 생각하자) 이럴 때는 10bit bit depth를 사용하는 것이 유리할 것이다.

 그럼 뭔가 답이 보이는 것 같다. random하게 발생하는 노이즈가 8bit 1DN 이하라면 bit scale을 올리는 것이 유리하다는 말이 된다. 이제 과거 포스팅을 복습할 때가 왔다. Random하게 발생하는 노이즈는 readout noise와 shot noise가 있다고 한 포스팅이 어딘가에 있다.(링크는 비전양이 알아서 달아줄 것이다. [머신비전]영상 품질을 결정하는 '카메라 노이즈' 파헤치기) readout nosie는 어두울 때와 밝을 때 모두 나타나고 photon shot noise는 빛이 강해질수록 같이 강해지게 된다. 발로 마우스를 잡고 그래프를 대충 그리면 아래 그림과 같다. 



Total noise가 가장 적은 구간이 이제 눈에 보일 것이다. 절대적인 random한 노이즈 양이 가장 적은 어두운 구간에서는 8bit 1DN을 노이즈가 넘지 않을 가능성이 가장 높다. 그러므로 10bit, 12bit scale은 결국 어두운 구간에서 명암차를 더 효과적으로 구분할 수 있는 도구가 될 수 있다. 기본적으로 카메라의 spec이 충족해야 이런 방법이 효과가 있다는 점을 한번 더 강조하고 글을 마친다.


 필진 소개



목한상, Kyle Mok

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


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

카메라 담당 Product Engineer



Posted by 비전만

댓글을 달아 주세요

  1. 비전돌이 2017.02.24 16:47  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 잘보고 있는 독자 중 하나 입니다.

    다른게 아니라 궁금한 부분이 있어 글을 쓰게 되었습니다.

    일반적으로 엔코더 트리거를 라인스캔 카메라에 많이 쓰는데요.

    엔코더 트리거를 쓰는 이유가 무엇인지 궁금하여 글을 남기게 되었습니다.
    (일반 스타트(프레임)트리거 와의 차이점 등)

    감사합니다.

  2. 2017.06.20 09:48  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  3. 2017.09.01 17:15  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다