OpenCV filter2D和sepFilter2D (任意线型滤波器和分解卷积核)

::返回OpenCV算子速查表

1. 函数定义

1.1 filter2D

OpenCV官方文档filter2D

  • 图像与内核的卷积。
  • 函数在图像上应用任意线型滤波器。
  • 支持就地调用
	void filter2D(
		InputArray src,
		OutputArray dst,
		int ddepth,
		InputArray kernel, 
		Point anchor = Point(-1, -1),
		double delta = 0, 
		int borderType = BORDER_DEFAULT
		);
  • kernel:卷积核,作用于单通道浮点矩阵;如果你想处理多通道图像,不同通道使用不同的滤波器,那么就要先拆通道,然后分别处理。
  • **anchor **:锚点位置,(-1,-1)表示锚点在核的中心。
  • delta:偏移量。

1.2 sepFilter2D

OpenCV官方文档sepFilter2D

  • 使用可分离线性滤波器处理图像
	void sepFilter2D(
		InputArray src,
		OutputArray dst, 
		int ddepth,
		InputArray kernelX, 
		InputArray kernelY,
		Point anchor = Point(-1, -1),
		double delta = 0, 
		int borderType = BORDER_DEFAULT
		);
  • kernelX,kernelY:函数使用的是可分离线性滤波器,也就是说行和列使用的核是不同的,它们都是一维矩阵。
  • delta:偏移量。
  • 其余参数和filter2D是一样的。

1.3 分解卷积核的好处

  • 一个可分核可以理解成两个一维核,在卷积时先调用x内核,然后调用y内核。两个矩阵进行卷积所产生的消耗可以用两个矩阵的面积的积来估算,如此一来,用n×n的核对面积为A的图像进行卷积所需的时间是An2,但如果分解成 n×1 和 1×n 的两个核,那么代价就是 An +An = 2An ,因此分解卷积核可以提高卷积计算的效率。
  • 只要n不小于3,这种计算方式就能提高效率,并且随着n的增大,这种效益愈发明显。

2. 生成卷积核

生成导数核getDerivKernel 生成高斯核getGaussianKernel

  • 导数滤波器 SobelScharr 所使用的核称为导数核,可以由 getDerivKernels() 生成。
  • 高斯模糊算子GaussianBlur所使用的高斯核可以由 getGaussianKernel() 生成。
  • 方框型滤波器(blurboxFilter)还有中值模糊(medianBlur),它们使用的卷积核都是二维矩阵,所以可以使用 fiter2D 替代。而它们所使用的卷积核需要你自己构造。
  • 形态学morphologyEx所使用的核是由 getStructuringElement() 生成的。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值