opencv中常用的非线性滤波器--中值滤波medianBlur() 和 双边滤波bilateralFilter()
2017-07-06 22:42
246 查看
1.1 中值滤波
中值滤波的原理很简单,就是用像素点邻域灰度值的中值来代替该像素点的灰度。由于中值滤波是基于排序统计理论,所以其对脉冲噪声、椒盐噪声会有很好的滤波效果,并能保留图像的边缘细节。但是代价就是效率低,花费的时间是均值滤波的5倍以上。
opencv中对应的函数为medianBlur(), 下面分别利用高斯滤波和中值滤波对衣服有椒盐噪声的图片进行滤波。
1.2 源代码及滤波效果
2.1 双边滤波
双边滤波中双边的意思是同时考虑两条边(因素),这两条边分别是空间域和值域。这里的空间域是指考虑空间位置关系,根据距离核心位置的距离的远近给予不同的加权值,原理和高斯滤波一样。而值域是指考虑邻域范围内的像素差值计算出滤波器系数,类似于α-截尾均值滤波器(去掉百分率为α的最小值和最大之后剩下像素的均值作为滤波器)。
双边滤波是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去燥的目的,具有简单、非迭代、局部的特点。双边滤波在图像处理领域中有着广泛的应用,比如去噪、去马赛克、光流估计等等。
更多的关键双边滤波原理的推导和说明可以参考下面两篇博客:
1. http://blog.csdn.net/abcjennifer/article/details/7616663
2.http://blog.csdn.net/dangchangying/article/details/14451963
opencv中的双边滤波函数为bilateralFilter(src, dst, d, sigmaColor, sigmaSpace, borderType), 下面展示了利用双边滤波对图像进行滤波的处理。
其中sigmaColor越大,就表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的相等颜色区域。sigmaSpace越大,则表明越远的像素会对kernel中心的像素产生影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
下面通过调用opencv的函数比较高斯滤波和双边滤波的效果。
2.2 代码及滤波效果
中值滤波的原理很简单,就是用像素点邻域灰度值的中值来代替该像素点的灰度。由于中值滤波是基于排序统计理论,所以其对脉冲噪声、椒盐噪声会有很好的滤波效果,并能保留图像的边缘细节。但是代价就是效率低,花费的时间是均值滤波的5倍以上。
opencv中对应的函数为medianBlur(), 下面分别利用高斯滤波和中值滤波对衣服有椒盐噪声的图片进行滤波。
1.2 源代码及滤波效果
#include<opencv.hpp> #include<iostream> int main(void) { cv::Mat src = cv::imread("d:/Opencv Picture/Lena1.png", CV_LOAD_IMAGE_GRAYSCALE); if (!src.data) { std::cout << "image read error!!!\n"; } cv::imshow("src", src); //Gaussian Filter cv::Mat GaussianFilterResult; cv::GaussianBlur(src, GaussianFilterResult, cv::Size(7, 7), 2, 2); cv::imshow("GaussianBlur result", GaussianFilterResult); //medianFilter cv::Mat medianFilterResult; cv::medianBlur(src, medianFilterResult, 7); cv::imshow("medianBlur result", medianFilterResult); cvWaitKey(0); return 0; }
2.1 双边滤波
双边滤波中双边的意思是同时考虑两条边(因素),这两条边分别是空间域和值域。这里的空间域是指考虑空间位置关系,根据距离核心位置的距离的远近给予不同的加权值,原理和高斯滤波一样。而值域是指考虑邻域范围内的像素差值计算出滤波器系数,类似于α-截尾均值滤波器(去掉百分率为α的最小值和最大之后剩下像素的均值作为滤波器)。
双边滤波是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去燥的目的,具有简单、非迭代、局部的特点。双边滤波在图像处理领域中有着广泛的应用,比如去噪、去马赛克、光流估计等等。
更多的关键双边滤波原理的推导和说明可以参考下面两篇博客:
1. http://blog.csdn.net/abcjennifer/article/details/7616663
2.http://blog.csdn.net/dangchangying/article/details/14451963
opencv中的双边滤波函数为bilateralFilter(src, dst, d, sigmaColor, sigmaSpace, borderType), 下面展示了利用双边滤波对图像进行滤波的处理。
其中sigmaColor越大,就表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的相等颜色区域。sigmaSpace越大,则表明越远的像素会对kernel中心的像素产生影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
下面通过调用opencv的函数比较高斯滤波和双边滤波的效果。
2.2 代码及滤波效果
#include<opencv.hpp> #include<iostream> int main(void) { cv::Mat src = cv::imread("d:/Opencv Picture/bilateral filter.png"); if (!src.data) { std::cout << "image read error!!!\n"; } cv::imshow("src", src); //bilateral filter cv::Mat bilateralFilterResult; cv::bilateralFilter(src, bilateralFilterResult, 25,50,35); cv::imshow("medianBlur result", bilateralFilterResult); cvWaitKey(0); return 0; }
相关文章推荐
- Opencv中的非线性滤波器概念介绍——中值滤波、双边滤波
- iOS-Opencv 基础学习五 ----中值滤波(medianBlur)和 双边滤波(bilateralFilter)
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- opencv的中值滤波、双边滤波、提高对比度
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- [转]【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 5基于opencv的非线性滤波(中值滤波_双边滤波)
- OpenCV之九 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- Opencv学习:非线性滤波:中值滤波、双边滤波
- 图像平滑技术之核算子、均值滤波、中值滤波、高斯滤波、双边滤滤、导向滤波的原理概要及OpenCV代码实现
- 学习【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波---思维导图笔记
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- opencv----滤波函数:方框滤波、均值滤波、高斯滤波、中值滤波、双边滤波
- OpenCV学习十:图片的模糊(双边滤波、中值滤波、高斯滤波等等)以及锐化算子
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波
- 【OpenCV3图像处理】非线性滤波:中值滤波、双边滤波、引导滤波
- 【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波