본문 바로가기

어떻게 할까/소프트웨어

슈퍼 리졸루션/Super Resolution


 개발자K 씨는 오늘도 뛰어난 영상처리 알고리즘을 찾아 해매며, 'fl_imgtk 에 뭘 더 집어 넣어 볼까?' 에 대한 답을 찾던중, Robust And Fast Super Resolution 이란 알고리즘을 발견 합니다. 여기서 사용하는 알고리즘은 Peyman Milanfar 박사MDSP Resolution Enhancement 에 기반을 두고 있는데, 대충 논문 중 충격적인 결과 하나를 보면 ...

저해상도/LR(Low Resolution) 영상을 고품질의 원본에 가까운 복호를 해 줍니다. 즉, 왼쪽(LR) 이미지를 복구하면 가운데 이미지처럼 Blurred 된 영상이 얻어 지고, 여기에서 Deblur 를 하면 가장 오른쪽 영상이 나오게 됩니다. 저해상도 이미지가 가지는 특성을 그대로 살리면서 실제 이미지가 가진 신호의 특성을 살려 원본(또는 그 이상의 해상력)으로 만들어 지는 것인데 ... 이건 제가 그토록 찾던 영상처리 중 하나 입니다.

 또다른 특징 중 하나라면, 다른 이미지 처리와 달리 영상 복구시 인텐시티가 높거나 낮은 부위에 심한 왜곡이 적다는 것이라는 점 인데, 위의 Figure 4 에서 robust method 는 Bilateral TV 를 사용하여 unsharp mask 와 같이 변화가 심한 영역에 왜곡이 생기는 것이 거의 없음을 알수 있습니다.

관련 소스들 ( 모두 OpenCV 를 사용 하고 있음 )

아쉽게도 fl_imgtk 는 OpenMP 정도 ( 컴파일러 단계에서의 multi core threading ) 를 최대의 종속성으로 보는지라, OpenCV 처럼 덩치가 큰 라이브러리 참조성은 피해야 한다고 생각 하고 있습니다.

 위 소스들은 대부분 RGB 에서 Y-Cb-Cr 의 색공간으로 분리 되어 처리 되는데, 대부분 이런 변환을 쉽게 처리 하기 위해 OpenCV 를 많이 쓰고 있습니다. 물론 채널당 256 byte 를 가지는 정보를 64bit float ( double ) 로 바꾸는 것등 조차 역시 OpenCV 에 대한 종속성이 많은 편 입니다.

 그래서 저는 이것들을 none-OpenCV model 로 만들고, 100% OpenMP 또는 single CPU 에 종속성에 후달리는 것으로 반들어 볼 생각 입니다. 아무래도 OpenCV 가 좋지만, 잘 만든 최적화 코드로 OpenMP 정도에 for() 의 배분을 노려 보는 것도 좋은 결과를 얻을 수 있지 않을까? 란 생각을 해 봅니다. (물론 OpenCV 를 좋아 하지 않는 고약한 심보도 있습니다만 ... 이런 코드들은 OpenCV 안돌아 가는 플랫폼에선 쓰지 말라는 소리가 되니...)

 아마 Super resolution 이 잘 된다면, 일부 저질 스캔 문서를 엄청난 수준으로 끌어 올려서 표현 할 수 있는 뷰어나, 원본을 잊어 버려 작은 크기의 이미지만 가지고 높은 해상도의 이미지로 복구 해 주는 뭔가를 만들 수 있지 않을까 합니다. 물론 이런 작업들은 100% 취미 이므로 github 나 bitbucket 둘 중 하나에 올라 갈 것이구요.

 관심 있는 분들이 계시면 티스토리 계정이 있으신 분은 댓글을, 없으신 분은 방명록을 애용 해 주시기 바랍니다.