平滑处理(smoothing)
平滑处理(smoothing)也称模糊处理(bluring)。作用就是减少图像上的噪声或者失真。
图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。
空间域的平滑滤波一般采用均值滤波、中值滤波和加权平滑滤波进行处理。
均值滤波
3*3窗口的均值滤波如下图所示,点(x,y)的滤波值由其周围9个点(包括其自身)计算平均值得到。
上图中点(x,y)的滤波值用公式表示为:
中值滤波
概念:
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。
例如:左图中大小为3*3的滤波器中9个数字进行升序(降序)排序,找出9个数字中的中值,再将中值赋于中间的像元。
加权平滑滤波(例:高斯滤波)
如下图为一个标准差为1.0的整数值高斯核。
高斯滤波的卷积运算
假设有一个卷积核h,就一般为3*3的矩阵:
有一个待处理矩阵x:
代码
%空域图像平滑处理
img = imread('lenna.bmp');
figure;imshow(img);title('原图');
img = imnoise(img, 'gaussian');
figure;subplot(2,2,1);imshow(img);title('gaussian原图');
[ROW, COL] = size(img);
img1 = double(img);
k = 3;%模板大小
%均值滤波
img_meanFilter = img1;
model = ones(k);%3*3的均值滤波模板
for i = 1:ROW-k+1
for j = 1:COL-k+1
c = img1(i: i+(k-1), j: j+(k-1)) .* model; %取出img1中从(i,j)开始的n行n列元素与模板相乘
s = sum(c(:));%求c矩阵中各元素之和
img_meanFilter(i + (k - 1)/2, j + (k - 1)/2) = s / (k*k);%将与模板运算后的各元素的均值赋给模板中心位置的元素
end
end
subplot(2,2,2);;imshow(uint8(img_meanFilter));title('均值滤波');
%中值滤波
img_medianFilter = img1;
for i = 1:ROW-k+1
for j = 1:COL-k+1
c = img1(i:i+k-1,j:j+k-1);
e = c(1,:);
for m = 2:k
e = [e, c(m, :)];%将3x3的矩阵变为1x9的矩阵
end
temp = median(e);%从1x9的矩阵中找出中值
img_medianFilter(i + (k - 1)/2, j + (k - 1)/2) = temp;
end
end
subplot(2,2,3);imshow(uint8(img_medianFilter));title('中值滤波');
%加权平滑滤波(例如核大小为5*5高斯滤波)
GaussianFilter = fspecial('gaussian',[5,5],1);% 创建5*5的高斯滤波器
img_GaussianFilter = imfilter(img1, GaussianFilter, 'replicate');
subplot(2,2,4);imshow(uint8(img_GaussianFilter));title('Gaussian滤波');