0

我想使用巴特沃斯滤波器平滑医学图像,数据非常嘈杂,我想减少它。我正在使用 Python v3.7。图像数据存储在 2D np.array 中,我使用 scipy 将其转换为频域。我不知道下一步可以应用巴特沃斯过滤器

#%% 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)

我的数据必须采用什么格式才能应用巴特沃斯过滤器?以及我使用哪些参数。

4

1 回答 1

3

这是我的方法,我不知道它是否为你清除了足够的噪音。我也建议下订单 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)
于 2020-03-20T20:11:35.223 回答