【matlab函数描述】
功能:对任意类型数组或多维图像进行滤波。
用法:B = imfilter(A,H)
   B = imfilter(A,H,option1,option2,…)
   或写作g = imfilter(f, w, filtering_mode, boundary_options, size_options)
其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。具体参数选项见下表:

  选项 描述
filtering_mode ‘corr’ 通过使用相关来完成,该值为默认。
  ‘conv’ 通过使用卷积来完成
boundary_options ‘X’ 输入图像的边界通过用值X(无引号)来填充扩展
其默认值为0
  ‘replicate’ 图像大小通过复制外边界的值来扩展
  ‘symmetric’ 图像大小通过镜像反射其边界来扩展
  ‘circular’ 图像大小通过将图像看成是一个二维周期函数的一个周期来扩展
size_options ‘full’ 输出图像的大小与被扩展图像的大小相同
  ‘same’ 输出图像的大小与输入图像的大小相同。这可通过将滤波掩模的中心点的偏移限制到原图像中包含的点来实现,该值为默认值。
【概念讲解】

这里讨论利用输入图像中像素的小邻域来产生输出图像的方法,在信号处理中这种方法称为滤波(filtering)。其中,最常用的是线性滤波:输出像素是输入邻域像素的加权和。

imfilter函数操作说明

一维相关与卷积

  图2-1(a)显示了一维函数f和模板w。假设f的原点定为最左侧的点。为执行两个函数的相关,可移动w使其最右侧的点与f的原点重合,如图2-1(b)所示。需要注意的是,这两个函数之间有一些点未重叠。为处理该问题,最普遍的方法是在f中填充足够多的0(对应表1-1中边界选项boundary_options的默认值P),以保证在w通过f的整个过程中,始终存在对应的点。如图2-1(c)所示。 
  现在准备执行相关操作。相关操作结果第一个值是在图2-1(c)所示位置上两个函数对应位置乘积的累加和。接着将w向右移动一个位置并重复上述过程,如图2-1(d)所示。经过4次移动后,如图2-1(e)所示。以此类推,直至w全部通过f,最终得到如图2-1(f)所示。得到的w与f的相关如图2-1(g)所示。 
  在图2-1(g)所示的相关中,符号’full’是由MATLAB图像处理工具箱使用的标记,用来指示相关操作按上述方式计算时使用了经过充零后的图像。同样,工具箱还提供了另一个’same’选项,可以产生大小与f相同的相关。这种计算同样也使用经过充零后的图像,但开始位置位于与f的原点对准的模板的中线点。最后的计算时使f的最后一个点与模板的中心点对准。


图2-1 一维相关操作说明

图2-2 一维卷积操作说明
  为了执行卷积,将w旋转180度,使其最右侧的点与f的原点重叠,如图2-2(b)所示。然后重复在相关操作中使用的滑动计算过程,如图2-2(c)到图2-2(f)所示。’full’和’same’卷积结果分别如图2-2(g)和图2-2(h)所示。

二维相关与卷积

  上述情况很容易推广到二维图像中,如图2-3所示。原点位于图像f(x,y)的左上角。为了执行相关计算,设置w(x,y)的最右下角点,使之与f(x,y)的原点重合,如图2-3(c)所示。与一维情况类似,这里我们使用了零填充。然后在所有可能的位置上移动w(x,y),使得它的至少一个像素会与原始图像f(x,y)中的某个像素重叠。这个’full’相关的结果如图2-3(d)所示。为得到图2-3(e)中所示的’same’相关,我们要求w(x,y)的所有偏移都能实现中心像素覆盖原始的f(x,y)。


图2-3 二维相关操作示例
  对于卷积,我们将w(x,y)旋转180度,其他处理方式与相关操作相同,参见图2-4(a)到图2-4(c)。 

图2-4二维卷积操作示例

1.相关算子(Correlation Operator)

定义:,  即 ,其中h称为相关核(Kernel).

步骤:

1)滑动核,使其中心位于输入图像g的(i,j)像素上

2)利用上式求和,得到输出图像的(i,j)像素值

