어푸푸

Image resampling에 대하여 본문

잡동사니/IT

Image resampling에 대하여

예수님부처 2019. 12. 1. 22:42

사실 이전 포스트에서 이미지 리샘플링 방법에 대하여 다룬적이 있다. 이미지 리샘플링을 사용하는 대표적인 것이 이미지 업스케일링이기 때문에 그렇다.

이미지 리샘플링 방법에는 많은 방법들이 널리 알려져있다. Bilinear, Bicubic, Nearest integer, Lanczos, ... 그런데 최근 내 개인 연구를 진행하다가 Lanczos 방법이 별로 안좋다는 것을 확인했다.

요는 이렇다. 이미지 리샘플링 방법은 기본적으로 2D interpolation이라고 볼 수 있는데, 연구 과제의 특성 상 2D interpolation을 해야 했다. 그 때 계산 비용은 좀 있어도 성능이 꽤 괜찮다고 알려져있는 Lanczos resampling 방법을 사용했는데, 이게 이미지로 보았을 때는 모르고 보면 티가 나지 않았지만, 수치적인 관점에서 접근을 해보다 보니 문제가 크게 있는 것을 발견한 것이다. 결국 내가 원래 쓰려던 용도로 Lanczos 방법을 사용하지 못했다. 물론 해당 문제를 발견한 후에 Lanczos 방법으로 처리한 이미지를 보니 수치적인 계산에서 나타났던 특징을 인지할 수 있었다. 물론 모르고 보면 잘 안보인다.

해당 문제에 대해서 간략하게만 서술해보고자 한다. 내가 인지한 Lanczos 방법의 문제점은 monotonic한 결과가 나오지 않는다는 것이다. 다시 말해 부드럽게 올라가야 할 데이터들에서 출렁출렁하는 파형이 관찰된다는 것이다. 예를 들어서 다음과 같은 함수를 생각해보자.

$z = x^2 + y^2$

x와 y가 각각 -2부터 2까지의 값을 0.5 간격으로 가지면 총 9X9 = 81개 포인트가 되는데, 이 지점들의 값을 샘플 데이터로 사용하고, 중간에서의 값을 보간(interpolate)해보자. 잘 보이라고 조명도 집어넣었다.

Exact solution과 샘플 데이터 포인트 분포
Interpolation method: Nearest interger
Interpolation method: Bi-linear
Interpolation method: Lanczos resampling (a = 1)
Interpolation method: Lanczos resampling (a = 2)
Interpolation method: Lanczos resampling (a = 3)
Interpolation method: Cubic convolution interpolation

 

보이는가? Lanczos 기법은 a를 1로 쓸 경우에는 도저히 쓰지 못할 값이 산출되고, a가 올라가도 저런 찌글찌글한 모습이 관찰된다. 이걸 어떻게 연구용으로 써... 이 현상을 인지하고 Lanczos 방법으로 스케일링된 이미지를 보면 저런 현상을 관찰할 수 있다. 물론 눈으로는 그렇게 두드러지게 안나타난다. Cubic convolution interpolatoin 기법의 경우 Lanczos 방법과 비교해서 계산 비용도 더 작고, 결과도 더 좋은 결과를 주는데, 개인적인 바램으로는 사악한 Lanczos 기법이 사라지고 그 자리를 Cubic convolution interpolation 기법이 차지했으면 좋겠다.

내가 생각했을 때는 수치적인 관점에서 Lanczos 기법은 겉만 그럴싸한 개살구 같은 기법이다. Interpolation 기법은 일반적으로 보간 간격이 좁아질수록 오차가 줄어들어야 하는데, 이 정신나간 기법은 보간 간격이 줄어들면 오차가 늘어나기 때문이다. 이는 아래 그림과 같이 1D 문제에서 아주 잘 관찰할 수 있다. 이를 논문으로 쓰지는 않겠지만, 이런 사실이 공론화 되어서 퇴출 되었으면.. 당장 나도 Lanczos 기법이 좋은 기법이라 들어서 그렇게 믿고 있지 않았는가?

1D interpolation: Lanczos
1D interpolation: Cubic convolution interpolation