본문 바로가기
Python/numpy

파이썬 numpy.fft.fft2 함수 활용하기

by PySun 2024. 10. 26.
반응형

파이썬 Numpy의 `numpy.fft.fft2` 함수 소개

`numpy.fft.fft2` 함수는 2차원 이산 푸리에 변환(2D FFT)을 계산하는 함수로, 이미지 처리와 신호 분석에서 자주 사용됩니다. 주로 2차원 배열 형태의 데이터를 주파수 영역으로 변환할 때 유용하며, 이는 1차원 FFT의 확장 버전입니다. 이 글에서는 `numpy.fft.fft2` 함수의 사용법과 예제 코드를 통해 이 함수의 기능을 설명하고자 합니다.

`numpy.fft.fft2` 함수란?

`numpy.fft.fft2` 함수는 2차원 배열 데이터를 주파수 영역으로 변환하는 기능을 제공합니다. 이를 통해 이미지나 신호의 주파수 성분을 분석할 수 있으며, 여러 필터링 작업에 활용됩니다.

함수 문법

numpy.fft.fft2(a, s=None, axes=(-2, -1), norm=None)
  • a: 입력 데이터 (2차원 배열)
  • s: 변환할 축의 크기 (각 축에 대해 지정된 변환 크기)
  • axes: 변환할 축 (기본값은 마지막 두 축)
  • norm: 정규화 방식 (예: "ortho")

예제 1: 2D 배열의 FFT

다음은 `numpy.fft.fft2` 함수를 사용하여 2차원 배열에 대해 푸리에 변환을 수행하는 예제입니다.

import numpy as np
import matplotlib.pyplot as plt

# 2차원 배열 생성 (예: 2D 사인파)
x = np.linspace(0, 4 * np.pi, 100)
y = np.linspace(0, 4 * np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.sin(Y)

# 2D FFT 수행
Z_fft = np.fft.fft2(Z)

# 푸리에 변환된 데이터의 절대값 시각화
plt.imshow(np.abs(Z_fft), extent=[0, 4*np.pi, 0, 4*np.pi])
plt.title('2D FFT 결과')
plt.colorbar()
plt.show()

이 예제에서는 2D 사인파 신호에 대해 2차원 푸리에 변환을 수행한 결과를 시각화했습니다. `np.abs()` 함수로 복소수 형태의 푸리에 변환 결과의 크기를 시각화하여 주파수 성분을 확인할 수 있습니다.

예제 2: 이미지의 2D 푸리에 변환

다음 예제는 흑백 이미지를 2D 푸리에 변환한 후, 그 결과를 시각화하는 예제입니다.

import numpy as np
import matplotlib.pyplot as plt
from scipy import misc

# 예제 이미지 로드
image = misc.face(gray=True)

# 2D FFT 수행
image_fft = np.fft.fft2(image)

# FFT 결과의 절대값을 로그 스케일로 시각화
plt.imshow(np.log(np.abs(image_fft)), cmap='gray')
plt.title('이미지의 2D FFT')
plt.colorbar()
plt.show()

이 예제는 SciPy의 `misc.face()` 함수를 이용해 이미지를 불러오고, 그 이미지에 대해 2D 푸리에 변환을 수행한 결과를 로그 스케일로 시각화합니다. 주파수 영역에서 이미지의 특징을 분석할 수 있습니다.

정규화된 2D FFT

정규화된 푸리에 변환을 사용하면 결과가 정규화된 크기로 반환됩니다. 이를 위해 `norm='ortho'` 옵션을 사용할 수 있습니다.

import numpy as np

# 2D 배열 생성
x = np.linspace(0, 4 * np.pi, 100)
y = np.linspace(0, 4 * np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.sin(Y)

# 정규화된 2D FFT 수행
Z_fft_norm = np.fft.fft2(Z, norm='ortho')

# 결과 출력
print("정규화된 2D FFT 결과: ", Z_fft_norm[:5, :5])

이 예제에서는 `norm='ortho'` 옵션을 사용하여 정규화된 2D 푸리에 변환을 적용하는 방법을 보여줍니다. 정규화된 결과는 일반 FFT와는 다른 크기로 반환됩니다.

결론

`numpy.fft.fft2` 함수는 2차원 데이터를 주파수 영역으로 변환하는 데 유용한 함수로, 이미지 처리와 신호 분석에서 중요한 역할을 합니다. 1D 푸리에 변환의 확장 버전으로, 복잡한 데이터의 주파수 성분을 쉽게 분석할 수 있도록 돕습니다.

더 많은 정보는 Numpy 공식 문서를 참고하세요.

반응형