最近在看OpenCV 图像处理-平滑处理这个章节,于是呢,想着滤波器总结一下。这里主要是空间域滤波器的介绍,频率域以后再说吧。

首先分为平滑空间滤波器和锐化空间滤波器来进行介绍。平滑空间滤波器主要用于模糊处理和降低噪声,主要两类:均值滤波器和中值滤波器。锐化空间滤波器主要是:拉普拉斯算子和梯度算子

1、均值滤波器

假设我们有一个3*3的模板,系数全为1,那么欲求的中心点像素值就是以该模板为中心的9个像素的平均值来代替。根据定义可知,该滤波器具有模糊边缘的负面效应。通过空间均值处理来模糊图像,可以突出感兴趣的物体,即将较部分图像融入背景中 ,部分图像‘突出显示’出来,达到平滑图像的作用,重点理解平滑对于图像的意义。

MATLAB实现代码:

set(gca,'Fontname','Monospaced');
I=imread('a.tif');
subplot(231),imshow(I), title('origin image');
%I=rgb2gray(I);
%I1=imnoise(I,'salt & pepper',0.02);
%subplot(2 3 2)
%imshow(I1)
%title('添加椒盐噪声的图像');
I1 = I;
k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波
k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波
k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波
k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波
k5=filter2(fspecial('average',15),I1)/255; %进行15*15模板平滑滤波
subplot(232),imshow(k1);title('3*3 smoothing filtering');
subplot(233),imshow(k2);title('5*5 smoothing filtering');
subplot(234),imshow(k3);title('7*7 smoothing filtering');
subplot(235),imshow(k4);title('9*9 smoothing filtering');
subplot(236),imshow(k5);title('15*15 smoothing filtering');  

结果:可以看出,在模板逐渐扩大的过程中,图像的锯齿边缘被模糊掉,颗粒状的噪声也没有了,达到了我们想要的效果,但是在9*9甚至更大的模板,图像开始失真,图像过度模糊了。所以我们在图像平滑的时候,要选最佳的模板尺寸。

2、中值滤波器

中值滤波器是一种统计排序滤波器,即图像像素等于周围像素排序后的中值,加入模板为3*3,则目标点的像素等于排序后的第五个像素的值。中值滤波器特别适用于椒盐噪声。由定义知,中值滤波器对于孤立点特别敏感,还可以保持图像的边缘特性。由中值滤波扩展出来的还有最大值滤波器和最小值滤波器。

MATLAB代码:

%=======second part======
I = imread('book_XRaySalt.tif');
subplot(131),imshow(I);title('原椒盐噪声图像');k1=filter2(fspecial('average',3),I)/255;   %进行3*3模板平滑滤波k2=medfilt2(I,[3,3]);                      %进行3*3模板中值滤波subplot(132),imshow(k1);title('3*3模板均值滤波');
subplot(133),imshow(k2);title('3*3模板中值滤波');
I(100:110,100:110),
k2(100:110,100:110),

结果:

增加:

这里补充说下高斯滤波器,高斯滤波器是利用高斯核与输入图像的每个点进行卷积。提到高斯,就想到‘草帽’,更能记住它。

高斯滤波器是一种平滑线性滤波器,使用高斯滤波器对图像进行滤波,其效果是降低图像灰度的“尖锐”变化,也就是使图像“模糊”了。高斯滤波对于抑制服从正态分布的噪声效果非常好,其代价是使图像变得“模糊”。当然,有时对图像进行平滑滤波的目的就是让图像变得模糊。

一维高斯分布函数:                                                                                二维高斯分布函数:

                                              

它们的图像分别为:

   

其3*3与5*5的卷积核对应如下:

MATLAB实现:

img = imread('lena.tif');
w = fspecial('gaussian',[5,5],0.5);
%replicate:图像大小通过赋值外边界的值来扩展
%symmetric 图像大小通过沿自身的边界进行镜像映射扩展
I = imfilter(img,w,'replicate');
subplot(1,2,1);title('原图像');imshow(img);
subplot(1,2,2);title('高斯滤波后的图像');imshow(I);


从结果可以看出,图像整体模糊平滑了,特别是头发和帽子部分,是图像的尖锐变化被降低了吧。

3、拉普拉斯算子进行图像锐化

拉普拉斯算子是一种二阶微分算子,其强调的是图像中灰度的突变,通过将原图像和拉普拉斯图像加在一起,可以达到锐化图像的作用,最终在保留图像的背景信息的前提下从而突出细节。拉普拉斯锐化模板在边缘检测中非常有用。因为图像的边缘就是那些灰度跳变厉害的的区域。

拉普拉斯算子模板:

实现代码:

%=============================================================
f=imread('moon.jpg');
subplot(2,3,1),imshow(f);
title('原图像'); w4=fspecial('laplacian',0),
g1=imfilter(f,w4,'replicate');
subplot(2,3,2),imshow(g1); title('拉普拉斯模板滤波后的图像'); f2=im2double(f);%将f转换归一化的double类图像,然后进行滤波
g2=imfilter(f2,w4,'replicate');
% imshow(img,[low high])  [low high]用于指定图像显示的灰度范围 对于double数据认为是0-1范围内
subplot(2,3,3),imshow(g2,[]);   title('含有负值的滤波结果'); g=f2-g2;
subplot(2,3,4),imshow(g);title('原图-含有负值的滤波结果');%w8=[0 1 0;1 -4 1;0 1 0],
w8=[1 1 1;1 -8 1;1 1 1],
g8=f - imfilter(f,w8,'replicate');
subplot(2,3,5),imshow(g8);title('对角线中心为8的拉普拉斯模板');%=============================================================

