空间域滤波:imfilter(),fspecial()
执行操作滤波需要注意边界问题,因此,给出了边界处理方法:
- 收缩处理范围
- 使用常数填充图像
- 使用复制像素的方法填充
h = fspecial( type , parameters ); %fspecial() 创建预定义的二维滤波器
g=imfilter( Img, w, option1,option2,... ); %imfilter () 完成滤波操作
下面结合一些代表性的说明:fspecial()
(1)h = fspecial ('average', hsize);返回一个大小为hsize的平均模板滤波器h。hsize行和列默认为[3,3]。
(2)h = fspecial ('disk', radius);返回一个半径为radius的圆形平均模板。h为(2*radius+1)*(2*radius+1)的方阵,radius默认为5。
(3)h = fspecial ('gassuan', hsize, sigma);返回一个大小为hsize,标准差为sigma的高斯低通滤波器。hsize默认[3,3],sigma默认为0.5。
(4)h = fspecial ('sobel');返回一个加强水平边缘的竖直梯度算子:
h = [1 2 1
0 0 0
-1 -2 -1]
如果需要检测竖直边缘,使用H’。
g=imfilter( Img, w, option1,option2,... ); %imfilter () 完成滤波操作
%w- 滤波操作使用的模板
%option1...模式选择:相关or卷积
%【相关 ‘corr’】、【卷积 ‘conv’】
%举例:
>>Img=imread('C:Users1.jpg');
>>w = [ 1 1 1;1 1 1;1 1 1 ]
w= %滤波模板
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
>>g = imfilter(Img, w, 'corr', 'replicate');
%相关滤波,重复填充边界
% 'corr' 模式选择:[相关]
%'replicate' 填充虚拟边界,重复填充与他最接近的边缘像素
>>figure,
subplot(1,2,1);imshow(Img);title('原图');
subplot(1,2,2);imshow(g);title('空间域滤波');
图像平滑:imfilter()、fspecial()
图像平滑是一种可以减少和抑制图像噪声的实用数字图像处理技术。
在空间域中一般可以采用领域平均来达到平滑的目的。
%举例:
%利用imfilter()和fspecial(),以不用尺寸的平均模板实现图像平滑,用MATLAB实现:
Img=imread('C:Users1.jpg');
h = fspecial ('average', 32); % 32x32的平均模板
Img_32 = imfilter(Img, h ,'corr', 'replicate'); %相关滤波,重复填充边界
h = fspecial('average', 64); % 64x64的平均模板
Img_64 = imfilter(Img, h, 'corr', 'replicate');
figure,
subplot(2,2,1),imshow(Img);title('原图');
subplot(2,2,2),imshow(Img_32);title('32x32 平均模板');
subplot(2,2,3),imshow(Img_64);title('64x64 平均模板');
高斯滤波:'gaussial'
(之后再填这个坑儿……)
中值滤波:medfilt2(Img, [m,n])
%中值滤波本质上是一种统计排序滤波器。对于原图像之后某点(i,j),
%中值滤波以该点位中心的邻域内所有像素的统计排序中值作为(i,j)点的响应。
%中值滤波具有非常理想的降噪能力,对于线性平滑滤波来看,
%在处理像素邻域之内包含噪声点时,噪声会影响像素值的计算。
- 对于高斯滤波来说,平滑影响程度和噪声点到中心点的距离成正比,
- 但在中值滤波中,噪声点则常常被忽略。
%下面举例说明,一幅受椒盐噪声污染的图片,进行平均平滑、高斯平滑、中值滤波的处理效果。
Img = imread('xxx_salt.jpg');
Img_salt = imnoise(Img, 'salt & pepper'); %为图像叠加椒盐噪声
w = [1 2 1;2 4 2;1 2 1] / 16;
Img_gaussian = imfilter(Img_salt, w, 'corr', 'replicate'); %高斯平滑
w = [1 1 1;1 1 1;1 1 1] / 9;
Img_average = imfilter(Img_salt, w, 'corr', 'replicate'); %平均平滑
Img_median = medfilt2(Img_salt, [3,3]); %中值滤波
figure;
subplot(2,3,1);imshow(Img);title('原图');
subplot(2,3,2);imshow(Img_salt);title('椒盐噪声污染的图像');
subplot(2,3,3);imshow(Img_gaussian);title('高斯平滑');
subplot(2,3,4);imshow(Img_average);title('平均平滑');
subplot(2,3,5);imshow(Img_median);title('中值滤波');
………………………………
运行结果……错误!!???
why?
究其原因,不过是待处理图像是彩图,也就是RGB的三维(3D)图像,medfilt2是处理二维图像的
处理办法:
- 无非是将RGB图像转为Gray;
- 直接修改函数将medfilt2() 转换成 medfilt3();
即刻将上列代码修改这一行:
Img_median = medfilt3 (Img_salt, [ 3 , 3 , 3 ]); %中值滤波
运行成功!!!
噪声模型:imnoise(Img, type, parameters)
‘gaussian’
高斯白噪声
‘salt & pepper’
椒盐噪声
图像锐化:
图像锐化在处理中用的较少,下次用到的时候,再做补充吧。
可参考别人的文章:
空间域滤波:图像平滑和锐化
其他相关文章请点击:
图像算法一:【图像点运算】灰度直方图、伽马变换、灰度阈值变换、分段线性变换、直方图均衡化
图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值
图像算法三:【图像增强--空间域】图像平滑、中值滤波、图像锐化
图像算法四:【图像增强--频率域】傅里叶变换、快速傅里叶变换、频域滤波、频域低通滤波、频域高通滤波
图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波
图像算法六:【彩 {MOD}图像处理】彩 {MOD}模型、彩图处理
图像算法七:【形态学图像处理】二值运算、膨胀、腐蚀
图像算法八:【图像分割】边缘检测(Roberts,Sobel,canny)、霍夫变换(hough)、阈值分割、区域分割
图像算法九:【图像特征提取】特征降维、PCA人脸特征抽取、局部二进制
~~~~