0

我正在尝试将高通滤波器应用于由从黑白图像中提取的 1 像素宽的线组成的信号(列或行向量)。我知道图像的分辨率(res在下面的代码中,以毫米/像素给出)。如何在 MATLAB 中过滤这些线数据以丢弃某些低频(波纹)或大波长,例如 >10 毫米,使用巴特沃斯滤波器或任何其他?

线数据不以零为中心。

Fs = 1; % I do not know if this assumption is correct for the image.
Fn = Fs/2; % Nyquist frequency.

lambda = 10; % Cut-off wavelength in mm, given.

samples_in_lambda = lambda/res; % divide by resolution to get samples.

fc = 1/samples_in_lambda; % Cut-off frequency from lambda.

我试过了 :[z, p, k] = butter(9, fc/fn, 'high'); % I see the filter is high pass on plotting.

我可以使用上述给定值和假设值过滤线路数据吗?如果没有,有没有办法可以使用截止波长过滤数据?

4

1 回答 1

0

您可以在没有混叠的情况下表示的最高线性空间频率是每 2 个像素 1 个波周期。这意味着每2*(res*1e-3)米 1 个波周期或1000/(res*2)倒数米的空间奈奎斯特频率。(用时间频率来应对这个问题,时间频率以倒数秒为单位,也就是赫兹)。

就波长而言:您可以在没有混叠的情况下表示的最短波是每个波周期 2 个像素长。res*2e-3这意味着米的空间“奈奎斯特波长” 。(用时间“波长”又名周期来面对这个问题,以秒为单位。)

如果要设置 10 毫米的截止波长,则对应于 100 米倒数的空间频率。由于该butter()函数将Wn(空间)奈奎斯特频率的任意分数(MATLAB 文档称其为“采样率的一半”)作为其第二个输入参数(截止频率),因此您只需设置Wn=100/(1000/(res*2)),即Wn=res/5

即使您对空间采样频率的定义并不完全正确(除非您有意以倒数像素进行测量),但您的最终结果最终等于Wn=res/5,因此您应该可以使用butter()您指定的调用。

于 2021-02-13T02:25:05.627 回答