h = fspecial(type)
h = fspecial(type,para)
根据函数原型对fspecial函数作个说明,fspecial是用来生成滤波器(也叫算子)的函数,使用type参数来指定滤波器的种类,使用para来对具体的滤波器种类添加额外的参数信息。h就是生成的滤波器。
type参数通常可以取gaussian、average、disk、laplacian、log、prewitt
H = fspecial(‘gaussian’,hsize,sigma) ;
当type = ‘gaussian’时就是高斯滤波器了,size指定滤波器的大小,默认值是3×3,sigma指定滤波器的标准差,默认值是0.5。
sigma决定了高斯模糊核的模糊程度。从数学上来讲, 高斯半径(sigma)对曲线形状的影响,sigma越小,曲线越高越尖,则模糊越小;sigma越大,曲线越低越平缓,则模糊程度越大。换句话说,sigma越小,数值分布就越集中,sigma越大,数值分布就越分散。所以当我们使用sigma的值很大的时候,然后运用此模糊核对图像处理,会使图像更加模糊。
% 测试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 = 1000000');
函数形式: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
H = fspecialL(‘disk’,RADIUS)
生成圆形区域均值滤波,参数为radius代表区域半径,默认值为5。值得注意的是,虽然说是圆形,但是H却是一个同上面一样长宽都相等的方形。尺寸为:2×RADIUS+1。
h1 = fspecial('disk',3)
% [7 7]
size(h1)
H = fspecial(’laplacian’,ALPHA)
生成拉普拉斯算子,参数alpha用于控制算子形状,取值范围为【0,1】,默认值为0.2。值得注意的是,拉普拉斯滤波器不再像前述的滤波器那样可以指定尺寸,而一定是3×3。因为其一定是二维的,所以比较适合二维的操作。
h1 =fspecial('laplacian')
参考链接
一个点的拉普拉斯的算子计算结果是上下左右的灰度的和减去本身灰度的四倍。若上式所有灰度值全加上负号,就是-1,-1,-1,-1,4,符号改变,锐化的时候与原图的加或减应当相对变化。
上面是四邻接的拉普拉斯算子,将这个算子旋转45°后与原算子相加,就变成八邻域的算子了,也就是一个像素周围一圈8个像素的和与中间像素8倍的差,作为拉普拉斯计算结果。
因为要强调图像中突变(细节),所以平滑灰度的区域,无响应,即模板系数的和为0,也是二阶微分必备条件。
锐化处理可选择拉普拉斯算子对原图像进行处理,产生描述灰度突变的图像,再将拉普拉斯图像与原始图像叠加而产生锐化图像。
H = fspecial(‘log’,hsize,sigma)
为拉普拉斯高斯算子,有两个参数,hsize表示模板尺寸,默认值为【3 3】,sigma为滤波器的标准差,单位为像素,默认值为0.5.
h1 =fspecial('log',3,0.2)
% 使用默认值
h2 =fspecial('log')
H = fspecial(‘prewitt’)
用于边缘增强,大小为【3 3】,无参数。也就是说这个滤波器就是唯一的,元素都是固定的。
h1 =fspecial('prewitt')
1 1 1
0 0 0
-1 -1 -1
H = fspecial(‘sobel’)
和上面的prewitt一样无参数,用于边缘的提取。
>> h1 = fspecial('sobel')
h1 =
1 2 1
0 0 0
-1 -2 -1
H = fspecial(‘motion’,len,theta)
为运动模糊算子,有两个参数,表示摄像物体逆时针方向以theta角度运动了len个像素,len的默认值为9,theta的默认值为0。
I = imread('lena.jpg');
figure,subplot(1,2,1);imshow(I);title('原图像');
PSF = fspecial('motion',20,15);
J = imfilter(I,PSF,'conv','circular');
subplot(1,2,2);imshow(J);title('模糊运动的图像');
H = fspecial(‘unsharp’,alpha)
为对比度增强滤波器。参数alpha用于控制滤波器的形状,范围为【0,1】,默认值为0.2。返回的也是3×3大小的矩阵。