空域滤波
空间滤波根据其功能划分为平滑滤波和锐化滤波。首先介绍平滑滤波。
平滑滤波
平滑算法有很多种,这里进行两种平滑滤波算法——均值滤波和中值滤波的比较,滤波器模板均为 3*3;在滤波器都需要延拓两行两列,使用镜像的延拓方式。下面是各自算法的描述。
实验思路
均值滤波首先取出计算的像素点 33 范围内的所有的点,之后利用其灰度值求均值,计算结果为滤波后的当前像素点的灰度值。
中值滤波首先取出计算的像素点 33 范围内的所有的点,之后进行按像素的灰度值的大小排序,取中位数作为当前像素点的值。
代码
主函数:
%%
clc;
clear;
close all;
%% 读取图像
filename = 'circuit'; % 受到椒盐噪声污染的电路板X射线图像
im = imread([filename, '.jpg']);
%% 图像的滤波次数
times = 1000;
im_a = im;
im_m = im;
for i = 1:times
%% 将图像进行均值滤波
% im_a = myAverage(im_a);
%% 将图像进行中值滤波
im_m = myMedian(im_m);
end
%% 将结果保存到当前目录下的result文件夹下
imwrite(im_a, sprintf('result/_%s_a.jpg', filename));
imwrite(im_m, sprintf('result/_%s_m.jpg', filename));
%% 显示结果
figure(1);
subplot(131); imshow(im); title('原图'); axis on
subplot(132); imshow(im_a); title('5次均值滤波'); axis on
subplot(133); imshow(im_m); title('5次中值滤波'); axis on
功能函数:
function [img_2] = myAverage(img_1)
size_1 = size(img_1);
h = size_1(1);
w = size_1(2);
img_2 = zeros(h, w);
%%边缘延拓两行两列
a = img_1(1,:);
b = img_1(h,:);
img_1 = [a;img_1;b];
c = img_1(:,1);
d = img_1(:,w);
img_1 = double([c,img_1,d]);
%3X3均值模板
L = 1/9*[1 1 1;1 1 1;1 1 1];
for i= 1:h
for j = 1:w
im = [img_1(i,j) img_1(i,j+1) img_1(i,j+2);...
img_1(i+1,j) img_1(i+1,j+1) img_1(i+1,j+2);...
img_1(i+2,j) img_1(i+2,j+1) img_1(i+2,j+2)];
img_2(i,j) = round(sum(sum(L.*im)));
end
end
img_2 = uint8(img_2);
end
function [img_2] = myMedian(img_1)
size_1 = size(img_1);
h = size_1(1);
w = size_1(2);
img_2 = zeros(h, w);
temp = zeros(9,1);
%%边缘延拓两行两列
a = img_1(1,:);
b = img_1(h,:);
img_1 = [a;img_1;b];
c = img_1(:,1);
d = img_1(:,w);
img_1 = [c,img_1,d];
for i= 1:h
for j = 1:w
%获得模板区的值
%对模板区的值进行排序
%选取中值
img_2(i,j) = median([img_1(i,j) img_1(i,j+1) img_1(i,j+2)...
img_1(i+1,j) img_1(i+1,j+1) img_1(i+1,j+2)...
img_1(i+2,j) img_1(i+2,j+1) img_1(i+2,j+2)]);
end
end
img_2 = uint8(img_2);
end
实验结果
实验分析
平滑滤波:能减弱或者消除图像中高频率分量,但不影响低频率分量,在实际应用中可用来消除噪声。均值滤波和和中值滤波都可以起到平滑图像,虑去噪声的功能。
均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。
中值滤波采用非线性的方法,它在平滑脉冲噪声方面非常有效, 同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好,对椒盐噪声表现较好,对高斯噪 声表现较差。
滤波次数的影响,随着滤波的次数逐渐增加,均值滤波计算的结果越来越模糊,这是因为 均值滤波的本质是低通滤波器,多次迭代之后,图像保留的部分的频率越来越低,最后不难猜测图像的结果是各个像素点的灰度值相同。这是中值滤波不会发生和上面相似的情况,但是图像的部分高频的细节被当做噪声消除,图像变得过于平滑。理论上说无限次的中值的最终结果是使图像的高频成分彻底丧失,比如图像的细节或者纹理成分,但是会保留一些低频的图像细节。
锐化滤波
图像锐化是针对常见的图像模糊、边缘不清晰所采用的的处理方法,与平滑滤波相反,它 能够减弱或者消除图像中低频率分量,但不影响高频率分量,可使图像反差增加,加强图像的轮廓,是图像变得比较清晰。主要的目的:突出灰度的过度部分。
实验思路
利用二阶微分算子拉普拉斯算子进行图像的锐化,常见的拉普拉斯算子有
[0 -1 0;-1 4 -1;0 -1 0] 和 [-1 -1 -1;-1 8 -1;-1 -1 -1],本次使用的 3X3 模板是 [-1 -1 -1;-1 8 -1;-1 -1 -1]。首先取出计算的像素点 3X3 范围内的所有的点,之后进行按模板的参数加权求和,最后再加上原图像的灰度值,可以得到锐化后的像素点灰度值。
代码
主函数:
%%
clc;
clear;
close all;
%% 读取图片
filename = 'moon'; %测试图像1
im = imread([filename, '.jpg']);
%% 将图像进行锐化
im_s = mySharpen(im);
%% 将结果保存到当前目录下的result文件夹下
imwrite(im_s, sprintf('result/_%s_s.jpg', filename));
%% 显示结果
figure(1);
subplot(121); imshow(im); title('原图'); axis on
subplot(122); imshow(im_s); title('图像锐化'); axis on
功能函数:
function [img_2] = mySharpen(img_1)
size_1 = size(img_1);
h = size_1(1);
w = size_1(2);
img_2 = zeros(h, w);
%%边缘延拓两行两列
a = img_1(1,:);
b = img_1(h,:);
img_1 = [a;img_1;b];
c = img_1(:,1);
d = img_1(:,w);
img_1 = double([c,img_1,d]);
%拉普拉斯算子
L = [-1 -1 -1;-1 8 -1;-1 -1 -1];
for i= 1:h
for j = 1:w
im = [img_1(i,j) img_1(i,j+1) img_1(i,j+2);...
img_1(i+1,j) img_1(i+1,j+1) img_1(i+1,j+2);...
img_1(i+2,j) img_1(i+2,j+1) img_1(i+2,j+2)];
img_2(i,j) = round(sum(sum(L.*im)));
img_2(i,j) = img_2(i,j) + img_1(i+1,j+1);
end
end
img_2 = im2uint8(img_2/255);
end
实验结果
原图:
结果图:
实验分析
通过对数字图像进行锐化处理,可以增强图像的边缘,使模糊的图像变得清晰起来,用
Laplacian 算子可以达到细节增强的目的。
实验小结
本次实验,研究了灰度变换中的直方图均衡,通过直方图均衡来改变像素分布位置,从而提高图像的对比度,对于图像来说,处理结果比较理想。但是如果变换后图像的灰度级减少,也会导致图像某些细节的消失。
之后研究空域滤波中的两种平滑滤波算法和一种锐化滤波算法。在实验中分析研究了平滑滤波的本质是低通滤波,对于均值滤波,它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,但是通过分析可以知道对于高斯噪声它有很好的消除效果。对于中值滤波,它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,对椒盐噪声表现较好,但是对高斯噪声表现较差。对于锐化滤波,可以突出图像的边缘细节,让模糊的图片变得清晰,增强细节。