图像算法三:【图像增强--空间域】图像平滑、中值滤波、图像锐化

2019-04-15 13:47发布

空间域滤波:imfilter(),fspecial()

执行操作滤波需要注意边界问题,因此,给出了边界处理方法:
  1. 收缩处理范围
  2. 使用常数填充图像
  3. 使用复制像素的方法填充
  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是处理二维图像的 处理办法:
  1. 无非是将RGB图像转为Gray;
  2. 直接修改函数将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人脸特征抽取、局部二进制 ~~~~