图像频域中的周期性噪声检测

信息处理 图像处理 fft 噪音
2022-02-11 03:59:09

因为我正在学习频域并且我对这个主题非常好奇,所以我试图在频率空间中解决一个问题(我已经使用形态学[通过它们的厚度检测线]解决了这个问题)(我知道这是可能的) )。这是图片: 在此处输入图像描述

我正在尝试构建一个陷波滤波器来去除线路频率。 在此处输入图像描述

我不确定,但我认为水平和垂直线上的峰值是噪音(纸线),我尝试了很多方法来消除它们,但它们都不起作用。我不是在寻找代码,只是想了解它的工作原理以及解决问题的一些技巧。我非常感谢您提前做出的贡献。

去除峰后的结果:

现在我很确定我在检测峰时做错了什么(我不知道我在寻找什么样的峰)

在此处输入图像描述 在此处输入图像描述

2个回答

尽管线是周期性的,但它们比谐波更接近一串脉冲,因此它们会泄漏到许多谐波。

将线条与其他线条区分开来的最佳特征是线条是水平的或垂直的,垂直线表示在 FFT 的水平边界处,水平线表示在 FFT 的垂直边界处。

这是过滤掉(设置为零)FFT 的前四行和后三行和列的结果。

例子

回复评论

在这里您可以看到log(fftshift(abs(fft2(image))))滤波前后的频域。

在此处输入图像描述

奖金

只是因为也许你会感兴趣,你可以应用形态过滤器并得到这样的结果:D

形态过滤

题外话

昨天作者这样说 在此处输入图像描述

他接受了答案,但在不接受之后 在此处输入图像描述

您应该先从一个更简单的一维案例开始,然后再逐步扩展到二维。

如果你切出一行方格纸:

from matplotlib import image
import matplotlib.pyplot as plt

# load image as pixel array
image = image.imread('7ocEX.jpg')

image = 255-image  # Invert
plt.plot(image[42])

你可以看到它是一个(间歇性的)脉冲列车:

脉冲列车切片

第一个在像素 23.5,最后一个在像素 672,所以你知道火车的周期是 (672-23.5)/11 = 58.9545 像素/周期,所以频率是:

700 像素/图像 / 58.9545 像素/周期 = 11.8736 周期/图像

如果绘制傅里叶变换:

F = fft.rfft(image[42])
plt.plot(abs(F))

正如预期的那样,您会在 11.9 像素的谐波处看到峰值:

傅里叶变换峰

如果您随后从频谱和逆变换中移除这些峰值,则脉冲序列也将被移除。您知道它们的频率,并且您知道谐波是基波的整数倍,因此您可以从频谱中消除它们而无需任何峰值查找。