Matlab的fspecial函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Chaolei3/article/details/79400658

函数原型

h = fspecial(type)
h = fspecial(type,para)
根据函数原型对fspecial函数作个说明,fspecial是用来生成滤波器(也叫算子)的函数,使用type参数来指定滤波器的种类,使用para来对具体的滤波器种类添加额外的参数信息。h就是生成的滤波器。

2 滤波器的种类

type参数通常可以取gaussian、average、disk、laplacian、log、prewitt

2.1 高斯滤波器

H = fspecial(‘gaussian’,hsize,sigma) ;
当type = ‘gaussian’时就是高斯滤波器了,size指定滤波器的大小,默认值是3×3,sigma指定滤波器的标准差,默认值是0.5。要深刻理解的是,sigma决定了高斯模糊核的模糊程度。从数学上来讲, 高斯半径(sigma)对曲线形状的影响,sigma越小,曲线越高越尖,sigma越大,曲线越低越平缓。因此高斯半径越小,则模糊越小,高斯半径越大,则模糊程度越大。换句话说,sigma越小,数值分布就越集中,sigma越大,数值分布就越分散。所以当我们使用sigma的值很大的时候,然后运用此模糊核对图像处理,会使图像更加模糊。

 h1 = fspecial('gaussian',5,1)
 h2 = fspecial('gaussian')
% 测试sigma的作用
>> f1 =fspecial('gaussian',7,1);
>> f2 =fspecial('gaussian',7,1000000);
%卷积
>> img_1 =imfilter(img,f1,'replicate');
>> img_100 =imfilter(img,f2,'replicate');
%显示图像,观察效果
>> figure;imshow(img_1,[]);title('sigma =1');
>> figure;imshow(img_100,[]);title('sigma =1000000000');
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.2 均值滤波器

函数形式:H =fspecial(‘average’,hsize) ;生成均值滤波器,hsize同样指定滤波器的尺寸,默认是3×3。

% 你会发现h1的每个元素都等于 1/(5×5)
h1 = fspecial('average',5)
% h1的每个元素值等于 1/(3×3)
h2 = fspecial('average')
 
 
  • 1
  • 2
  • 3
  • 4

2.3 圆形均值滤波器

H = fspecialL(‘disk’,RADIUS) 生成圆形区域均值滤波,参数为radius代表区域半径,默认值为5。值得注意的是,虽然说是圆形,但是H却是一个同上面一样长宽都相等的方形。尺寸为:2×RADIUS+1。

h1 = fspecial('disk',3)
% [7 7]
size(h1)
 
 
  • 1
  • 2
  • 3

2.4 拉普拉斯滤波器

H = fspecial(’laplacian’,ALPHA)
生成拉普拉斯算子,参数alpha用于控制算子形状,取值范围为【0,1】,默认值为0.2。值得注意的是,拉普拉斯滤波器不再像前述的滤波器那样可以指定尺寸,而一定是3×3。因为其一定是二维的,所以比较适合二维的操作。

h1 =fspecial('laplacian')
 
 
  • 1

2.5 拉普拉斯高斯滤波器

H = fspecial(‘log’,hsize,sigma) 为拉普拉斯高斯算子,有两个参数,hsize表示模板尺寸,默认值为【3 3】,sigma为滤波器的标准差,单位为像素,默认值为0.5.

h1 =fspecial('log',3,0.2)
% 使用默认值
h2 =fspecial('log')
 
 
  • 1
  • 2
  • 3

prewitt

H = fspecial(‘prewitt’) 用于边缘增强,大小为【3 3】,无参数。也就是说这个滤波器就是唯一的,元素都是固定的。

 h1 =fspecial('prewitt')
  1     1     1
  0     0     0
 -1    -1    -1
 
 
  • 1
  • 2
  • 3
  • 4

sobel

H = fspecial(‘sobel’)和上面的prewitt一样无参数,用于边缘的提取。

>> h1 = fspecial('sobel')

h1 =

     1     2     1
     0     0     0
    -1    -2    -1

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运动模糊(motion)滤波器

H = fspecial(‘motion’,len,theta) 为运动模糊算子,有两个参数,表示摄像物体逆时针方向以theta角度运动了len个像素,len的默认值为9,theta的默认值为0。

unsharp

H = fspecial(‘unsharp’,alpha)为对比度增强滤波器。参数alpha用于控制滤波器的形状,范围为【0,1】,默认值为0.2。返回的也是3×3大小的矩阵。

使用代码

在实践下面的代码的时候,可以使用:whos 变量名;来查看你所关心的变量的数据类型,大小等情况。

img = imread('images/apple.jpg');
% 依次替换为其他滤波器的语法即可
h1 = fspecial('gaussian',5);
img_new = imfilter(img,fspecial('gaussian',5,10),'replicate','same');

figure(1);
imshow(img)

figure(2);
imshow(img_new)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
                </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值