파이썬 numpy.fft.ifftshift 함수 활용하기
파이썬 Numpy의 `numpy.fft.ifftshift` 함수 소개
`numpy.fft.ifftshift` 함수는 이산 푸리에 변환 후 사용된 `fftshift`에 의해 이동된 주파수 성분을 원래 위치로 되돌리는 함수입니다. `ifftshift`는 주로 푸리에 변환을 원래 형태로 복원할 때 사용되며, `fftshift`와 반대되는 작업을 수행합니다. 이를 통해 주파수 성분의 원래 배치를 복원하고, 신호나 이미지 데이터를 정확히 처리할 수 있습니다.
`numpy.fft.ifftshift` 함수란?
`numpy.fft.ifftshift` 함수는 `fftshift` 함수를 통해 중앙으로 이동된 주파수 성분을 다시 원래의 위치로 복원하는 역할을 합니다. 푸리에 변환을 거친 데이터를 역변환하기 전에, 또는 처리된 주파수 성분을 다시 원래의 공간 영역으로 되돌릴 때 사용됩니다.
함수 문법
numpy.fft.ifftshift(x, axes=None)
- x: 복원할 배열
- axes: 이동할 축 (기본값은 모든 축에 대해 복원)
예제 1: 1D 푸리에 변환과 `ifftshift`
다음 예제에서는 1D 신호에 대해 `fftshift`와 `ifftshift`를 사용하여 주파수 성분을 중앙으로 이동시키고, 다시 원래 위치로 복원하는 과정을 보여줍니다.
import numpy as np
import matplotlib.pyplot as plt
# 1D 신호 생성 (예: 사인파)
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(5 * x)
# 푸리에 변환 수행
fft_result = np.fft.fft(y)
# 주파수 성분을 중앙으로 이동
shifted_fft = np.fft.fftshift(fft_result)
# 이동된 주파수 성분을 다시 복원
restored_fft = np.fft.ifftshift(shifted_fft)
# 시각화
plt.subplot(1, 3, 1)
plt.plot(np.abs(fft_result))
plt.title('원래 푸리에 변환')
plt.subplot(1, 3, 2)
plt.plot(np.abs(shifted_fft))
plt.title('fftshift 후')
plt.subplot(1, 3, 3)
plt.plot(np.abs(restored_fft))
plt.title('ifftshift 후')
plt.show()
이 예제에서는 1D 사인파에 대해 푸리에 변환을 수행한 후, `fftshift`로 중앙에 배치된 주파수 성분을 `ifftshift`로 다시 원래 위치로 복원합니다.
예제 2: 2D 이미지의 푸리에 변환과 `ifftshift`
이 예제에서는 2D 이미지에 대해 `fftshift`와 `ifftshift`를 적용하여, 푸리에 변환 후 주파수 성분을 이동시키고 다시 복원하는 과정을 시각화합니다.
import numpy as np
import matplotlib.pyplot as plt
from scipy import misc
# 예제 이미지 로드
image = misc.face(gray=True)
# 2D 푸리에 변환 수행
fft_image = np.fft.fft2(image)
# 주파수 성분을 중앙으로 이동 (fftshift)
shifted_fft_image = np.fft.fftshift(fft_image)
# 중앙으로 이동된 주파수 성분을 다시 복원 (ifftshift)
restored_fft_image = np.fft.ifftshift(shifted_fft_image)
# 원본 이미지와 이동된 이미지 시각화
plt.subplot(1, 3, 1)
plt.imshow(np.log(np.abs(fft_image)), cmap='gray')
plt.title('푸리에 변환')
plt.subplot(1, 3, 2)
plt.imshow(np.log(np.abs(shifted_fft_image)), cmap='gray')
plt.title('fftshift 후')
plt.subplot(1, 3, 3)
plt.imshow(np.log(np.abs(restored_fft_image)), cmap='gray')
plt.title('ifftshift 후')
plt.show()
이 예제에서는 2D 이미지에 대해 푸리에 변환 후 `fftshift`로 중앙에 배치된 주파수 성분을 `ifftshift`로 원래 위치로 되돌린 후 시각화합니다. 이 과정은 이미지 처리에서 매우 중요한 작업 중 하나입니다.
`fftshift`와 `ifftshift`의 차이점
`fftshift`는 주파수 성분을 중앙으로 이동시키는 반면, `ifftshift`는 그 과정을 반대로 하여 주파수 성분을 원래 위치로 되돌립니다. 이 두 함수는 푸리에 변환 후 데이터를 시각적으로 해석하거나 역변환을 수행할 때 중요한 역할을 합니다.
예제: `fftshift`와 `ifftshift` 비교
import numpy as np
# 1D 배열 생성
x = np.arange(8)
# fftshift 적용
shifted_x = np.fft.fftshift(x)
# ifftshift로 다시 복원
restored_x = np.fft.ifftshift(shifted_x)
print("원래 배열: ", x)
print("fftshift 후 배열: ", shifted_x)
print("ifftshift 후 배열: ", restored_x)
이 예제에서는 1D 배열에 대해 `fftshift`와 `ifftshift`를 적용하고 비교합니다. 배열을 중앙으로 이동시킨 후, 다시 원래 배열로 복원할 수 있음을 확인할 수 있습니다.
결론
`numpy.fft.ifftshift` 함수는 푸리에 변환 후 `fftshift`로 이동된 주파수 성분을 원래 위치로 되돌리는 중요한 역할을 합니다. 주로 신호 및 이미지 처리에서 사용되며, 데이터의 주파수 성분을 원래 공간으로 복원할 때 필수적입니다. `fftshift`와 함께 사용하여 푸리에 변환을 더욱 효과적으로 다룰 수 있습니다.
더 많은 정보는 Numpy 공식 문서를 참고하세요.