1 空间滤波
1.1 线性空间滤波
- 主要的线性运算就是:掩膜中心置于(x,y)处,将(x,y)邻域内的每个像素与相应的掩膜系数相乘,再累加所有的结果,作为(x,y)的值。在图像上移动掩膜。
- 卷积和相关的区别就是卷积将掩膜旋转了180°。
- 代码:
g = imfilter(I, w, 'replicate')
,replicate表示复制外边界的值,symmetric表示镜面反射边界来扩展,circular表示将图像看成是一个二维周期函数的一个周期来扩展。 - 示例:平滑滤波
I = imread('cube.jpg'); subplot(131), imshow(I), title('原图'); I = double(rgb2gray(I)); w = ones(5); I1 = imfilter(I, w, 'replicate'); subplot(132), imshow(I1, []), title('kernel size = 5'); w1 = ones(15); I2 = imfilter(I, w1, 'replicate'); subplot(133), imshow(I2, []), title('kernel size = 15');
- 掩膜越大,图像边缘就变得越模糊。
- 其它函数:
w = fspecial('type', parameters)
,用来生成想要的掩膜。
- 示例:
I = imread('moon.jpg'); subplot(131), imshow(I), title('原图'); w = fspecial('laplacian', 0); I1 = imfilter(I, w); subplot(132), imshow(I1), title('滤波结果'); I2 = I - I1; subplot(133), imshow(I2), title('增强结果');
- 滤波后图像比原图像清晰了不少。
1.2 非线性空间滤波
-
中值滤波:它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值,可以较好地处理椒盐噪声。
-
代码:
g = medfilt2(I, [m n], padopt)
,在m*n的邻域上计算,padopt为边界填充选项。 -
示例:
I = imread('lena.jpg'); I = rgb2gray(I); subplot(131), imshow(I), title('原图'); In = imnoise(I, 'salt & pepper', 0.1); subplot(132), imshow(In), title('噪声污染'); I1 = medfilt2(In); subplot(133), imshow(I1), title('中值滤波结果');