Opencv学习——非线性滤波

在很多情况下,使用邻域像素的非线性滤波会得到更好的效果。比如在噪声是散粒噪声而不是高斯噪声

1.中值滤波

用像素点邻域灰度值的中值来代替该像素点的灰度值。对于斑点噪声椒盐噪声来说尤其有用。对于一些细节(特别是细、尖顶等)多的图像不太合适。

与均值滤波对比:

优势:消除噪声能力更胜一筹,无论是消除噪声还是保存边缘方面都不错的选择。

劣势:花费的时间是均值滤波的5倍以上。

void medianBlur(InputArray src,OutputArray dst,int ksize)
src输入参数1/3/4通道的Mat类型图像
dst输出参数,尺寸与类型与源图像一样
ksize必须为奇数,大于1   

 

2.双边滤波

是结合图像的空间邻近度和像素值相似度的一种折中处理。其好处就是可以做到边缘保存。

 

void bilateralFilter(InputArray src,OutputArray dst,int d, double sigmaColor,double sigmaSpace,int borderType=BORDER_DEFAULT)
src输入参数,源图像
dst目标图像,输出参数
d每个像素邻域的直径
sigmaColor颜色空间滤波器的sigma值,该值越大,就表明该像素邻域内有越宽广的颜色会被混合在一起
sigmaSpace坐标空间的标注方差,数值越大,以为值越远的像素会互相影响
borderType某种边界模式有默认值

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
	Mat image = imread("F:\\C++project\\picturetest\\2.jpg");
	namedWindow("中值滤波(原图)");
	namedWindow("中值滤波(效果图)");
	imshow("中值滤波(原图)", image);
	Mat out;
	bilateralFilter(image, out, 25, 25 * 2, 25 / 2);
	//medianBlur(image, out, 7);
	//GaussianBlur(image, out, Size(3, 3),0,0);
	imshow("中值滤波(效果图)", out);
	waitKey(0);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值