3)充分上面操纵,直到求出输出图像的所有像素值

例:

A = [17  24   1   8  15            h = [8   1   6
23   5   7  14  16                     3   5   7
4   6  13  20  22                     4   9   2]
10  12  19  21   3
11  18  25   2   9]

计算输出图像的(2,4)元素=

Matlab 函数:imfilter(A,h)

2.卷积算子(Convolution)【为什么要卷积?】

定义: , ,其中

步骤:

1)将核围绕中心旋转180度

2)滑动核,使其中心位于输入图像g的(i,j)像素上

3)利用上式求和,得到输出图像的(i,j)像素值

4)充分上面操纵,直到求出输出图像的所有像素值

例:计算输出图像的(2,4)元素=

Matlab 函数:Matlab 函数:imfilter(A,h,’conv’)% imfilter默认是相关算子,因此当进行卷积计算时需要传入参数’conv’

3.边缘效应

当对图像边缘的进行滤波时,核的一部分会位于图像边缘外面。

常用的策略包括:

1)使用常数填充:imfilter默认用0填充,这会造成处理后的图像边缘是黑色的。

2)复制边缘像素:I3 = imfilter(I,h,’replicate’);

4.常用滤波

fspecial函数(查matlab)可以生成几种定义好的滤波器的相关算子的核。

【例-1】unsharp masking 滤波

1
2
3
4
5
I = imread('moon.tif');
h = fspecial('unsharp');
I2 = imfilter(I,h);
imshow(I), title('Original Image')
figure, imshow(I2), title('Filtered Image')
【例-2】Gaussian滤波

对于图像来说,高斯滤波器是利用高斯核的一个2维的卷积算子,用于图像模糊化(去除细节和噪声)。

1. 高斯分布

一维高斯分布

 ,

二维高斯分布

 

2.高斯核

理论上,高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核。实际上,仅需要取均值周围3倍标准差内的值,以外部份直接去掉即可。 如下图为一个标准差为1.0的整数值高斯核。

3. 高斯滤波(平滑)

完成了高斯核的构造后,高斯滤波就是用此核来执行标准的卷积。

4.应用

高斯滤波后图像被平滑的程度取决于标准差。它的输出是领域像素的加权平均,同时离中心越近的像素权重越高。因此,相对于均值滤波(mean filter)它的平滑效果更柔和,而且边缘保留的也更好。

高斯滤波被用作为平滑滤波器的本质原因是因为它是一个低通滤波器,见下图。而且,大部份基于卷积平滑滤波器都是低通滤波器。

图.高斯滤波器(标准差=3像素)的频率响应。The spatial frequency axis is marked in cycles per pixel,

and hence no value above 0.5 has a real meaning。

Matlab函数:h = fspecial(‘gaussian’, hsize, sigma) returns a rotationally symmetric Gaussian lowpass filter of size hsize with standard deviation sigma (positive). hsize can be a vector specifying the number of rows and columns in h, or it can be a scalar, in which case h is a square matrix.
The default value for hsize is [3 3]; the default value for sigma is 0.5.

【例-3】Laplacian滤波

更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分。由于它们滤除高频和低频,因此称为带通滤波器(band-pass filters)。

在介绍具体的带通滤波器前,先介绍必备的图像微分知识。

1 一阶导数

连续函数,其微分可表达为 ,或                         (1.1)

对于离散情况(图像),其导数必须用差分方差来近似,有

,前向差分 forward differencing                  (1.2)

 ,中心差分 central differencing                     (1.3)

代码实现:http://www.cnblogs.com/pegasus/archive/2011/05/20/2051780.html

实例:技术图像x方向导数

?
1
2
I = imread('coins.png'); figure; imshow(I);
Id = mipforwarddiff(I,'dx'); figure, imshow(Id);

 

原图像                                                   x方向1阶导数

2 图像梯度(Image Gradient)

图像I的梯度定义为  ,其幅值为 。出于计算性能考虑,幅值也可用 来近似。

Matlab函数

1)gradient:梯度计算

