[python] SciPy를 사용하여 신호 및 이미지 처리하기

SciPy는 Python에서 과학적 계산을 위한 라이브러리로, 다양한 모듈을 포함하고 있습니다. 이 중에서도 신호 처리와 이미지 처리에 관련된 모듈은 매우 유용합니다. 이 글에서는 SciPy를 사용하여 신호 및 이미지를 처리하는 방법을 알아보겠습니다.

1. 신호 처리하기

SciPy의 signal 모듈은 주파수 응답 및 시간 응답과 같은 신호 처리 기능을 제공합니다. 다음은 SciPy를 사용하여 신호를 분석하고 필터링하는 예제 코드입니다.

import numpy as np
from scipy import signal

# 입력 신호 생성
t = np.linspace(0, 10, 1000)
x = np.sin(2*np.pi*5*t) + np.sin(2*np.pi*10*t)

# 신호 필터링
b, a = signal.butter(4, 0.08, 'lowpass')
filtered_x = signal.lfilter(b, a, x)

# 결과 출력
import matplotlib.pyplot as plt
plt.plot(t, x, label='원본 신호')
plt.plot(t, filtered_x, label='필터링된 신호')
plt.xlabel('시간')
plt.ylabel('신호')
plt.legend()
plt.show()

위의 코드 예제는 주파수가 5Hz와 10Hz인 두 개의 사인 신호를 생성하고, butter 함수를 사용하여 저역 통과 필터를 생성한 후 lfilter 함수로 신호를 필터링합니다. 최종 결과는 원본 신호와 필터링된 신호를 그래프로 표시합니다.

2. 이미지 처리하기

SciPy의 ndimage 모듈은 다차원 배열에 대한 강력한 이미지 처리 기능을 제공합니다. 다음은 SciPy를 사용하여 이미지를 로드하고 필터링하는 예제 코드입니다.

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

# 이미지 로드
image = plt.imread('image.jpg')

# 이미지 필터링
filtered_image = ndimage.median_filter(image, size=3)

# 결과 출력
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('원본 이미지')
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(filtered_image)
plt.title('필터링된 이미지')
plt.axis('off')

plt.show()

위의 코드 예제는 ‘image.jpg’ 파일을 로드하고, median_filter 함수를 사용하여 이미지를 필터링합니다. 최종 결과는 원본 이미지와 필터링된 이미지를 나란히 출력합니다.

참고 자료