Retinex 알고리즘은 영상의 contrast를 향상시키거나, sharpness를 증진시킬 때 많이 사용한다. 또한 픽셀값의 dynamic range가 큰 경우에 이것을 압축시켜 영상 데이터 전송에 따른 병목현상의 해소에 이용할 수 있다.

Retinex 알고리즘의 기본원리는 입력영상에 들어있는 배경성분을 제거하는 것이다.
1. 배경영상는  입력영상의 평균적인 영상로 생각할 수 있는데, 이것은 적당한 스케일(필터사이즈)의 가우시안 필터를 적용하여서 얻을 수 있다. 이 필터를 적용하면 입력영상에서 필터사이즈 보다도 작은 스케일은 무시하는 효과를 준다.
2. 입력영상의 반사성분(배경조명에 무관한)은 입력영상을 앞서 구한 배경영상으로 나누면 된다
3. Retinex 출력은 이 반사성분에 로그값을 취한 것이다. 이 로그값을 취하므로써 반사성분이 분포범위(=dynamic range)를 압축하는 효과를 얻는다( 원래 로그함수는 큰 수의 연산을 작은 수의 연산으로 바꾼다)
- 입력영상 = I(x, y) ;
- 가우시안 필터 = G(x, y) = A exp(-(x2 + y2 )/2σ2)
- 배경영상 = G(x, y)* I(x, y) = convolution;
- Retinex 출력 
   R(x, y) = log(반사성분)
             = log(입력영상/배경영상)
             = log(I(x, y)) - log(G(x, y)* I(x, y));


이처럼 하나의 스케일에 대해서 적용하는 경우를 SSR(single-scale retinex)알고리즘이라고 한다. 컬러영상의 경우에는 각각의 RGB채널에 대해서 알고리즘을 적용하면 된다.

Retinex 영상을 구할 때 하나의 스케일이 아니라 여러가지 스케일에 대해서 적용한 retinex 영상을 적절한 가중치를 주어서 합한 결과를 출력영상으로 사용할 수 있다. 이 경우가 MSR(multi-scale retinex)알고리즘이다.

  Rmsr(x,y) = i wiRssr(x,y) = i (가중치) * SSR.

이렇게 얻은  Retinex 영상은 적당한 offset과 stretching을 하여서 픽셀값이 [0,255]구간에 있게 조절한다. 이 과정은 Retinex 출력영상 픽셀의 평균값과 편차를 구하여서 분석할 수 있다.

컬러영상의 경우에 Retinex 출력영상은 전체적으로 그레이화되는 경향이 있어서 이것을 보완하기 위해서 아래의 추가적인 처리과정을 더 거친다.

   R'msr(x,y)_red = log(C* Ir/(Ir + Ig + Ib)) * Rmsr(x,y)_red ;
   R'msr(x,y)_gre = log(C* Ig/(Ir + Ig + Ib)) * Rmsr(x,y)_gre ;
   R'msr(x,y)_ble = log(C* Ib/(Ir + Ig + Ib)) * Rmsr(x,y)_blu ;


여기서, C는 상수값이고, Ir, Ig, Ib는 입력영상의 RGB-채널이다.

*그레이 이미지 처리 결과:


*구현 코드는 다음을 참고: 그레이: http://kipl.tistory.com/33 
                               컬러: http://blog.naver.com/helloktk/80039132534
* 기술적으로  log를 취하므로 입력영상에 +1을 더해서 log(0)이 나오는 것을 방지해야 한다.
* convolution된 영상도 1보다 작은 경우에 1로 만들어야한다.
* 스케일이 큰 경우에 필터사이즈가 매우 크므로 효과적인 convolution 알고리즘을 생각해야 한다. 보통 recursive 필터링을 하여서 빠르게 convolution결과를 얻는다.

저작자 표시 비영리 변경 금지
신고

'Image Recognition' 카테고리의 다른 글

Savitzky-Golay smoothing filter  (2) 2010.03.24
Watershed Algorithm Code  (0) 2010.03.19
Retinex 알고리즘  (10) 2010.02.03
Gaussian Mixture Model & KMeans  (4) 2010.01.30
Image Morphing  (0) 2010.01.24
Fant's Algorithm  (0) 2010.01.22
Posted by helloktk