Python/numpy

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

PySun 2024. 10. 31. 22:39
반응형

파이썬 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 공식 문서를 참고하세요.

반응형