주파수 영역에서의 이미지 처리 이미지의 주파수는 밝기의 변화하는 정도를 의미한다. 주기성을 가지는 모든 신호는 단순한 사인 곡선의 조합으로 표현할 수 있다.
Sinusoidal Signal A(t) = A Sin(ωt + Ф) = A Sin(2πft + Ф) A: 진폭, ω:각속도(2πf), Ф: phase shift 값 f : frequency(Hz), t: 시간(초) http://www.learnabout-electronics.org/ac_theory/ac_ccts_52.php
A(t) = A Sin(ωt + Ф) A: 진폭(위상자의 길이) ω:각속도(radian/t) Ф: phase shift 값(초기위치: radian) Ф ωt A A Sin(ωt + Ф) 기준: 0rad Sin(θ) = Cos(θ - 90) Cos(θ) = Sin(θ + 90) 90˚ = π/2 radian 주기성 신호를 표기할 때는 주로 Cos함수를 사용 사인 함수가 사용된 연산식은 복소지수를 사용할 때 믾이 간단해 진다.
Z = x + i y Z = x + i y 복소수 i = √(-1) Imaginary Z = (x, y) Real 실수부(real part) 허수(Imaginary part) 복소수를 나타내는데 실수부 x와 허수부 y만으로 충분하기 때문에 다음과 같은 순서쌍으로 나타낼 수 있다. Imaginary Z = (x, y) 위와 같은 x, y로 표현되는 값은 2차원 평면 상에 (Cartesian Coordinate Sys.) 한 점으로 시각적인 표현이 가능하다. (복소평면) Real
Catersian 좌표상의 한 점은 원점에서부터 점까지의 거리 r과 극좌표: Catersian 좌표상의 한 점은 원점에서부터 점까지의 거리 r과 (원점-끝점)의 선분이 x축과 이루는 각도 θ로 표현 가능하다. θ x y (x,y) = (r, θ) r x = r cos(θ) y =r sin(θ) r = √ x2 + y2 x = r cos(θ) y =r sin(θ) θ = atan(y/x)
복소평면에 한 점으로 표시한 복소수 Z = (x, y)를 극좌표의 심볼을 사용하여 다시 표현하면 Z = (|Z|cosθ, |Z|sinθ) 이다. 따라서 복소수 Z = X + iY 는 다음과 같이 표현할 수 있다. Z = |Z| cosθ + i |Z| sinθ = |Z| [ cosθ + i sinθ ] = |Z| [ eiθ ] Euler’s Formular: cos θ + i sin θ = eiθ Proof
Proof
따라서, 시간에 대한 Sine 곡선 A(t) = A Cos(2πft + Ф) 는 A Cos(ωt + Ф) = Re { A e i(2πft + Ф) } = Re { A e i(2πft) e i(Ф) } 로 표기할 수 있다. 또한 다음의 관계도 성립한다. Inverse Euler Formulas
k 개의 사인 곡선으로 이루어진 복잡한 모양의 시그널은 다음과 같은 식으로 간단히 표현 할 수 있다.
삼각함수의 특징: Cos함수는 y축에 대하여 대칭이다 (Cos(x) = Cos(-x)) Sin함수는 원점에 대하여 대칭이다 (-Sin(x) = Sin(-x)) 삼각함수는 2π 주기로 반복된다.
Cos함수와 Sin함수와 90도의 위상 차이를 가지는 같은 함수이다. 몇 몇 가지 편리한 점 때문에 신호처리에서는 Sin함수보다 Cos함수를 더 많이 사용한다. Frequency에 따른 Cos 곡선
주기성을 가지는 함수는 여러 개의 다른 Cos함수의 합으로 나타낼 수 있다(그 역도 가능)
임의의 함수가 [0, π] 구간에 있으면 Cos nx의 합으로 나타낼 수 있다. 예: 위의 함수의 오른쪽의 Cos함수 요소들을 충분히 연장하면 아래와 같은 그래프가 그려진다..
[0, π]에서 정의된 함수가 있고 이 함수를 여러 가지 주기를 가지는 Cos함수의 합으로 나타낼 수 있으면 다음과 같은 관계를 정의할 수 있다. 즉, 구간 [0, π]에 대하여 정의되는 임의의 함수와 무한 수열 Cn의 사이에 다음과 같은 관계가 있다. 수학에서는 이러한 관계를 가진 한 쌍을 변환쌍(transform pair)라고 하고, 둘 중 하나를 바탕으로 다른 것을 알아내는 것을 변환(transform)이라고 한다.
컴퓨터는 무한한 데이터를 다룰 수 없기 때문에 일정한 간격으로 sampling해 주어야 한다. 아래의 그림은 [0, π]구간을 20등분하여 각 구간에 대한 함수f(x)의 값을 sampling한 그림이다. Sampling을 위한 x축 상의 20개의 값은 다음 식으로 구할 수 있을 것이다..
앞 페이지에서 구한 x축 상의 값에 대한 함수의 출력 값이 각각 f0, f1, f2, . . . fN-1이라고 하면 이 f값 들도 유한 수열이고 Cos함수의 계수 C0, C1, C2, .. 들과 다음과 같은 관계가 성립한다. 왼쪽의 f 값들로부터 오른쪽의 C값을 구하는 식은 다음과 같다. DCT: Discrete Cosine Transform 오른 쪽의 C 값들로부터 왼쪽의 f값을 구하는 식은 다음과 같다. IDCT: Inverse Discrete Cosine Transform
앞 페이지의 DCT를 구현하는 프로그램 함수 DCT(double[ ] f)가 있어서 다음과 같이 호출하였다고 하면 DCT(f); double[] f = {1, 2, 3, 4, }; 위의 값을 y, x 값으로 사용하여 그린 그래프는 다음과 같다. 의 그래프
이미지정보도 같은 방법을 사용하여 처리할 수 있다. 앞의 페이지에서 DCT함수에 의해 구해진 상수 Cn은 “ 함수의 n번째 주파수 성분의 크기"이다. DCT를 이용하면 임의의 함수의 원하는 주파수의 성분만 뽑아서 처리하는 것이 가능하다는 뜻이다. 아래의 그림은 DCT를 이용해 소리신호를 각 주파수별 성분을 구한 뒤, 그것을 사용자의 설정대로 바꾼 뒤에, 다시 IDCT를 적용시켜서 소리를 변화시킨다. 이미지정보도 같은 방법을 사용하여 처리할 수 있다. DCT를 사용하여 이미지를 처리하는 과정은 다음과 같다.
이미지의 DCT 이미지는 2차원 정보이기 때문에 다음과 같이 앞에서 본 1차원 DCT가 2중으로 나타난다. N x M 이미지에서의 2차원 DCT 위의 식은 N x M개의 계수(C값)를 구하기 위하여 각각에 대하여 N x M번의 계산을 하여야 한다. 다라서 N2M2번의 계산이 필요하다. 다음과 같은 방법을 사용하면 계산량을 많이 줄일 수 있다. 다음과 같이 x축 방향으로만 DCT를 적용하여 Bn,l을 구한다. 밑의 식에 위의 Bn,l 을 대입하면 위의 첫 식과 똑 같은 식이 됨을 확인 할 수 있다. 이 값을 다시 y방향에 적용하면
DCT의 결과에 LowPass필터를 적용한 후 다시 IDCT로 이미지를 재 구성한 예: (부드러운 이미지, 흐림효과)
C
DCT의 결과에 HighPass필터를 적용한 후 다시 IDCT로 이미지를 재 구성한 예: (선명한 이미지, 경계선 검출)