padarray函数和fspecial函数(matlab)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjsh_123456/article/details/79269864

在空间域中对图像进行滤波处理的时候,我们通常需要对原图像进行填充,也需要用到不同的滤波器。如果我们自己实现对图像边界的填充,或者一些滤波器的模板,有时候会显得麻烦,而matlab中的padarray函数就提供了对图像进行边界填充的几种方法,方便我们使用,fspecial函数则提供了一些空间域滤波器的生成。

注意:没有默认值的参数必须在调用函数时提供值。

padarray函数:


作用:填充矩阵(可以是图像或者数组)

函数原型:B = padarray(A, padsize, padvalue, dirction); 和 B = padarray(A, padsize, method, direction);

说明:A为输入的图像,B为填充后的图像。

          padsize为需要扩充的行数和列数,为[k1, k2],k1为要扩展的行数(相对于某一边而言),k2为要扩展的列数。k1,k2必须为非负整数,可以为0,为0时表示不填充。

           padvalue为填充的值,必须是一个标量(即一个数)。默认值为0。

           direction表示填充的方向,有3个值可以选。'both' : 表示在每一维的第一个元素前和最后一个元素后填充。'post' : 表示在每一维的第一个元素后填充。'pre' : 表示在每一维的第一个元素前填充。 默认值为 'both'。

            method为填充方法,有3个值可以选。'symmetric' : 表示通过围绕边界进行镜像反射来扩展图像,即扩展部分和原图像部分呈现对称的性质 'replicate'表示通过复制外边界中的值来扩展图像,即重复图像的边界。 'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展,即复制移动原图像。

            该函数调用时最少提供前面两个参数,第三个参数不提供时默认为0,第四个参数不提供时默认为'both'。

例子如下:

A =  1      2      3

        4      5      6

        7      8      9




fspecial函数:


作用:建立预定义的二维滤波模板:

函数原型:H = fspecial(type, para);

说明:type表示滤波模板的类型,para表示该类型滤波对应的参数,每种类型对应的参数都有默认值。

         type可能的取值如下:'average', 'disk', 'gaussian', 'laplacian', 'log', 'motion', 'prewitt', 'sobel', 'unsharp'。

1. 'average' :  


H = fspecial('average', size); 返回平均滤波器,大小为size,size可以是[k1, k2]或者是一个标量k(此时表示该滤波器的形状为方形),默认值为[3, 3]。sum(H(:)) = 1(即滤波器所有元素之和为1)。

         例子:

 

2. 'disk' : 


H = fspecial('disk', radius); 返回一个圆形区域均值滤波器,radius为圆形的半径,默认为5。则滤波器为边长是2*radius+1的方形滤波器。sum(H(:)) = 1。

例子:


3. 'gaussian': 


H = fspecial('gaussian', size, sigma); 返回一个旋转对称高斯低通滤波器,size表示滤波器的大小,与均值滤波器中size的含义相同,默认值[3, 3]。sigma为滤波器的标准差,其值大于0,默认值为0.5。sum(H(:)) = 1。

高斯函数(以模板中心为0,0进行计算):

例子如下:


4. 'laplacian' :  


H = fspecial('laplacian', alpha); 返回一个大小为[3, 3]的拉普拉斯滤波器,alpha用于控制算子的形状,取值范围为[0.0, 1.0],默认值为0.2。sum(H(:)) = 0。alpha取0, 0.5, 1的情况较为特殊。

例子如下:


5.  'log' : 


H = fspecial('log', size, sigma); 返回一个旋转对称拉普拉斯滤波器,size和sigma的取值与前面高斯低通滤波器相同,size的默认值为[5, 5],sigma的默认值为0.5。sum(H(:)) = 0。

例子如下:


6. 'motion' :  


H = fspecial('motion', len, theta); 返回一个运动滤波器,该滤波器与图像卷积之后,得到的图像是相机经过逆时针旋转theta度(单位为角度),运动的距离为len(单位为像素)拍到的运动图像。len默认值为9, theta默认值为0,表示相机水平运动9像素。sum(H(:)) = 1。该滤波器的大小随着参数的不同而变化,且中心对称。

例子如下:


7. 'prewitt' :  


H = fspecial('prewitt'); 返回一个水平方向上的边缘增强滤波器,大小为[3, 3],无其他参数。如果想要得到一个增强垂直方向上边缘的滤波器,使用H = H'(表示H的转置)即可。sum(H(:)) = 0。

例子如下:


8. 'sobel' :  


H = fspecial('sobel'); 返回一个用于边缘提取的水平方向上的sobel滤波器。无其他参数,使用H = H'获取垂直方向上的边缘提取模板。sum(H(:)) = 0。

例子如下:


9.  'unsharp' : 


H = fspecial('unsharp', alpha); 返回一个对比度增强滤波器。大小为[3, 3]。参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。sum(H(:)) = 1。通过H = A + -1 * B; 其中A = [0, 0, 0; 0, 1, 0; 0, 0, 0],B = fspecial('laplacian', alpha)。两者alpha相同。

例子如下:



猜你喜欢

转载自blog.csdn.net/cjsh_123456/article/details/79269864
今日推荐