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

1. 배경 영상은 입력 영상의 평균적인 영상로 생각할 수 있는데, 이것은 적당한 스케일(필터 사이즈)의 가우시안 필터를 적용하여서 얻을 수 있다. 이 필터를 적용하면 입력 영상에서 필터 사이즈보다 작은 스케일은 무시하는 효과를 준다.
2. 입력 영상의 반사 성분(배경 조명에 무관한)은 입력 영상을 앞서 구한 배경 영상으로 나누면 된다
3. Retinex 출력은 이 반사 성분에 로그 값을 취한 것이다. 로그를 취함으로써 반사 성분이 분포 범위(=dynamic range)를 압축하는 효과를 얻는다.

- 입력 영상: $I(x, y)$ ;
- 가우시안 필터: $G_{\sigma }(x, y)=A\exp [-(x^2+y^2)/2\sigma^2]$
- 배경 영상: $(G_{\sigma}*I)(x, y) = \text{Gaussian convolution}$;

- Retinex 출력:
\begin{align}R(x,y;\sigma)&=\log[\text{반사 성분}] \\ &=\log[\text{입력 성분}/\text{배경 성분}]\\ &=\log [I(x, y)] - \log[ (G_{\sigma} * I)(x,y)]\end{align}

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


Retinex 영상을 구할 때 하나의 스케일이 아니라 다중 스케일에 대해서 적용한 retinex 영상을 적절한 가중치($\omega_\sigma$)를 주어서 더한 결과를 출력 영상으로 사용할 수 있다. 이 경우가 MSR(multi-scale retinex) 알고리즘이다. $$R_{MSR}(x,y) = \sum_{\sigma\in scales} \omega_{\sigma} R_{SSR}(x,y;\sigma) $$

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

컬러 영상의 경우에 Retinex 출력 영상은 전체적으로 그레이화 되는 경향이 있어서(Gaussian smoothing 때문임) 이것을 보완하기 위해서 아래의 추가적인 처리 과정을 더 거친다.  $$ {\tilde R}_{MSR}^{red}(x,y)=\log \left(\frac{C I_{red}}{ I_{red}+I_{green}+I_{blue}} \right) R_{MSR}^{red}(x,y)$$ $$ {\tilde R}_{MSR}^{grren}(x,y)=\log \left(\frac{CI_{green}}{ I_{red}+I_{green}+I_{blue}} \right) R_{MSR}^{green}(x,y)$$ $$ {\tilde R}_{MSR}^{blue}(x,y)=\log \left(\frac{C I_{blue}}{I_{red} +I_{green}+I_{blue}} \right) R_{MSR}^{blue}(x,y)$$

여기서, $C$는 상수이고, $I_{red}, I_{green}, I_{blue}$는 입력 영상의 RGB-채널이다.


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


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

 

728x90

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

Savitzky-Golay Smoothing Filter  (2) 2010.03.24
Watershed Algorithm 구현  (0) 2010.03.19
Gaussian Mixture Model & KMeans  (4) 2010.01.30
Image Morphing  (0) 2010.01.24
Fant's Algorithm  (0) 2010.01.22
Posted by helloktk
,