고속 푸리에 변환
영상은 2차원 신호이며, 영상 명암은 2차원 공간 변수에 따라 달라집니다. 2차원 영상의 맥락에서, 주파수는 영상 전체에서 픽셀 명암 값(픽셀 강도 값)이 공간적으로 변화하는 속도를 의미합니다.
1차원 신호를 다양한 크기, 주파수, 위상을 갖는 1차원 복소수 지수의 합으로 표현할 수 있는 것처럼, 영상과 같은 2차원 신호를 다양한 크기, 주파수, 위상을 갖는 2차원 복소수 지수의 합으로 표현할 수 있습니다. 각 주파수의 크기와 위상은 영상의 주파수 영역 표현을 구성합니다. 각 주파수 성분의 크기와 위상은 해당 주파수가 영상에 얼마나 포함되어 있는지를 나타냅니다. 영상의 주파수 영역 표현은 다양한 영상 처리 분야에서 중요한 역할을 수행합니다.
영상 분석 — 각 주파수 성분의 크기와 위상은 해당 주파수가 영상에 얼마나 포함되어 있는지를 나타내어, 영상을 더 잘 이해할 수 있도록 해줍니다.
영상 필터링 — 주파수 기반 필터링을 사용하여 특정 특징을 강화하거나 억제할 수 있습니다. 예를 들어, 고역통과 필터는 저주파 성분을 제거하여 경계를 강조할 수 있고, 저역통과 필터는 고주파 잡음을 제거하여 영상을 부드럽게 만들 수 있습니다.
영상 압축 — JPEG 압축과 같은 기법은 주파수 분석을 사용하여 덜 중요한 고주파수 정보를 제거함으로써 영상 크기를 줄입니다.
영상 복원 — 주파수 정보를 사용하여 불완전한 데이터로부터 영상을 복원할 수 있습니다.
푸리에 변환은 공간 영역 영상을 주파수 영역 표현으로 변환하는 데 널리 사용되는 방법입니다.
이산 푸리에 변환(DFT)
푸리에 변환은 신호를 다양한 크기, 주파수, 위상을 갖는 복소수 지수의 합으로 표현합니다. 디지털 영상은 공간적으로 이산적인 신호입니다. 균일한 간격의 이산 주파수에서 푸리에 변환을 계산하면 디지털 시스템에서 처리하기 편리합니다. 균일한 간격의 이산 주파수에서 푸리에 변환을 계산하는 것을 이산 푸리에 변환(DFT)이라고 합니다. 고속 푸리에 변환(FFT)은 DFT를 빠르게 계산하는 알고리즘입니다.
DFT는 및 범위의 유한 영역에서만 0이 아닌 이산 2차원 함수 f(m,n)에 대해 정의되며, 이에 해당하는 예가 M×N 크기의 영상입니다. M×N 크기의 2차원 DFT와 M×N 크기의 역 DFT의 관계는 다음과 같이 표현됩니다.
및
값 F(p,q)는 f(m,n)의 DFT 계수입니다. DFT 계수 F(p,q)는 이산 주파수 (2πp/M,2πq/N)에서의 영상의 푸리에 변환을 나타내며, 여기서 각 계수는 2차원 주파수 쌍 (2πp/M,2πq/N)의 강도를 나타냅니다. F(0,0)은 푸리에 변환의 상수 성분 또는 영주파수 성분으로, 영상의 평균 명암 수준을 나타냅니다. MATLAB®의 행렬 인덱스는 항상 0이 아니라 1부터 시작하며, 이는 행렬 요소 f(1,1)과 F(1,1)이 각각 수학적 수량 f(0,0)과 F(0,0)에 대응됨을 의미합니다. 역 DFT 방정식은 f(m,n)을 서로 다른 주파수를 갖는 복소수 지수의 합으로 표현할 수 있음을 의미합니다.
fft, fft2, fftn 함수는 각각 1차원 DFT, 2차원 DFT, N차원 DFT를 계산하는 고속 푸리에 변환 알고리즘을 구현합니다. ifft, ifft2, ifftn 함수는 역 DFT를 계산합니다.
영상의 푸리에 변환 해석하기
영상에서 높은 공간 주파수는 영상의 명암(강도)이 급격하게 변화하는 것(예: 경계, 세밀한 디테일, 텍스처)을 나타냅니다. 고주파 성분은 영상의 선명도와 디테일을 정의하는 데 중요하며, 영상의 선명도와 세부 표현에 필수적입니다. 영상에서 낮은 공간 주파수는 영상의 명암(강도)이 느리게 변화하는 것(예: 명암과 색의 부드러운 변화)을 나타냅니다. 저주파 성분은 영상의 전체적인 형태와 구조를 나타내며, 영상의 전반적인 모습과 컨텍스트를 이해하는 데 중요합니다.
명암이 사각형 영역 내부는 1이고 그 외 영역은 0인 영상 f(m,n)이 있다고 가정하겠습니다. 이 영상을 표현하는 2차원 행렬을 만들 수 있습니다.
f = zeros(30,30); f(5:24,13:17) = 1; imshow(f)