4、梯度算子进行图像锐化

相比于拉普拉斯二阶微分算子,梯度算子一一阶微分算子,更为简单。其实个人觉得,把梯度算子放在‘ 边缘检测’更为合适。
f(x,y)在X方向和Y方向的梯度:
经典模板:
代码实现:
代码中增加注释,很详细的介绍了求梯度算子锐化的过程。
%   soble algorithm
%   ZhangFL at SWPU  2017.04.26
%   Sobel算子中的垂直模板得到的梯度图,由于梯度方向与边缘走向垂直,所以该梯度图对水平边缘有较强的响应,从而水平细节信息非常清晰。
%   sobel算子中的水平模板得到的梯度图,它对垂直边缘有较强的响应,垂直细节非常清晰。
%   Sobel算子水平和垂直方向叠加的梯度图,水平和垂直细节都非常清晰。A=imread('house.tif');  %I=rgb2gray(A);I=A;subplot(2,2,1); imshow(I);  title('原图'); k2=filter2(fspecial('average',5),I)/255; %进行5*5模板平滑滤波I=k2;hx=[-1 -2 -1;0 0 0 ;1 2 1],  %产生sobel垂直梯度模板hy=hx',                    %产生sobel水平梯度模板gradx=filter2(hx,I,'same');gradx=abs(gradx); %计算图像的sobel垂直梯度subplot(2,2,2);imshow(gradx,[]);title('图像的sobel垂直梯度');grady=filter2(hy,I,'same');grady=abs(grady); %计算图像的sobel水平梯度subplot(2,2,3);imshow(grady,[]);title('图像的sobel水平梯度');grad=gradx+grady;  %得到图像的sobel梯度subplot(2,2,4);imshow(grad,[]);title('图像的sobel梯度(使用5*5模板平滑滤波)');

图像处理之滤波器介绍相关推荐

  1. (216)滤波器介绍

    (216)滤波器介绍 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)滤波器介绍 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)FPGA入门与提升文 ...

  2. 【PCL自学:Filtering】PCL中的各类滤波器介绍与使用 (持续更新)

    PCL_filter模块中各类滤波器目录 一.直通滤波器(PassThrough):用于阈值滤除 1.直通滤波器介绍 2.示例代码 二.体素滤波器(VoxelGrid filter):用于下采样 1. ...

  3. Python中最常用十大图像处理库详细介绍

    本文主要介绍了一些简单易懂最常用的Python图像处理库 当今世界充满了各种数据,而图像是其中高的重要组成部分.然而,若想其有所应用,我们需要对这些图像进行处理.图像处理是分析和操纵数字图像的过程,旨 ...

  4. 图像处理-高斯滤波器与图像的关系

    1.概念: 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程.通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平 ...

  5. 经典重温:卡尔曼滤波器介绍与理论分析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨 lcl 来源丨我爱计算机视觉 最近业余在研究物体追踪,看到传统的方法用到了卡尔曼滤波(Kalm ...

  6. 3D图形图像处理软件HOOPS介绍及下载

    HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...

  7. matlabrobert锐化_Matlab图像处理—锐化滤波器

    锐化滤波器 锐化处理的主要目的是,突出灰度的过渡部分,增强图像中的细节.空间域像素邻域平均法可以使图像变模糊,均值处理与积分类似,所以锐化处理可以用空间微分(差分)来完成. 对比模糊: 模糊(平滑)是 ...

  8. marvin java_Java开源图像处理框架Marvin介绍

    Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jm Java对图像的处理框架比较少,目前比较流行的 ...

  9. Java开源图像处理框架Marvin介绍

    Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jmagick)中对Jmagick已做过简略介绍), ...

最新文章

  1. 【深度学习】基于Pytorch的线性模型概念辨析和实现(一)
  2. 实验7-3-5 输出大写英文字母 (15分)
  3. 借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier
  4. linux系统嵌入式编译环境,Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解...
  5. python十大操作方法_python最佳入门教程(19): 列表操作方法
  6. Tomcat帮助文档翻译 未完成
  7. Java Lock的使用
  8. 随手记_英语_学术写作_常用句型35个
  9. setpositivebutton
  10. STM32超声波模块实验(定时器实现)
  11. Java初学者零基础分章学习后续
  12. 使用超终端连接Cisco 2950交换机步骤,通过console口
  13. JVM (1) JVM为什么需要GC?
  14. 安防海量高清视频无损压缩—四川省智慧公共安全系统案例
  15. aspectjweaver.jar+ aopalliance.jar+mchange-commons-java.jar+cglib.jar官网下载
  16. erp知识基础-会计
  17. [QNX 自适应分区用户指南]12 APS开发实践
  18. Java实训——桌面日历
  19. 利用燃尽图跟踪迭代开发进展
  20. scala学习之scala中一些集合的常用函数

热门文章

  1. 字体设计视频教程-传智-专题视频课程
  2. 【困难】给奥运会中的国家排名
  3. gdb vscode 不进入断点_debugging
  4. 扁平数组转树结构C++实现方式
  5. 详解java中的indexOf()方法
  6. 第一周重学习java总结-停不下来的学习
  7. c语言一个图片是幼儿园的,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
  8. 使用Calendar根据当前日期算前一年、前一月、前一天
  9. 计算机办公软件知识考试试题,office办公软件考试题「附答案」
  10. geohash算法原理及实现方式