Geometric Operations
scale
확대(up) : Interpolation of data
Nearest Neighbor Interpolation
원래 x의 점이 4개라고 했을 때, scale up을 두 배로 한다고 하면 8개의 점이 생성되어야 함
여기서 발생하는 점들 중 시작과 끝의 점은 확대하기 전과 똑같이 하고 나머지 6개의 점을 배치시킴
공식 : 점이 아닌 칸수를 세보면 원래는 3칸이었던 이미지가 7칸이 되었으므로 원래 점에서 한 칸씩 늘어날 때마다 3/7을 더해주면 정확하게 나눌 수 있음 -> int형으로 반올림(Neares interpolation)함
점의 개수는 늘어났지만 픽셀값 자체는 변하지 않고 위에서 반올림한 값들에 해당하는 픽셀값을 복사하여 넣어줌 -> 오차가 큼
Linear Interpolation
두 점 을 이어 직선을 만든 후 사이에 있는 점을 구함
예제) f(x1) = 2, f(x2) = 3, f(x3) = 1.5, f(x4) = 2.5 라고 가정했을 때
x4'은 x2와 x3사이에 존재하므로 λ 값은 16/7 - 14/7 = 2/7 이고 f(x4') = 약 2.5714이다.
같은 방식으로 x7'은 위에서 x3과 x4사이에 존재하므로 λ값은 4/7이고 f(x7') = 약 2.0714이다.
매트랩 함수사용
>> t=1:1:4;
>> p=[1 2 3 4];
>> x1=1:3/7:4;
>> y1=interp1(t,p,x,'nearest‘)
y1 = 1 1 2 2 3 3 4 4
>> y1=interp1(t,p,x,'linear‘)
y1 = 1.0000 1.4286 1.8571 2.2857 2.7143 3.1429 3.5714 4.0000
다른 방식, f(x) = a1*x^1 + a0*x^0 로 표현이 가능하고 각 f(0)와 f(1)의 값을 a1, a0에 관하여 구할 수 있음
여기서 y를 [f(0); f(1)] ,B를 [0 1; 1 1], a를 [a1; a0]라고 했을 때 y = Ba라는 공식으로 위 식을 나타 낼 수 있음
그러므로 b = [x1 x0]라고 하면 f(x) = ba가 되고 a = b*(B의 역행렬)*y로 구할 수 있음
예제 : f(0.5) = [0.5 1]*[-1 1;1 0]*y
= [0.5 0.5]*y
= 0.5*f(0) + 0.5*f(1)
Image Interpolation : 위의 두가지 방식은 직선상에서의 Interpolation방식이었는데 Image상에서의 방식은 좀 더 복잡함
data일부를 (x,y), (x,y+1), (x+1,y), (x+1,y+1)로 표현하여 λ값과 μ값을 각각 거리로 가정하고 직선에서 했던 방식을 2번 하면 (x',y')을 구할 수 있음
매트랩 함수
매트랩 기반의 Interpolation : imresize(A, k, 'method')
A : image, k : scaling factor -> k대신 [m,n]으로 써주어 직접 size를 지정 할 수도 있음
method : interpolation type -> nearest, bilinear, bicubic ...
Cubic interpolation : 3차 이상의 곡선위에서의 값을 구함
이렇게 구한 값들을 linear에서 사용했던 것 처럼 부분별로 나누어 구할 수 있음
여기서 좀 더 나아가 Cubic Spline Interpolation이라는 방식에서는 f(0), f(1)과 미분값인 f'(0), f'(1)을 가지고 같은 공식을 만들어 냄
이렇게 하면 a의 값들도 알아 낼 수 있게 됨
축소(down) : 가지고 있는 픽셀을 조금 버리기만 하면 되기 때문에 simple함
Point Rotation
1. 이미지 파일의 각 좌표의 값들을 회전하여 옮겨주는데, 이때 정확한 정수형으로 나오지 않음
2. 정확하지 않은 좌표값들을 어떻게 정확한 위치에 놓을 것인지 Nearest, bilinear, bicubic 등으로 구함
3. 먼저
이러한 회전 변환 공식으로 (x,y)가 회전한 후의 좌표를 알 수 있음
그러나 이는 정수형이 아니기 때문에 위 세가지 방식 중 하나를 선택하여 가장 적합한 좌표를 찾음
Nearest : 거리가 가장 가까운 것을 고름 -> 반올림을 하지만 범위를 벗어난 좌표값은 모두 0으로 처리
ex) 5x5 이미지에서 -4.0981, -1.0981 이라는 좌표가 나왔다면 반올림하여 -4, -1이라는 좌표가 나오고 범위를 벗어난 좌표이므로 0을 넣어 줌 -> 여기서 회전변환시에 이미지의 크기가 늘어난 다는 것을 알 수 있음
늘어난 이미지를 그대로 사용할 경우 범위를 벗어난 곳에 위치한 좌표의 pixel값들은 0으로 체워지기 때문에 빈공간이 나타나게 됨
bilinear : 변환된 좌표를 둘러싼 다른 4개의 좌표를 이용하여 가까운 부분의 픽셀값을 좀 더 많이 참고한 새로운 픽셀값을 구함
'영상처리' 카테고리의 다른 글
[11월8일]IMAGE RESTORATION - Noise (0) | 2018.11.08 |
---|---|
[11월01일]chapter7 - FOURIER TRANSFORM (0) | 2018.11.07 |
[10월4일]chapter5 - NEIGHBORHOOD PROCESSING - 3 (0) | 2018.10.06 |
[10월2일]chapter5 - NEIGHBORHOOD PROCESSING - 2 (0) | 2018.10.06 |
[9월27일]chapter5 - NEIGHBORHOOD PROCESSING - 1 (0) | 2018.09.30 |