영상 f의 DFT를 계산하고 시각화할 수 있습니다. 특히 DFT 계수 크기의 범위가 크게 편중된 경우, 그 명시적인 값을 시각화하는 것보다 DFT 크기의 로그를 시각화하는 것이 더 많은 정보를 제공할 수 있습니다. DFT는 주기적이므로, 시각화에서는 일반적으로 DFT를 하나의 주기에 대해 표시합니다. 해당 DFT를 살펴보면 수직 방향의 고주파수보다 수평 방향의 고주파수가 크기가 더 큰 것을 확인할 수 있습니다. 이는 영상의 수평 단면이 수직 단면에 비해 영상 명암이 더 빠르게 변화하기 때문에 더 높은 주파수 성분을 가진다는 사실을 반영합니다.
F = fft2(f); absF = abs(F); logabsF = log(absF); imshow(logabsF,[-1 5]); colormap(jet) colorbar

더 많은 주파수 지점에서 DFT를 계산하여 보다 세밀한 주파수 표현을 얻을 수 있습니다.
F = fft2(f,256,256); absF = abs(F); logabsF = log(absF); imshow(logabsF,[-1 5]); colormap(jet) colorbar

영주파수 계수가 크기 스펙트럼에서 피크에 해당되지만, 시각화에서는 영주파수 계수가 중앙이 아닌 코너에 표시됩니다. 이 문제는 fftshift 함수를 사용하여 해결할 수 있습니다. 이 함수로 F의 사분면을 재배열하여 영주파수 계수가 중앙에 오도록 합니다.
F = fft2(f,256,256); F = fftshift(F); absF = abs(F); logabsF = log(abs(F)); imshow(logabsF,[-1 5]); colormap(jet) colorbar

