对任意类型数组或多维图像进行滤波。
用法: 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)
步骤:
1)滑动核,使其中心位于输入图像g的(i,j)像素上
2)利用上式求和,得到输出图像的(i,j)像素值
3)充分上面操纵,直到求出输出图像的所有像素值
例:
Matlab 函数:imfilter(A,h)
2.卷积算子(Convolution)【为什么要卷积?】
步骤:
1)将核围绕中心旋转180度
2)滑动核,使其中心位于输入图像g的(i,j)像素上
3)利用上式求和,得到输出图像的(i,j)像素值
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 滤波
12345I = imread(
'moon.tif'
);h = fspecial(
'unsharp'
);I2 = imfilter(I,h);imshow(I), title(
'Original Image'
)figure, imshow(I2), title(
'Filtered Image'
)
对于图像来说,高斯滤波器是利用高斯核的一个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。
【例-3】Laplacian滤波
更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分。由于它们滤除高频和低频,因此称为带通滤波器(band-pass filters)。
在介绍具体的带通滤波器前,先介绍必备的图像微分知识。
1 一阶导数
对于离散情况(图像),其导数必须用差分方差来近似,有
,前向差分 forward differencing (1.2)
,中心差分 central differencing (1.3)
代码实现:http://www.cnblogs.com/pegasus/archive/2011/05/20/2051780.html
实例:技术图像x方向导数
?
12I = imread(
'coins.png'
); figure; imshow(I);Id = mipforwarddiff(I,
'dx'
); figure, imshow(Id);
原图像 x方向1阶导数
2 图像梯度(Image Gradient)
图像I的梯度定义为
,其幅值为
。出于计算性能考虑,幅值也可用
来近似。
Matlab函数
1)gradient:梯度计算
2)quiver:以箭头形状绘制梯度。注意放大下面最右侧图可看到箭头,由于这里计算横竖两个方向的梯度,因此箭头方向都是水平或垂直的。
实例:仍采用上面的原始图像
?
12345I =
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 普拉斯算子(laplacian operator)
3.1.2 概念
拉普拉斯算子是n维欧式空间的一个二阶微分算子。它定义为两个梯度向量算子的内积
其在二维空间上的公式为:
(3.3)
对于1维离散情况,其二阶导数变为二阶差分
2)因此,二阶差分为
对于2维离散情况(图像),拉普拉斯算子是2个维上二阶差分的和(见式3.3),其公式为:
上式对应的卷积核为
常用的拉普拉斯核有:
3.1.2 应用
拉普拉斯算子会突出像素值快速变化的区域,因此常用于边缘检测。
Matlab里有两个函数
1)del2
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/204911.html原文链接:https://javaforall.net
