[카메라 기술 백서 #4]머신비전에서 노이즈가 최소화 된 영상을 촬영하는 방법_Calibration


  앞서 카메라에서 발생하는 노이즈에 대해 살펴 보았다. 노이즈는 그런 이유로 그렇게 발생한다는 것은 알겠는데 어떻게 노이즈를 제거하는 가에 대해서는 이번 포스팅에서 다루겠다. 이번 포스팅을 읽기에 앞서 먼저 지난 포스팅에서 설명한 노이즈 종류를 살펴보자.(아래 글 제목 클릭)


[머신비전]영상 품질을 결정하는 '카메라 노이즈' 파헤치기



 NOISE

 Dark

 White

 Fixed Pattern Noise

 Dark FPN

 Photo response non-uniformity

 Temporal Noise

 Dark random noise

 Photon shot noise


먼저 고정된 형태를 가지고 있는 노이즈인 Dark FPN과 Photo response non-uniformity(PRNU)는 Camera Calibration을 통해 제거 가능하다. 



  위측의 그래프는 입사되는 광량에 대비한 A, B, C 픽셀 각각의 출력을 나타낸 그래프 이다. 먼저 Pixel B는 사용자가 원하는 반응도를 가지는 Pixel이며 빛이 없을 때 0값을 출력하고 빛이 강해짐에 따라 사용자가 원하는 적당한 출력을 가진다. 그러나 Pixel A는 빛이 없음에도 일정량의 출력을 가지고 있고 Pixel C는 더 많은 출력 값을 가진다. 그리고 빛의 양이 증가함에 따라 Pixel A는 Pixel B에 비해 더 빠르게 출력 값이 증가하고 Pixel C는 Pixel B에 비해 더 느리게 출력 값이 증가한다. 빛이 없을 때 나타나는 출력 값은 Dark FPN이며 빛에 대해 서로 다른 반응을 보이는 것은 PRNU라는 것은 이미 알고 있으리라 생각한다. 이런 Dark FPN과 PRNU를 Calibration을 통해 제거하는 방법을 설명하기 위해 위의 그래프를 수식으로 비유해 보면 아래처럼 표현할 수 있다. +값으로 표기된 부분은 Offset dark signal이며 x값으로 표기된 부분은 반응도 즉 감도라 할 수 있다.


Pixel A : output=2.5 x Illumination +15

Pixel B : output=2 x Illumination +0

Pixel C : output=1.5 x Illumination +25


  결론부터 말하면 Pixel A와 Pixel C의 수식을 Pixel B과 같이 변경하는 것이 Camera의 Calibration 이다. Pixel A에 15를 빼고 2/2.5를 곱하면 Pixel B와 같은 수식을 얻을 수 있다는 것은 쉽게 계산 가능할 것이다. 마찬가지로 Pixel C에는 25를 빼고 2/1.5를 곱함으로 Pixel B와 같은 수식을 얻을 수 있다. 여기서 빼는 값은 카메라 calibration에서 FPN coefficient 라 부르고 곱하는 값은 PRNU coefficient라 부른다. 그리고 수식을 변화 시키는 과정에서 보듯 FPN coefficient를 PRNU coefficient보다 먼저 적용시켜야 정상적으로 수식 변환이 일어난다. 

 종종 Camera의 Calibration에 대해 카메라의 출력 값을 변경시킴으로 왜곡된 결과가 나올 것이라는 잘못된 선입견을 가지고 있는 분들이 있으나 이는 물리적으로 발생할 수 밖에 없는 각 Pixel의 반응도를 일관성 있게 조정하는 작업으로 카메라의 성능 향상에 분명한 도움을 준다.


  고정된 패턴 형태로 발생하는 노이즈는 Calibration으로 제거가 가능하나 시간에 따라 달라지는 랜덤 한 노이즈는 사실상 user level에서 제거하기는 쉽지 않다. 여기서는 가장 간단하게 제거할 수 있는 방법을 소개하겠다. 과거 포스팅에서 설명한대로 Temporal noise는 양자화된 광자의 Random 성에 의해 발생하므로 완전히 제거하는 것은 불가능하며 감소시키는 방법을 사용해야 한다. N개의 광자를 받을 때 발생하는 노이즈의 편차는 sqrt(N)이 되며 SNR 공식에 따라 SNR은 N / sqrt(N) 이 된다. SNR을 늘리기 위해서는 N값을 무한정 높여야 하며 N 값을 높인다는 것은 쉽게 말해 많은 빛을 받아 들인다는 것이다. 그러나 Pixel은 제한된 공간을 가지고 있으므로 User가 하나의 Pixel이 무한정 많은 빛을 받을 수 있도록 하는 것은 센서를 변경하지 않고는 불가능하다. User가 할 수 있는 방법은 한정된 공간을 가진 Pixel을 수번 반복하여 사용함으로써 더 많은 N 값을 확보할 수 있다. 그림으로 쉽게 설명해 보면. 아래와 같이 강수량 측정을 위한 비커를 1사용함으로써 발생하는 오차를 줄이기 위해 동일한 비커를 8개 사용하여 측정하는 것이다. 




  이런 방법을 통해 user는 N의 값을 8배로 늘릴 수 있으며 결과적으로 SNR 값은 2.8배(sqrt(8)) 만큼 증가하게 된다. 이런 방법은 카메라 제조사에서도 사용하고 있으며 Multi-line을 이용한 line scan에서 감도를 증가시키지 않고 노이즈를 향상하는 방법으로 사용하거나 Area scan에서 Multi shot 기능을 통해 구현된다.



 필진 소개



목한상, Kyle Mok

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


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

카메라 담당 Product Engineer



Posted by 비전만

댓글을 달아 주세요

  1. 엠브이텍 연구소 2015.11.25 08:35  댓글주소  수정/삭제  댓글쓰기

    음.. 그럼 결론적으로 PRNU 노이즈 제거는 Multishot의 Mean을 구하는 개념인거나 마찬가지인것인데.. 멀티라인스캔 제외하고 에어리어카메라로 고속으로 무빙하는 오브젝트를 촬영하는 경우에 대해서는 적용이 안될 듯 싶은데 이것은 솔루션이 있나요?

    • Favicon of http://envision.kr BlogIcon 목한상 2015.11.25 16:49  댓글주소  수정/삭제

      먼저 용어 정리가 필요할 듯 합니다. PRNU 노이즈는 개별 pixel의 감도 차이라 할수 있고 Multishot을 통해 제거하는 노이즈는 시간에 따라 랜덤한 shot noise입니다.

      고속 무빙 오브젝트를 촬영시 랜덤하게 발생하는 shot noise제거에 관한 솔루션을 문의하신 것으로 보이기에 이에 대한 답변을 드립니다.

      만약 필요한 해상도가 4M (2048 x 2048)이라고 가정하면 영상을 16M (4096 x 4096)으로 동일 FOV를 촬영합니다. 그리고 각 4개 pixel을 Average 하는 방법을 사용하게 되면 비슷한 효과를 얻을 수 있을 것으로 생각됩니다.

      각 4개의 pixel의 합을 이용해서 4M로 출력하게 되면 4배 높은 감도를 얻을 수 있고(pixel binning과 같은 개념) 평균을 이용해서 4M로 출력하면 랜덤 노이즈에 대한 이득을 얻을 수 있습니다.

      그러나 일반적으로 고속 moving object 촬영시에는 노출시간이 필연적으로 짧아지고 경우에 따라서는 Gain을 사용해야 하는 경우도 있습니다. 위 방법 적용이전에 충분한 조명을 확보하는 것이 첫번째라 생각합니다.

  2. 넥스 2017.10.19 23:17  댓글주소  수정/삭제  댓글쓰기

    블로거님, 안녕하세요
    글을 잘 보고 많은 지식을 얻어갑니다!
    하나 여쭤보고 싶은 내용이 있는데요,
    1개의 고정된 Pixel을 반복 사용(위에서는 8번)하여 N값을 높힌다고 설명해 주셨는데,
    '반복 사용한다'라는 의미가 잘 이해가 가지 않아서요..
    Pixel을 reset하기 전에 8 time의 광량을 저장해서 사용한다는 의미인가요?
    자세한 설명을 부탁드립니다.

[카메라 기술 백서 #2]머신비전 카메라 기술_카메라의 감도는 왜 다를까?


  전 검사 시스템에서 감도의 중요성은 지난 포스팅(2014/06/27 - [머신비전 기술 백서/카메라] - 카메라의 감도, 대체 누가 더 밝은거야?)에 언급하였고, 이제 실제 어플리케이션에서 어떤 카메라가 더 높은 감도를 가지고 있는지 찾을 수도 있을 것이다. 이번 포스팅에서는 비슷한 사양의 카메라들이 왜 서로 다른 감도를 가지고 있는지 알아보겠다.


카메라 감도에 영향을 미치는 요소 3가지

  

  카메라가 빛을 받아 데이터를 출력할 때까지 아래와 같은 과정을 거친다.


  

  대략적으로 설명하면 빛을 받은 Pixel은 광전효과를 통해 e-을 생성하고 Readout회로를 통해 전압으로 변환한다. 변환된 전압은 Analog offsetAnalog gain을 통해 조정되고 ADC 컨버터가 Voltage를 digital 값으로 변환한다. 변환된 Digital Data는 적절한 Image processing(Calibration, LUT…)을 거쳐 출력된다.  

  데이터 변환 과정에서 감도에 영향을 미치는 요소는 Pixel의 크기, Readout시 변환효율, Analog Gain이며 이 값에 따라 카메라의 감도가 결정된다. 각 요소에 따라 어떤 영향을 미치는지 항목별로 알아보자.


1. Pixel의 크기와 부피

  

  서로 다른 Pixel 크기를 가진 3가지 경우를 한번 가정해 보자. 두 개의 pixel은 상당히 큰 부피를 동일하게 가지고 있고 다른 하나는 상대적으로 적은 pixel 부피를 가지고 있다. 그리고 2개의 픽셀은 빛이 입사하는 부분의 면적이 동일하다. 우리가 사용하는 카메라의 출력은 8bit 형식을 사용할 경우 0~255DN 범위로 언제나 동일하다. 이런 상황에서 동일한 양의 빛이 3개의 pixel에 동시에 입사한다면 그 출력 값은 어떻게 될까?



면적당 동일한 양의 빛이 입사하였을 때 1번 pixel과 2번 pixel에 쌓이는 전자의 양은 동일하나 입사 면적이 큰 3번 pixel은 더 많은 양의 전자가 쌓인다. 그리고 각 픽셀에서 전자가 차지하고 있는 비율은 각기 다르게 된다. 여기서 유의할 점은 영상 데이터 출력 값은 픽셀의 전체 부피에 대비하여 전자가 차지하고 있는 비율이 된다는 것이다. 아래 표를 보면 좀 더 쉽게 이해할 수 있을 것이다.


 일반적으로 우리가 말하는 pixel의 크기는 위 값 중에서 입사면 면적이라 할 수 있다. 위의 표에서 볼 수 있듯 pixel의 크기(입사면 면적)가 크다고 출력 값이 무조건 높은 것은 아니며 pixel의 부피도 상관관계가 있다. Pixel의 부피는 pixel에서 생성된 전하를 품을 수 있는 최대 양이며 Full well이라는 용어를 사용한다. 이번 포스팅에서는 ‘pixel size와 full well이 복합적으로 감도에 영향을 미친다’ 정도까지만 설명하고 더 자세한 사항은 향후 포스팅에서 다루겠다.

2. Readout 변환 효율

  광전효과에 의해 생성된 charge는 Readout시 Voltage로 변환된다. 이때 floating diffusion node의 capacitance(CFD)에 따라 변환 효율이 결정된다. 이 변환 효율에 따라 출력되는 voltage swing 폭이 달라지며 이는 감도와 직결되게 된다. CFD 값을 줄여 감도를 크게 높이면 좋겠지만 이 값을 줄이면 노이즈에 영향을 미치게 된다. 이 노이즈에 대해서는 이후 포스팅에서 다루는 것으로 하겠다.


3. Analog gain

  Gain에 대해서는 직관적으로 ‘더 밝아지는 것’ 이라고 익히 알고 있을 것이다. Analog gain이 높아지면 더 밝아진다는 말은 너무 당연하므로 넘어가고 다른 면에서 생각해보자. 


  만약 동일한 이미지 센서를 사용하여 2개의 카메라 제조사에서 카메라를 만들었다고 가정해 보자. 그런데 1번 제조사는 1.3x의 analog gain을 사용하였고 2번 제조사는 1.5x의 analog gain을 사용하여 카메라를 제조하였다. 결과적으로 2번 제조사가 더 감도가 높은 카메라를 만들었다. 물론 카메라 spec sheet에도 더 높은 responsity 값으로 표기해 두었다. “뭘 말하고 싶은 거야?” 라고 생각되는 분은 지난 카메라 포스팅을 한번 읽어보길 바란다. 지금은 그냥 “카메라 제조사에서 gain을 높이 세팅해 두면 감도는 더 좋은 카메라가 만들어진다” 정도로만 알아두자.


 필진 소개



목한상, Kyle Mok

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


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

카메라 담당 Product Engineer


Posted by 비전만

댓글을 달아 주세요