Signal Processing
신호 처리 도구 상자에는 현재 일부 필터링 기능, 필터 설계 도구의 제한된 집합, 1D 및 2D 데이터에 대한 B-spline 보간 알고리즘이 포함되어 있다. 그리고 SciPy의 신호가 실수 또는 복잡한 숫자의 배열이라는 것을 이해해야 한다.
B-spline
B-spline은 B-spline 계수와 매듭 점의 관점에서 유한 영역에 대한 연속 함수의 근사이다. 매듭 점이 간격으로 동일하게 이격되어 있으면 1-D 함수에 대한 B-spline 근사는 유한 기저 확장이다.
매듭 간격이 있는 2차원에서 함수 표현은 다음과 같다.
이러한 식에서 βo는 공간 제한 B-spline 기저 함수의 차수 o이다. 동일한 간격의 매듭 점과 동일한 간격의 데이터 점이 필요하므로 샘플 값 yn에서 계수 cj를 결정하는 빠른 (역필터링) 알고리즘을 개발할 수 있다. 일반적인 spline 보간 알고리즘과 달리 이러한 알고리즘은 큰 이미지에 대한 spline 계수를 신속하게 찾을 수 있다.
B-spline 기저 함수를 통해 샘플 세트를 나타내는 장점은 데이터 샘플이 기본 연속 함수로부터 추출되었다고 가정하는 연속 도메인 연산자 (도함수, 재샘플링, 적분 등)를 스플라인 계수로부터 상대적으로 쉽게 계산할 수 있다는 것이다. 예를 들어, spline의 2차 미분은 다음과 같다.
B-spline의 속성을 사용하면 다음과 같다.
o가 3일 때, 샘플 포인트에서 다음과 같다.
따라서, 2차 미분 신호는 spline 적합으로부터 쉽게 계산될 수 있다. 원하는 경우, 스무딩 스플라인은 2차 미분이 무작위 오류에 덜 민감하게 되도록 하는 것을 발견할 수 있다. 데이터 샘플이 컨볼루션 연산자를 통해 매듭 계수와 관련되어 있으므로, 샘플링된 B-spline 함수를 갖는 간단한 컨볼루션은 spline 계수에서 원본 데이터를 복구한다. 컨볼루션의 출력은 경계를 처리하는 방법에 따라 변경될 수 있다 (이것은 데이터 세트의 차원 수가 증가함에 따라 점점 더 중요). B-spline과 관련된 알고리즘은 mirror-symmetric 경계 조건을 가정한다. 따라서, spline 계수는 그 가정을 기반으로 계산되고, 데이터 샘플도 mirror-symmetric이라고 가정함으로써 spline 계수로부터 정확하게 복구될 수 있다.
패키지는 1차원 및 2차원 (qspline1d, qspline2d, cspline1d, cspline2d)의 동일한 간격의 샘플에서 2차 및 3차 입방 (cubic) spline 계수를 결정하는 기능을 제공한다. 큰 경우 B-spline 기저 함수는 표준 편차가 동일한 0 평균 가우시안 함수에 의해 잘 근사될 수 있다.
임의에 대해 이 가우시안을 계산하는 함수는 (gauss_spline) 또한 사용할 수 있다. 다음 코드와 그림은 스플라인 필터링을 사용하여 scipy.datasets.face 명령에 의해 반환되는 배열인 라쿤 얼굴의 에지 이미지 (평활된 스플라인의 2차 미분)를 계산한다. sepfir2d 명령은 mirror-symmetric 경계 조건을 가진 분리 가능한 2-D FIR 필터를 spline 계수에 적용하는 데 사용되었다. 이 함수는 spline 계수에서 샘플을 재구성하는 데 이상적으로 적합하며 임의의 2-D 필터를 합성하고 mirror-symmetric 경계 조건을 선택할 수 있는 convolve2d보다 빠르다.
import numpy as np
from scipy import signal, datasets
import matplotlib.pyplot as plt
image = datasets.face(gray=True).astype(np.float32)
derfilt = np.array([1.0, -2, 1.0], dtype=np.float32)
ck = signal.cspline2d(image, 8.0)
deriv = (signal.sepfir2d(ck, derfilt, [1]) + signal.sepfir2d(ck, [1], derfilt))
laplacian = np.array([[0,1,0], [1,-4,1], [0,1,0]], dtype=np.float32)
deriv2 = signal.convolve2d(ck, laplacian,mode='same', boundary='symm')
plt.figure()
plt.imshow(image)
plt.gray()
plt.title('Original image')
plt.show()
plt.figure()
plt.imshow(deriv)
plt.gray()
plt.title('Output of spline edge filter')
plt.show()
https://docs.scipy.org/doc/scipy/tutorial/signal.html#filtering
'Python Library > SciPy' 카테고리의 다른 글
[SciPy] 사비츠키-골레이 필터 (Savitzky-Golay Filter) (0) | 2023.08.03 |
---|---|
[SciPy] 영 위상 필터 (Zero-Phase Filter) (0) | 2023.07.10 |
[SciPy] 버터워스 필터 (Butterworth Filter) (0) | 2023.07.05 |
[SciPy] Special functions (0) | 2022.12.22 |
[SciPy] Introduction (0) | 2022.12.22 |