공부/영상처리

[영상처리]Interpolation(보간법)

오비루 2022. 11. 2. 15:24
728x90
728x90

Interpolation(보간법)

ð  3가지의 방법으로 나뉘게 된다.

 

1. Nearest Neighbor Interpolation (최근접 이웃 보간)

è  좌표에서 가장 가까운 화소의 그레이 레벨로 치환한다.

 

 

 

다음 그림에서 보이듯 빨간색 점은 가장 가까운 위치의 화소로 이동하고, 해당 위치의 값을 저장한다.

 

반올림 수식

 

이후 값을 저장할 때, 범위 외의 값이 나올 수 있기에, Clipping은 필수이다.

 

[위의 수식은 Clipping한 반환되는 gray level of the pixel ]

 

다음과 같은 interpolation은 영상 변환과정에 있어서 속도가 매우 빠르지만 하나의 화소가 여러 번 중복적으로 사용되기에 블록처럼 보이는(visual blockiness) 화질 저하 현상이 발생하게 된다.

 

[위의 내용을 그린 것이 하단의 사진]

 

2. Bilinear Interpolation (양선형 보간)

è  1Dlinear interpolation2D로 확장한 interpolation이다.

è  앞서 배운 보간법 보다 화질이 많이 개선이 된 방법이며 실제로 많이 사용되기도 한다. 하지만, 그만큼 계산량이 더 많다는 단점이 존재.

 

[Bilinear interpolation 의 수식 ]

 

 

(사진 속 I00 ~ I11 은 각각 화소 값을 갖는다.)

다음 보간법을 통해 각 화소 값 사이 위치에 대한 값을 계산하기 위해서는 총 3단계를 거치게 된다.

가장 먼저 주변을 둘러싼 샘플에서 가장 가까운 두 샘플의 가중 평균을 계산한다.

이를 계산한 값이 바로 좌측 사진 하단에 적힌 A & B 에 대한 식이다.

이후 AB를 연산한 동일한 방식으로 AB사이의 가중 평균을 계산하여 나온 보간된 값이 근처에 있는 4개의 화소의 가중치 평균이다.

1.     A 가중 평균 구하기

2.     B 가중 평균 구하기

3.     AB의 가중 평균 구하기

화소 값과 화소 값 사이에 linear interpolation이 수행되어 점진적으로 상하강이 이루어진다.

 

3. Keys Filters

 

Bicubic interpolation

è  이를 계산하기 위해서는 16개의 화소가 필요하다.

Cubic convolution filter

ð  bicubic interpolation은 다음 두가지 방식으로 개선 가능하다.

è  계산 비용 절감

è  가중 함수 k(x)true interpolation이 된다는 요구 사항 완화

n이러한 개선 사항을 모두 구현하려면 이 필터를 사용해야 한다.

cubic = 정육면체를 뜻한다. (=3D) / true interpolation = 샘플 화소 값의 변화가 없다.

320x100

다음 필터를 사용하기 위해서는 총 5번의 연산 과정을 거쳐야한다.

(1D * 5번이 계산량을 더 줄여준다)

먼저 다음과 같은 함수로 이루어진 그래프를 하단(우측)의 표에 그리고, 각 위치에 맞는 화소 값과 계산을 하여 나온 출력물이 우측 사진 속 그래프의 파란색 기둥(=출력 화소 값)이다.

수평 방향으로 좌,우 의 화소 위치는 좌측의 그림처럼 구하고자 하는 샘플 주변 16개의 점을 토대로 구한다.

예를 들어, 1번째 줄이면 Ibb , I0b , I1b , I2b 가 해당된다.

이러한 과정을 총 4번 반복하며 파란색 기둥(=출력 화소 값)4개 모아준다.

모아진 기둥은 다시 동일한 과정을 수직 방향으로 연산 해 주면 최종적으로 interpolation의 값이 나타나고, 이는 bilinear interpolation보다 더 부드러운 영상을 추출할 수 있다.

 

 

다음과 같은 interpolationkernel 수식(=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)

728x90
반응형

'공부 > 영상처리' 카테고리의 다른 글

[영상처리]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