imfilter函数详解

imfilter函数详解matlab 函数描述 功能 对任意类型数组或多维图像进行滤波 用法 B imfilter A H B imfilter A H option1 option2 或写作 g imfilter f w filtering mode boundary options

【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 一维相关操作说明



这里写图片描述



图2-2 一维卷积操作说明

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

二维相关与卷积


这里写图片描述



图2-3 二维相关操作示例

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


这里写图片描述



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










1.相关算子(Correlation Operator)

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

步骤:

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

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

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

例:

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

image

Matlab 函数:imfilter(A,h)

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

定义:image ,image ,其中

步骤:

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

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

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

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

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

image

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

3.边缘效应

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

image

常用的策略包括:

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

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

image

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. 高斯分布

一维高斯分布

image ,image

二维高斯分布

image image

2.高斯核

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

image

3. 高斯滤波(平滑)

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

4.应用

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

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

image

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

and hence no value above 0.5 has a real meaning。

【例-3】Laplacian滤波

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

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

1 一阶导数

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

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

image,前向差分 forward differencing                  (1.2)

image ,中心差分 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);

image image

    原图像                                                   x方向1阶导数

2 图像梯度(Image Gradient)

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

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);%叠加梯度方向

image image

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

3 二阶导数

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

image                  (3.1)

3.1 普拉斯算子(laplacian operator)

3.1.2 概念

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

image      (3.2)

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

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

1)首先,其一阶差分为image

2)因此,二阶差分为

           image

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

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

image   (3.4)

上式对应的卷积核为

image

常用的拉普拉斯核有:

image

3.1.2 应用

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

Matlab里有两个函数

1)del2

计算公式:image ,image

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201367.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午9:32
下一篇 2026年3月20日 上午9:33


相关推荐

  • Ubuntu18.04下安装Pytorch-GPU(超详细自己安装全过程)「建议收藏」

    Ubuntu18.04下安装Pytorch-GPU(超详细自己安装全过程)「建议收藏」硬件环境:自己的笔记本电脑CPU:i5-4210MGPU:NVIDIAgeforce920M1Anaconda3的安装与配置1.1下载可以到Anaconda官网下载历史版本:https://repo.anaconda.com/archive/国内的下载速度可能比较慢,选择到清华大学开源软件镜像站下载。我使用的python3.6.9,下载对于的Anaconda版本是5.1…

    2026年4月14日
    6
  • Frp内网穿透

    Frp内网穿透Frp内网穿透​ 内网穿透从本质上来讲也是端口映射,两者都是将内网地址映射到公网可访问的地址,而区别是端口映射直接在路由器中配置即可,而内网穿透配置的端口映射则需要客户端和服务端进行绑定后实现,相当于客户端和服务端之间建立了一条隧道,然后访问服务端的请求会通过隧道转发给内网主机,该情况多用于没有公网IP的情况下使用;​ frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp,udp,http,https等协议类型,可以将内网服务以安全、便捷的方式通过具有公网

    2025年11月9日
    3
  • 旋转变换(一)旋转矩阵

    旋转变换(一)旋转矩阵本文主要介绍了计算机图形学中的旋转的概念和矩阵的描述方式 包括二维和三维旋转矩阵的推导过程

    2026年3月26日
    2
  • 私网ip和公网ip_详解

    私网ip和公网ip_详解备注:此博客为转载,原作者地址请点击此处 版权声明:本文为小小呆原创文章,转载请注明出处! https://blog.csdn.net/gui951753/article/details/79210535  IP可以分为PublicIP和Privat…

    2022年6月11日
    41
  • webview长按复制_android studio点击按钮显示文本

    webview长按复制_android studio点击按钮显示文本publicclassNewTextViewextendsEditText{publicNewTextView(Contextcontext){super(context);//TODOAuto-generatedconstructorstub}publicNewTextView(Contextcontext,AttributeSetattrs){super(co…

    2026年4月18日
    4
  • 通义千问适合写文的模型

    通义千问适合写文的模型

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号