Interpolation(보간법)
ð 총 3가지의 방법으로 나뉘게 된다.
1. Nearest Neighbor Interpolation (최근접 이웃 보간)
è 좌표에서 가장 가까운 화소의 그레이 레벨로 치환한다.
다음 그림에서 보이듯 빨간색 점은 가장 가까운 위치의 화소로 이동하고, 해당 위치의 값을 저장한다.
이후 값을 저장할 때, 범위 외의 값이 나올 수 있기에, Clipping은 필수이다.
[위의 수식은 Clipping한 반환되는 gray level of the pixel 값]
다음과 같은 interpolation은 영상 변환과정에 있어서 속도가 매우 빠르지만 하나의 화소가 여러 번 중복적으로 사용되기에 블록처럼 보이는(visual blockiness) 화질 저하 현상이 발생하게 된다.
[위의 내용을 그린 것이 하단의 사진]
2. Bilinear Interpolation (양선형 보간)
è 1D인 linear interpolation을 2D로 확장한 interpolation이다.
è 앞서 배운 보간법 보다 화질이 많이 개선이 된 방법이며 실제로 많이 사용되기도 한다. 하지만, 그만큼 계산량이 더 많다는 단점이 존재.
(사진 속 I00 ~ I11 은 각각 화소 값을 갖는다.)
다음 보간법을 통해 각 화소 값 사이 위치에 대한 값을 계산하기 위해서는 총 3단계를 거치게 된다.
가장 먼저 주변을 둘러싼 샘플에서 가장 가까운 두 샘플의 가중 평균을 계산한다.
이를 계산한 값이 바로 좌측 사진 하단에 적힌 A & B 에 대한 식이다.
이후 A와 B를 연산한 동일한 방식으로 A와 B사이의 가중 평균을 계산하여 나온 보간된 값이 근처에 있는 4개의 화소의 가중치 평균이다.
1. A 가중 평균 구하기
2. B 가중 평균 구하기
3. A와 B의 가중 평균 구하기
화소 값과 화소 값 사이에 linear interpolation이 수행되어 점진적으로 상하강이 이루어진다.
3. Keys Filters
Bicubic interpolation
è 이를 계산하기 위해서는 16개의 화소가 필요하다.
Cubic convolution filter
ð bicubic interpolation은 다음 두가지 방식으로 개선 가능하다.
è 계산 비용 절감
è 가중 함수 k(x)가 true interpolation이 된다는 요구 사항 완화
n ) 이러한 개선 사항을 모두 구현하려면 이 필터를 사용해야 한다.
cubic = 정육면체를 뜻한다. (=3D) / true interpolation = 샘플 화소 값의 변화가 없다.
다음 필터를 사용하기 위해서는 총 5번의 연산 과정을 거쳐야한다.
(1D * 5번이 계산량을 더 줄여준다)
먼저 다음과 같은 함수로 이루어진 그래프를 하단(우측)의 표에 그리고, 각 위치에 맞는 화소 값과 계산을 하여 나온 출력물이 우측 사진 속 그래프의 파란색 기둥(=출력 화소 값)이다.
수평 방향으로 좌,우 의 화소 위치는 좌측의 그림처럼 구하고자 하는 샘플 주변 16개의 점을 토대로 구한다.
예를 들어, 1번째 줄이면 Ibb , I0b , I1b , I2b 가 해당된다.
이러한 과정을 총 4번 반복하며 파란색 기둥(=출력 화소 값)을 4개 모아준다.
모아진 기둥은 다시 동일한 과정을 수직 방향으로 연산 해 주면 최종적으로 interpolation의 값이 나타나고, 이는 bilinear interpolation보다 더 부드러운 영상을 추출할 수 있다.
다음과 같은 interpolation의 kernel 수식(=k(x))을 보면 두가지의 변수 b&c 가 존재한다.
*kernel 을 어떻게 설정해주냐 에 따라 그래프의 곡선이 다르게 나타나게 된다.
[b + 2c = 1 다음 공식이 가장 이상적인 화질이다.]
b = B-spline을 위한 것으로, 영상을 전체적으로 부드럽게 만드는 역할을 한다.
c = cardinal spline을 위한 것으로, 영상을 전체적으로 자연스럽게 만들기 위한 변수로 사용되며, 주로 1/2 라는 값이 사용된다.
Catmull – Rom (cubic convolution) interpolation <b=0 / c=1/2>
[a = -1/2가 되면 일치한다.]
a가 -0.5 일 때를 주로 사용하며, 함수의 그래프를 살펴보면 음수로 내려가는 부분도 존재하는데 이로 인해 음수 값이 나오거나 255를 초과하는 값이 나오는 상황을 방지하고자 clipping하는 과정이 필수적으로 필요하다.
일반적으로 총 5번의 1D interpolation 과정이 필요하다.
+) 16개의 주변 픽셀 샘플이 필요.
ð 좌측 = 실제 화소 값 / 우측 = interpolation 된 값 (*5배)
B-spline interpolation <b=1 / c=0>
è 가장 부드러움
이는 위의 interpolation과는 다르게 음수로 내려가는 부분이 없는 양수 값만 존재하기에 clipping을 할 필요가 없다. 다만, 최고점이 1이 아닌 1보다 낮은 값을 갖기에 true interpolation이 아니다.
ð 좌측 = 실제 화소 값 / 우측 = interpolation 된 값 (*5배)
'공부 > 영상처리' 카테고리의 다른 글
[영상처리]Gaussian Kernel 2D (0) | 2022.11.04 |
---|---|
[영상처리]Warping (0) | 2022.11.03 |
[영상처리]Graylevel Histograms (0) | 2022.11.01 |
[영상처리]Graylevel Transformations (0) | 2022.10.31 |
[영상처리]Geometric transformation(process) (0) | 2022.10.30 |