2)quiver:以箭头形状绘制梯度。注意放大下面最右侧图可看到箭头,由于这里计算横竖两个方向的梯度,因此箭头方向都是水平或垂直的。

实例:仍采用上面的原始图像

?
1
2
3
4
5
I = double(imread('coins.png'));
[dx,dy]=gradient(I);
magnitudeI=sqrt(dx.^2+dy.^2);
figure;imagesc(magnitudeI);colormap(gray);%梯度幅值
hold on;quiver(dx,dy);%叠加梯度方向

 

梯度幅值                                   梯度幅值+梯度方向

3 二阶导数

对于一维函数,其二阶导数 ,即 。它的差分函数为

                  (3.1)

3.1 普拉斯算子(laplacian operator)

3.1.2 概念

拉普拉斯算子是n维欧式空间的一个二阶微分算子。它定义为两个梯度向量算子的内积

      (3.2)

其在二维空间上的公式为:                    (3.3)

对于1维离散情况,其二阶导数变为二阶差分

1)首先,其一阶差分为

2)因此,二阶差分为

3)因此,1维拉普拉斯运算可以通过1维卷积核 实现

对于2维离散情况(图像),拉普拉斯算子是2个维上二阶差分的和(见式3.3),其公式为:

   (3.4)

上式对应的卷积核为

常用的拉普拉斯核有:

3.1.2 应用

拉普拉斯算子会突出像素值快速变化的区域,因此常用于边缘检测。

Matlab里有两个函数

1)del2

计算公式: ,

2)fspecial:图像处理中一般利用Matlab函数fspecial

h = fspecial(‘laplacian’, alpha) returns a 3-by-3 filter approximating the shape of the two-dimensional Laplacian operator.
The parameter alpha controls the shape of the Laplacian and must be in the range 0.0 to 1.0. The default value for alpha is 0.2.

3.1.3 资源

http://fourier.eng.hmc.edu/e161/lectures/gradient/node8.html (非常清晰的Laplacian Operator介绍,本文的主要参考)

http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

imfilter函数详解相关推荐

  1. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  2. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  3. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

  4. 【FFmpeg】函数详解(一)

    FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...

  5. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  6. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  7. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  8. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

  9. scanf函数详解与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

最新文章

  1. SCOM 常识概念—资源池介绍
  2. LSMW批处理使用方法(07)_步骤6、7
  3. CentOS 7——yum错误[Error: rpmdb open failed]解决方案
  4. 用户级线程与内核级线程
  5. 腾讯专有云研发过程首次披露
  6. leetcode 977. 有序数组的平方(双指针)
  7. 谁能救得了中兴?下一个是华为吗?
  8. FLASH寿命测试!
  9. apkg格式怎么打开_pdf怎么转换成word?妙招在手,转换不愁!
  10. matlab 求三维质心,如何计算三维质心?
  11. 华林SAP论坛(华林自建的SAP论坛)
  12. Cisco 交换机的操作
  13. 【机器学习 深度学习】通俗讲解集成学习算法
  14. 华为鸿蒙系统烤箱,华为鸿蒙OS系统如何支持形态各异的产品?
  15. 模拟电子技术基础------单管共射放大电路
  16. Android DRM框架分析
  17. 微信小程序——获取用户的运动步数
  18. 在数组中插入一个数字
  19. VC++中的WinMain()函数介绍
  20. python框架pika的基本使用

热门文章

  1. 关于K8s中资源服务质量管理Resource Qos的一些笔记整理
  2. LWN: 使用DAMON调整LRU-list!
  3. paddle入门--通过AutoEncoder实现时序数据异常检测
  4. 计算机二级考试忘记准考证号怎么查成绩?
  5. 计算机会考咋查成绩,我忘记会考号了 怎么查询成绩
  6. 测试过程--编写测试用例
  7. 西部数据 SmartWare v2.4.2.26
  8. Linux内核的红黑树源码实现以及调用
  9. 解决 Ubuntu 无法播放 MP4 格式视频的问题的办法
  10. 21秋期末考试中国当代政治制度10084k1