Qt 5.3 下OpenCV 2.4.11 开发(15)滤波函数

代码列出了高斯滤波、中值滤波、均值滤波和双边滤波:

#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{   
    double duration;

    Mat src = imread("lena.jpg", 1);
    Mat dst;
    namedWindow("src", 0);
    imshow("src", src);
    //高斯滤波,src:输入图像,dst:输出图像
    //Size(5,5)模板大小,为奇数,x方向方差,Y方向方差
    duration = static_cast<double>(getTickCount());
    GaussianBlur(src,dst,Size(31,31),0,0);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Gaussi", 0);
    imshow("Gaussi", dst);
    //中值滤波,src:输入图像,dst::输出图像,模板宽度,为奇数
    duration = static_cast<double>(getTickCount());
    medianBlur(src,dst,31);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Median", 0);
    imshow("Median", dst);
    //均值滤波,src:输入图像,dst:输出图像,模板大小
    //Point(-1,-1):被平滑点位置,为负值取核中心
    duration = static_cast<double>(getTickCount());
    blur(src,dst,Size(31,31),Point(-1,-1));
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Blur", 0);
    imshow("Blur", dst);
    //双边滤波,src:输入图像,dst:输入图像,滤波模板半径
    //颜色空间标准差,坐标空间标准差
    duration = static_cast<double>(getTickCount());
    bilateralFilter(src,dst,31,62,31);
    duration = static_cast<double>(getTickCount()) - duration;
    duration /= getTickFrequency();
    cout << duration << endl;
    namedWindow("Bilatera", 0);
    imshow("Bilatera", dst);

    waitKey(0);
}

为了方便比对,统一采用31像素大小的滤波核,结果如下:



运行时间的结果如下:



通过比较滤波效果和运行时间,各种滤波算法的优缺点如下:

1、均值滤波:速度最快,且不会因为滤波核的增大而增加运行时间,由于均值滤波的特殊运算方式让他可以使用数组保存的向量计算方法使其运算性能与核大小无关,具体算法可以查看另一篇博文点击打开链接(半年前没更新,最近更新了算法),缺点是降噪之后也会降低一些边缘和细节特征的强度,且对与椒盐噪声无能为力。

2、高斯滤波:速度相对于均值滤波略慢,并且不能使运行速度与滤波核的大小无关,对于服从正态分布的噪声有很好的降噪效果。高斯函数与均值滤波最大的不同是,待处理像素点领域范围内的像素加权系数是随着中心向外单调递减的,这就意味着距离中心像素越远的领域对中心像素的影响越小,于是能比均值滤波保留更多的边缘信息,这里是高斯滤波核的计算代码,点击打开链接

3、中值滤波:运算速度比较慢,且在相同滤波核增长速度的前提下,运行时间的增长速度比高斯滤波算法的增长速度大的多,但是对于椒盐噪声有很好的滤波效果。

4、双边带滤波:运行速度最慢,且在相同滤波核增长速度的前提下,运行时间比中值滤波算法增长速度还要大,但是双边带滤波算法的降噪效果的很好的,因为它除了完成降噪功能之外还能很好的保留图像中的边缘信息。这里是双边滤波原理:点击打开链接

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值