파이썬 Numpy의 `numpy.fft.ifft2` 함수 소개
`numpy.fft.ifft2` 함수는 2차원 이산 역푸리에 변환(Inverse 2D FFT)을 계산하는 함수입니다. 이 함수는 주파수 영역의 데이터를 다시 시간 또는 공간 영역으로 변환하는 데 사용됩니다. 주로 신호 복원, 이미지 필터링, 원본 데이터로의 복구 등의 작업에 활용됩니다. 이 글에서는 `numpy.fft.ifft2` 함수의 사용법과 예제 코드를 통해 이 함수의 기능을 설명합니다.
`numpy.fft.ifft2` 함수란?
`numpy.fft.ifft2` 함수는 2차원 주파수 영역 데이터를 다시 공간 또는 시간 영역으로 변환해 주는 역할을 합니다. 이 함수는 2D 푸리에 변환의 역과정이기 때문에, 원본 데이터에 가깝게 복구할 수 있습니다. 이는 주로 필터링 후 이미지나 신호의 복원을 위해 사용됩니다.
함수 문법
numpy.fft.ifft2(a, s=None, axes=(-2, -1), norm=None)
- a: 입력 데이터 (2차원 배열, 복소수 가능)
- s: 역변환할 축의 크기 (각 축에 대해 지정된 변환 크기)
- axes: 변환할 축 (기본값은 마지막 두 축)
- norm: 정규화 방식 (예: "ortho")
예제 1: 2D 역푸리에 변환 적용
다음은 `numpy.fft.ifft2` 함수를 사용하여 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)
# 2D 역푸리에 변환 수행 (복원)
Z_ifft = np.fft.ifft2(Z_fft)
# 원본 신호와 복원된 신호 비교
plt.subplot(1, 2, 1)
plt.imshow(Z, extent=[0, 4*np.pi, 0, 4*np.pi])
plt.title('원본 신호')
plt.subplot(1, 2, 2)
plt.imshow(np.real(Z_ifft), extent=[0, 4*np.pi, 0, 4*np.pi])
plt.title('복원된 신호 (ifft2)')
plt.show()
이 예제에서는 2차원 배열에 대해 푸리에 변환을 수행한 후, `ifft2` 함수를 사용하여 원본 신호를 복원하는 과정을 보여줍니다. `np.real()` 함수로 복소수 부분을 제거하여 실제 값만 시각화합니다.
예제 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)
# 2D 역푸리에 변환 수행
image_ifft = np.fft.ifft2(image_fft)
# 원본 이미지와 복원된 이미지 시각화
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(1, 2, 2)
plt.imshow(np.real(image_ifft), cmap='gray')
plt.title('복원된 이미지 (ifft2)')
plt.show()
이 예제는 이미지에 대해 푸리에 변환을 수행한 후, `ifft2` 함수로 원본 이미지를 복원하는 과정을 보여줍니다. 푸리에 변환된 이미지의 주파수 정보를 이용해 원본 이미지를 정확히 복원할 수 있습니다.
정규화된 역푸리에 변환
정규화된 역푸리에 변환은 `norm='ortho'` 옵션을 통해 가능합니다. 이는 데이터의 크기를 보존하면서 역변환을 수행하도록 돕습니다.
import numpy as np
# 2차원 배열 생성
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')
# 정규화된 2D 역푸리에 변환 수행
Z_ifft_norm = np.fft.ifft2(Z_fft_norm, norm='ortho')
# 결과 출력
print("정규화된 2D 역푸리에 변환 결과: ", np.real(Z_ifft_norm[:5, :5]))
이 예제에서는 `norm='ortho'` 옵션을 사용하여 정규화된 2D 푸리에 변환과 그에 대한 역푸리에 변환을 적용하는 방법을 보여줍니다. 정규화된 데이터는 일반 FFT 및 IFFT와는 달리 크기가 조정된 결과를 반환합니다.
결론
`numpy.fft.ifft2` 함수는 주파수 영역의 2차원 데이터를 다시 시간 또는 공간 영역으로 복원하는 데 매우 유용한 함수입니다. 특히, 필터링 후의 데이터 복원, 이미지 신호 복원 등에서 자주 활용됩니다. 이 함수는 주로 `fft2`와 짝을 이루어 사용되며, 원본 데이터로 되돌리는 데 중요한 역할을 합니다.
더 많은 정보는 Numpy 공식 문서를 참고하세요.
'Python > numpy' 카테고리의 다른 글
파이썬 numpy.fft.ifftn 함수 활용하기 (0) | 2024.10.29 |
---|---|
파이썬 numpy.fft.fftn 함수 활용하기 (0) | 2024.10.28 |
파이썬 numpy.fft.fft2 함수 활용하기 (0) | 2024.10.26 |
넘파이 ValueError: too many dimensions 'array' has. 오류 해결하기 (4) | 2024.10.26 |
넘파이 MatrixRankWarning: Matrix is rank deficient 오류 해결하기 (1) | 2024.10.26 |