간단한 형태의 이산 푸리에 변환 예제
| 영상 | 푸리에 변환(로그 크기) | 해석 |
|---|---|---|
|
|
| 영상이 수평 방향 기준으로 45도 각도의 단면에서는 좁은 펄스를 갖습니다. 따라서 45도 방향의 고주파수가 큰 크기를 갖습니다. 영상이 수평 방향 기준으로 -45도 각도의 단면에서는 넓은 펄스를 갖습니다. 따라서 -45도 방향의 고주파수가 작은 크기를 갖습니다. |
|
|
| 영상이 등방성이며, 모든 방향에서 명암 변화(강도 변화)가 유사합니다. 따라서 주파수의 크기가 모든 방향에서 유사합니다. |
|
|
| 영상에서 가장 급격한 명암 변화(강도 변화)가 대각선을 따라 나타납니다. 따라서 고주파수의 크기가 대각선 방향에서 더 큽니다. |
푸리에 변환의 응용
영상을 수정하면 영상의 DFT도 변화합니다. 마찬가지로, 영상의 DFT를 수정하고 역 DFT를 계산하면 출력 영상은 입력 영상의 수정된 버전이 됩니다. 영상을 수정할 때, 공간 영역에서 필요한 수정을 수행할 수도 있고, 주파수 영역에서 이에 대응되는 주파수 영역 수정을 수행할 수도 있습니다. 예를 들어, 영상의 DFT에 해당 연산을 수행하여 다음과 같은 수정을 적용할 수 있습니다.
DFT에서 저주파 성분을 유지하고 고주파 성분을 감쇠하거나 제거하면, 세밀한 디테일과 잡음(고주파 성분)이 감소되므로 영상이 더 부드러워집니다. 이는 영상의 잡음 제거와 블러 처리에 유용합니다.
DFT에서 고주파 성분을 유지하고 저주파 성분을 감쇠하거나 제거하면, 경계와 세밀한 디테일이 강화되므로 영상이 더 선명해집니다. 이는 경계 검출과 특징 강조에 유용합니다.
특정 주파수 성분이나 특정 주파수 대역을 선택적으로 유지, 제거 또는 강조하면, 영상에서 특정 패턴이나 텍스처를 분리, 억제 또는 강조할 수 있습니다.
사람의 눈은 고주파수 세부 요소에 덜 민감하기 때문에, 고주파 성분을 제거하면 인지되는 품질의 손실을 최소화하면서 영상 크기를 줄일 수 있습니다. 이는 영상 압축에 사용되는 원리입니다.
푸리에 변환의 주요 속성 중 하나는 두 푸리에 변환의 곱셈이 관련 공간 함수의 컨벌루션에 대응된다는 것입니다. 이 속성은 고속 푸리에 변환과 함께 고속 컨벌루션 알고리즘의 기본을 형성합니다. 선형 필터의 임펄스 응답의 DFT는 필터의 주파수 응답을 제공합니다. 다음 단계를 수행하여 FFT 기반 영상 필터링을 수행할 수 있습니다.
선형 필터를 영상의 크기에 맞게 0으로 채웁니다.
0으로 채워진 선형 필터의 주파수 응답을 FFT를 사용하여 계산합니다.
영상의 FFT를 계산합니다.
영상의 FFT에 선형 필터의 주파수 응답을 곱합니다.
곱의 역 FFT를 계산하여 필터링된 출력을 얻습니다.
[M,N] = size(image); fft_image = fft2(image); fft_filter = fft2(filter,M,N); fft_filteredImage = fft_image.*fft_filter; filteredImage = ifft2(fft_filteredImage);
FFT 기반 컨벌루션 방법은 입력값이 큰 경우에 가장 효과적입니다. 입력값이 작은 경우에는 공간 영역에서의 컨벌루션이 일반적으로 더 빠릅니다. imfilter 함수는 입력값이 크든 작든 사용할 수 있는데, 이는 컨벌루션을 주파수 영역에서 수행할지 공간 영역에서 수행할지 자동으로 결정하기 때문입니다.
freqz2 함수는 필터의 주파수 응답을 계산하고 표시합니다. 가우스 컨벌루션 커널의 주파수 응답은 이 필터가 저주파를 통과시키고 고주파를 감쇠시킴을 보여주며, 라플라시안 컨벌루션 커널의 주파수 응답은 이 필터가 고주파를 통과시키고 저주파를 감쇠시킴을 보여줍니다. 선형 필터링, 필터 설계 및 주파수 응답에 대한 자세한 내용은 Design Linear Image Filters in the Frequency Domain 항목을 참조하십시오.
h = fspecial("gaussian");
freqz2(h)
h = fspecial("laplacian");
freqz2(h)
참고 항목
fft2 | fftn | ifft2 | ifftn | fftshift | ifftshift | freqz2





