imfilter,conv,fspecial,imgaussfilt的区别

1.高斯函数的几种使用

imgaussfilt直接对图片进行高斯滤波,相关设置包括

FilterSize - 高斯滤波器的大小
正奇整数 | 由正奇整数组成的二元素向量

Padding - 图像填充
'replicate' (默认) | 数值标量 | 'circular' | 'symmetric'

FilterDomain - 要在其中执行滤波的域
'auto' (默认) | 'spatial' | 'frequency'

imfilter编写高斯函数与图片相关运算滤波

fspecial生成高斯模板

  • 如果图像 A 包含 Inf 或 NaN,则频域滤波的 imgaussfilt 的行为会是未定义状态。如果将 'FilterDomain' 参数设置为 'frequency',或将其设置为 'auto' 并且 imgaussfilt 使用频域滤波,就会发生这种情况。要以类似于 imfilter 的方式限制输出中 Inf 和 NaN 的传播,请考虑将 'FilterDomain' 参数设置为 'spatial'

  • 如果将 'FilterDomain' 参数设置为 'auto',则 imgaussfilt 使用内部启发式方法来确定空间域还是频域滤波更快。这种启发式方法依赖于机器,可能因不同配置而异。为了获得最优性能,请尝试两个选项 'spatial' 和 'frequency',以确定适合您的图像和核大小的最佳滤波域。

  • 如果未指定 'Padding' 参数,则 imgaussfilt 默认使用 'replicate' 填充,这与 imfilter 使用的默认0填充不同。

img1 = imgaussfilt(imgGray,0.5,'FilterSize',[15,15],'Padding',0,'FilterDomain' ,'spatial');
f = fspecial('gaussian',[15,15],0.5);
img2 = imfilter(imgGray,f);
isequal(img1,img2)
ans =

  logical

   1

2.conv2和imfilter的区别 

conv2(A,h,'same') = imfilter(A,h,'conv')都是实行卷积运算,计算过程中会翻转卷积核。

先定义一个矩阵A,和卷积核h如下:

A = magic(5)

A =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

h = (-1,0,1);

imfilter 比其他一些滤波函数更节省内存,因为它输出的数组与输入图像数组具有相同的数据类型。

B = imfilter(A,h,'corr/conv','same/full') 根据一个或多个指定的选项执行多维滤波。

当输入的类为 double 时,imfilter 的输出具有负值。为避免负值,请在调用 imfilter 之前将图像转换为不同数据类型。例如,当输入类型为 uint8 时,imfilter 将输出值截断为 0。将图像转换为有符号整数类型可能也是合适的。

imfilter(A,h)   %有负值,默认使用相关滤波,不翻转卷积核

ans = 5×5

    24   -16   -16    14    -8
     5   -16     9     9   -14
     6     9    14     9   -20
    12     9     9   -16   -21
    18    14   -16   -16    -2


A = uint8(magic(5));   %先转成uint8,不会输出负值
imfilter(A,h)

ans = 5x5 uint8 matrix

   24    0    0   14    0
    5    0    9    9    0
    6    9   14    9    0
   12    9    9    0    0
   18   14    0    0    0

conv2是2维卷积函数,默认情况下输出的是‘full’形式的矩阵

  • 'full' - 返回完整的二维卷积。

  • 'same' - 返回卷积中大小与 A 相同的中心部分。

  • 'valid' - 仅返回计算的没有补零边缘的卷积部分。

conv2(A,h)

ans =

   -17   -24    16    16   -14     8    15
   -23    -5    16    -9    -9    14    16
    -4    -6    -9   -14    -9    20    22
   -10   -12    -9    -9    16    21     3
   -11   -18   -14    16    16     2     9

conv2(A,h,'same')

ans =

   -24    16    16   -14     8
    -5    16    -9    -9    14
    -6    -9   -14    -9    20
   -12    -9    -9    16    21
   -18   -14    16    16     2

conv2(A,h,'valid')

ans =

    16    16   -14
    16    -9    -9
    -9   -14    -9
    -9    -9    16
   -14    16    16

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值