我想使用巴特沃斯滤波器对医学图像进行平滑处理,数据非常嘈杂,我想减少这一点。我正在使用Python v3.7。图像数据存储在二维np.array中,我使用scipy将其转换为频域。我不知道下一步该如何应用Butterworth过滤器
#%% butterworth filter
import scipy.fftpack
import scipy.signal
normal_scan=scan_spect # I have already loaded and preprocessed the data
freq_scan=scipy.fftpack.fft2(normal_scan)
N=10 #order/power of the filter
Wn=0.6 #critical frequency
B, A=scipy.signal.butter(10,0.6, output='ba' )
smoothed_data=scipy.signal.filtfilt(B, A, freq_scan)
我的数据必须采用哪种格式才能应用Butterworth过滤器?以及我要使用哪些参数。
这是我的方法,我不知道它是否可以为您清除足够的噪音。我也建议下订单4
def butterLow(cutoff, critical, order):
normal_cutoff = float(cutoff) / critical
b, a = signal.butter(order, normal_cutoff, btype='lowpass')
return b, a
def butterFilter(data, cutoff_freq, nyq_freq, order):
b, a = butterLow(cutoff_freq, nyq_freq, order)
y = signal.filtfilt(b, a, data)
return y
x=np.array(freq_scan)
cutoff_frequency = some value
sample_rate = maximum value in your array *2 +1
y = butterFilter(x, cutoff_frequency, sample_rate/2)
如果您想要高通输出,这将为您提供低通巴特沃斯:
high=np.array(x)-np.array(y)