php网站开发有前景吗,网站开发内部工单,建个网站花钱做百度推广,网络服务器搭建与管理OpenCV学习笔记#xff08;六#xff09;#xff1a;非线性滤波-中值、双边#xff1a;medianBlur(),bilateralFilter()
1、中值滤波#xff08;Median filter#xff09; 是一种典型的非线性滤波技术#xff0c;基本思想是用像素点邻域灰度值的中值来代替该像素点的灰…OpenCV学习笔记六非线性滤波-中值、双边medianBlur(),bilateralFilter()
1、中值滤波Median filter 是一种典型的非线性滤波技术基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值该方法在去除脉冲噪声、斑点噪声speckle noise和椒盐噪声salt-and-pepper noise的同时又能保留图像边缘细节。 优点 中值滤波在一定的条件下可以克服常见线性滤波器带来的图像细节模糊而且对滤除脉冲干扰及图像扫描噪声非常有效也常用于保护边缘信息, 保存边缘的特性使它在不希望出现边缘模糊的场合也很有用是非常经典的平滑噪声处理方法。 缺点 1中值滤波花费的时间是均值滤波的5倍以上 2对一些细节多特别是线、尖顶等细节多的图像不宜采用
2、双边滤波Bilateral filter 是结合图像的空间邻近度和像素值相似度的一种折衷处理同时考虑空域信息和灰度相似性达到保边去噪的目的。具有简单、非迭代、局部的特点。 优点 双边滤波器的好处是可以做边缘保存edge preserving双边滤波器顾名思义比高斯滤波多了一个高斯方差sigmad它是基于空间分布的高斯滤波函数所以在边缘附近离的较远的像素不会太多影响到边缘上的像素值这样就保证了边缘附近像素值的保存。 缺点 但是由于保存了过多的高频信息对于彩色图像里的高频噪声双边滤波器不能够干净的滤掉只能够对于低频信息进行较好的滤波。 在双边滤波器中输出像素的值依赖于邻域像素值的加权值组合而加权系数w(i,j,k,l)取决于定义域核和值域核的乘积。
代码示例
#include opencv2/opencv.hppMat g_srcImage,g_dstImage1,g_dstImage2,g_dstImage3; //存储图片的Mat类型int g_nMedianBlurValue10; //中值滤波参数值
int g_nBilateralFilterValue30; //双边滤波参数值using namespace cv;
using namespace std;int main(int argc, char *argv[])
{// 载入原图g_srcImage imread( F:/C/2. OPENCV 3.1.0/TEST/7.jpg, 1 );if( !g_srcImage.data ){ printf(Ohno读取srcImage错误~ \n); return false; }//克隆原图到三个Mat类型中g_dstImage1 g_srcImage.clone( );g_dstImage2 g_srcImage.clone( );//显示原图imshow(【0原图窗口】,g_srcImage);// 1、中值滤波namedWindow(【4中值滤波】, 1);createTrackbar(参数值, 【4中值滤波】,g_nMedianBlurValue, 50,on_MedianBlur );on_MedianBlur(g_nMedianBlurValue,0);// 2、双边滤波namedWindow(【5双边滤波】, 1);createTrackbar(参数值, 【5双边滤波】,g_nBilateralFilterValue, 50,on_BilateralFilter);on_BilateralFilter(g_nBilateralFilterValue,0);//输出一些帮助信息coutendl\t运行成功请调整滚动条观察图像效果~\n\n\t按下“q”键时程序退出。\n;//按下“q”键时程序退出while(char(waitKey(1)) ! q) {}return 0
}// 1、中值滤波操作的回调函数
static void on_MedianBlur(int, void *)
{medianBlur ( g_srcImage, g_dstImage1, g_nMedianBlurValue*21 );imshow(【4中值滤波】, g_dstImage1);
}// 2、双边滤波操作的回调函数
static void on_BilateralFilter(int, void *)
{bilateralFilter ( g_srcImage, g_dstImage2, g_nBilateralFilterValue, g_nBilateralFilterValue*2, g_nBilateralFilterValue/2 );imshow(【5双边滤波】, g_dstImage2);
}结果 参考【OpenCV入门教程之九】 非线性滤波专场中值滤波、双边滤波