创建预定义的二维滤波器
h = fspecial(type)
h = fspecial('average',hsize)
h = fspecial('disk',radius)
h = fspecial('gaussian',hsize,sigma)
h = fspecial('laplacian',alpha)
h = fspecial('log',hsize,sigma)
h = fspecial('motion',len,theta)
h = fspecial('prewitt')
h = fspecial('sobel')
h = fspecial(type)
创建具有指定 type
的二维滤波器 h
。一些滤波器类型具有可选的附加参数,如以下语法所示。fspecial
以相关性核形式返回 h
,该形式适用于 imfilter
。
h = fspecial('average',hsize)
返回大小为 hsize
的平均值滤波器 h
。
h = fspecial('disk',radius)
在大小为 2*radius+1
的方阵中返回圆形平均值滤波器 (pillbox)。
h = fspecial('gaussian',hsize,sigma)
返回大小为 hsize
的旋转对称高斯低通滤波器,标准差为 sigma
。不推荐。请改用 imgaussfilt
或 imgaussfilt3
。
h = fspecial('laplacian',alpha)
返回逼近二维拉普拉斯算子形状的 3×3 滤波器,alpha
控制拉普拉斯算子的形状。
h = fspecial('log',hsize,sigma)
返回大小为 hsize
的旋转对称高斯拉普拉斯滤波器,标准差为 sigma
。
h = fspecial('motion',len,theta)
返回与图像卷积后逼近照相机线性运动的滤波器。len
指定运动的长度,theta
以逆时针方向度数指定运动的角度。滤波器成为一个水平和垂直运动的向量。默认 len
是 9
,默认 theta
是 0
,对应于 9 个像素的水平运动。
h = fspecial('prewitt')
返回一个 3×3 滤波器,该滤波器通过逼近垂直梯度来强调水平边缘。要强调垂直边缘,请转置滤波器 h'
。
[ 1 1 1
0 0 0
-1 -1 -1 ]
h = fspecial('sobel')
返回一个 3×3 滤波器,该滤波器通过逼近垂直梯度来使用平滑效应强调水平边缘。要强调垂直边缘,请转置滤波器 h'
。
[ 1 2 1
0 0 0
-1 -2 -1 ]
读取图像并显示它。
I = imread('cameraman.tif');
imshow(I);
创建运动滤波器,并使用它来对图像进行模糊处理。显示模糊处理后的图像。
H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
imshow(MotionBlur);
创建圆形滤波器,并使用它来对图像进行模糊处理。显示模糊处理后的图像。
H = fspecial('disk',10);
blurred = imfilter(I,H,'replicate');
imshow(blurred);
type
- 滤波器的类型'average'
| 'disk'
| 'gaussian'
| 'laplacian'
| 'log'
| 'motion'
| 'prewitt'
| 'sobel'
滤波器的类型,指定为下列值之一:
值 |
说明 |
|
平均值滤波器 |
|
圆形平均值滤波器 (pillbox) |
|
高斯低通滤波器。不推荐。请改用 |
|
逼近二维拉普拉斯算子 |
|
高斯拉普拉斯滤波器 |
|
逼近照相机的线性运动 |
|
Prewitt 水平边缘强调滤波器 |
|
Sobel 水平边缘强调滤波器 |
数据类型: char
| string
hsize
- 滤波器的大小滤波器的大小,指定为正整数或由正整数组成的二元素向量。使用向量指定 h
中的行数和列数。如果您指定标量,则 h
是方阵。
当与 'average'
滤波器类型结合使用时,默认滤波器大小为 [3 3]
。当与高斯拉普拉斯 ('log'
) 滤波器类型结合使用时,默认滤波器大小为 [5 5]
。
数据类型: double
radius
- 圆形滤波器的半径5
(默认) | 正数圆形滤波器的半径,指定为正数。
数据类型: double
sigma
- 标准差0.5
(默认) | 正数标准差,指定为正数。
数据类型: double
alpha
- 拉普拉斯算子的形状0.2
(默认) | 范围 [0 1] 内的标量拉普拉斯算子的形状,指定为范围 [0 1] 内的标量。
数据类型: double
len
- 照相机的线性移动9
(默认) | 数值标量照相机的线性移动,指定为数值标量,以像素为单位测量。
数据类型: double
theta
- 照相机移动的角度0
(默认) | 数值标量照相机移动的角度,指定为数值标量,以逆时针方向的度数为单位测量。
数据类型: double
h
- 相关性核相关性核,以矩阵形式返回。
数据类型: double
平均值滤波器:
ones(n(1),n(2))/(n(1)*n(2))
高斯滤波器:
hg(n1,n2)=e−(n21+n22)2σ2
h(n1,n2)=hg(n1,n2)Xn1Xn2hg
拉普拉斯滤波器:
∇2=∂2∂x2+∂2∂y2
∇2=4(α+1)2666666664α41−α4α41−α4−11−α4α41−α4α43777777775
高斯拉普拉斯 (LoG) 滤波器:
hg(n1,n2)=e−(n21+n22)2σ2
h(n1,n2)=(n21+n22−2σ2)hg(n1,n2)σ4Xn1Xn2hg
请注意,fspecial
平移方程以确保核的所有元素之和为零(类似于拉普拉斯核),从而使同构区域的卷积结果始终为零。
运动滤波器:
len
和 theta
指定,以 h
的中心系数为中心。(i,j)
,计算该位置和理想线段之间的最近距离。h = max(1 - nearest_distance, 0);
h
:h = h/(sum(h(:)))