如何在python中医学图像的二维np.array上实现Butterworth过滤器

问题描述 投票:0回答:1

我想使用巴特沃斯滤波器对医学图像进行平滑处理,数据非常嘈杂,我想减少这一点。我正在使用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过滤器?以及我要使用哪些参数。

python smoothing imaging medical butterworth
1个回答
0
投票

这是我的方法,我不知道它是否可以为您清除足够的噪音。我也建议下订单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)
© www.soinside.com 2019 - 2024. All rights reserved.