matlab中非锐化滤波器背后的逻辑

信息处理 图像处理 matlab
2022-02-05 12:24:25

我试图了解 matlab 中非锐化滤波器背后的逻辑。如果我输入:

image = imread('nameoffile');
filter = fspecial('unsharp', 0.5);
resultImage = imfilter(image, filter);

结果图像比图像更清晰。我打开 fspecial.m 文件,看到 unsharp 过滤器被创建为:

 h = [0 0 0;0 1 0;0 0 0] - fspecial('laplacian',alpha);

如果我用这个矩阵过滤图像:

[0 0 0;
 0 1 0;
 0 0 0;]

结果图像与原始图像相同。我知道拉普拉斯滤波器可以检测到锐利的边缘。所以,如果我们从图像中减去锐利的边缘,我们必须得到模糊的图像,我想。但是,如果我们用 h 矩阵(非锐化滤波器)过滤图像,我们会得到更清晰的图像。我不明白其中的逻辑。

1个回答

拉普拉斯滤波器实际上在边缘输出 0 值,在图像区域内输出正/负值。边缘被检测为拉普拉斯算子的零交叉。如果您记得拉普拉斯算子是二阶导数,而不是一阶导数,这是有道理的。

因此,您描述的非锐化滤波器计算(恒等式 - 拉普拉斯算子)与图像卷积,即图像减去边缘为零的东西。因此,高频(边缘)不会被衰减,而低频会被削弱。