空间域图像增强:OpenCV快速图像边缘滤波算法

空间域图像增强:OpenCV快速图像边缘滤波算法


由于前面 [空间域图像增强:OpenCV边缘保留滤波算法] 中的高斯双边模糊和 mean shift均值模糊计算量都很大,因此无法实时地实现图像边缘保留滤波,这大大限制了它们的使用场景, OpenCV中实现了一种快速的图像边缘保留滤波算法。

高斯双边滤波和均值迁移滤波在进行边缘保留滤波计算的时候除了考虑R,G,B三个维度的值,还会考虑空间中XY这两个坐标维度,这导致了这两种滤波算法的计算量较大。而快速边缘保留滤波算法通过等价变换到低纬度空间,从而实现了数据降维与快速计算。

OpenCV中的快速图像边缘滤波算法C++ api如下:

 void edgePreservingFilter(InputArray src, 
 						   OutputArray dst, 
 						   int flags = 1,
       					   float sigma_s = 60, 
                           float sigma_r = 0.4f);

其中sigma_s取值范围是0 ~ 200,sigma_r取值范围是0 ~ 1。当sigma_s取值不变时,sigma_r取值越大,则图像滤波效果越明显;当sigma_r取值不变时,sigma_s取值越大,则图像模糊效果越明显。

使用默认的参数值,sigma_s= 60, sigma_r= 0.4f:

edgePreservingFilter(input,gsBlur_output,1, 60, 0.4f);

在这里插入图片描述
使用sigma_s = 60, sigma_r= 0.7f:

edgePreservingFilter(input,gsBlur_output,1, 60, 0.7f);

在这里插入图片描述
使用sigma_s= 80, sigma_r= 0.4f:

edgePreservingFilter(input,gsBlur_output,1, 80, 0.4f);

在这里插入图片描述

快速边缘保留滤波算法的计算时间:

	double start_time = getTickCount();
	edgePreservingFilter(input,Blur_output,1, 150,  0.8f);
	double run_time = (getTickCount() - start_time) / getTickFrequency();
	cout << "blur time:" << run_time << endl;

经过测试:

  • 快速边缘保留滤波算法计算时间为1.24749s。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值