파이썬 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 공식 문서를 참고하세요.
'Python > numpy' 카테고리의 다른 글
파이썬 numpy.fft.fftn 함수 활용하기 (0) | 2024.10.28 |
---|---|
파이썬 numpy.fft.ifft2 함수 활용하기 (0) | 2024.10.27 |
넘파이 ValueError: too many dimensions 'array' has. 오류 해결하기 (4) | 2024.10.26 |
넘파이 MatrixRankWarning: Matrix is rank deficient 오류 해결하기 (1) | 2024.10.26 |
넘파이 TypeError: 'NumpyArray' object is not callable 오류 해결하기 (2) | 2024.10.26 |