数字图像处理实验
1、什么是平滑处理?
首先明白几个名词:
(1)噪声: 图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。
1.高斯噪声:高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。常见的高斯噪声包括起伏噪声、宇宙噪声、热噪声和散粒噪声等等。除常用抑制噪声的方法外,对高斯噪声的抑制方法常常采用数理统计方法。高斯噪声最常见最普通的噪声。正态分布(高斯分布)的公式(高中知识不详解了):
2.椒盐噪声:椒盐噪声(salt-and-pepper noise)又称脉冲噪声,它随机改变一些像素值,在二值图像上表现为使一些像素点变白,一些像素点变黑(可以理解为随机概率的像素点变色)。
3.泊松噪声:泊松噪声,就是符合泊松分布的噪声模型,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。
泊松分布公式(高中知识不解释了):
几种噪声的对比:
(2)滤波:图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
针对不同噪声,也有不同的滤波方式:
1.高斯滤波-------顾名思义解决高斯噪声问题。
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。方法主要有两种:
一是用离散化窗口滑窗卷积:就是选定一定大小的滑窗,遍历整个图像。比如我取像素9x9的矩阵滑窗,遍历整个图像进行卷积,一般我们都这样处理高斯噪声。
二是通过傅立叶变换。
只有当离散化的窗口非常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变化的实现方法。
2.中值滤波-------解决椒盐噪声效果比较好。
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。一般用于处理椒盐噪声。
3.均值滤波-------解决泊松噪声效果比较好。
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
回答题目的问题:平滑处理就是用滤波器去除噪声!
2、使用matlab添加噪声
先做一个guide:
打开图片和灰度代码:
% --- Executes on button press in 打开位图.
function openFile_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile('*.bmp','select image');
str=[pathname filename];
[handles.I,handles.map]=imread(str);
guidata(hObject,handles);
axes(handles.axes1);
imshow(handles.I,handles.map);
% --- Executes on button press in 转化灰度.
function togray_Callback(hObject, eventdata, handles)
handles.I=rgb2gray(handles.I);% 转灰度图像
guidata(hObject,handles);
axes(handles.axes1);
imshow(handles.I,handles.map);
原图:
(1)添加高斯噪声
% --- Executes on button press in 高斯噪声.
function guassian_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
I2=handles.I;
handles.J=imnoise(I2, 'gaussian', 0,0.05);% 添加高斯噪声,方差值为0.01
guidata(hObject,handles);
axes(handles.axes2);
imshow(handles.J);
效果:
(2)添加椒盐噪声:
% --- Executes on button press in 椒盐噪声.
function slat_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
I2=handles.I;
handles.J=imnoise(I2, 'salt & pepper', 0.01);
guidata(hObject,handles);
axes(handles.axes2);
imshow(handles.J);
效果:
(3)泊松噪声
% --- Executes on button press in 泊松噪声.
function poission_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
I2=handles.I;
handles.J=imnoise(I2, 'poisson');
guidata(hObject,handles);
axes(handles.axes2);
imshow(handles.J);
效果:
3、平滑处理(图像滤波)
(1)对添加了高斯噪声的图像进行高斯滤波:
% --- Executes on button press in 高斯滤波.
function gaussianwave_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
J2=handles.J;
grayImg=J2;
gausFilter = fspecial('gaussian',[5,5],1.6);
H=imfilter(grayImg,gausFilter,'replicate');
axes(handles.axes3);
imshow(H,handles.map);
效果:
(2)使用中值滤波处理椒盐噪声
% --- Executes on button press in 中值滤波.
function midwave_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
J2=handles.J;
Z=medfilt2(J2,[3,3]);
axes(handles.axes3);
imshow(Z,handles.map);
效果:
(3)使用均值滤波处理泊松噪声
% --- Executes on button press in 均值滤波.
function avgwave_Callback(hObject, eventdata, handles)
handles=guidata(hObject);
J2=handles.J;
PSF=fspecial('average', 5);
P=imfilter(J2, PSF);
axes(handles.axes3);
imshow(P,handles.map);
效果: