首页 > 代码库 > 高效中值滤波的方法及实现

高效中值滤波的方法及实现

中值滤波的原理很简单:就是用滑动窗口中灰度中值代替窗口中心像素的灰度值


高效中值滤波:

wKioL1SO02-TdjaBAAJjgZ-7R9s798.jpg

wKiom1SO0tGz5nYnAADPax42eHc203.jpg

wKioL1SO02_CapQNAAI5AChdMq8725.jpg

代码实现:
//中值滤波
//窗口大小为width_Aperture*width_Aperture的正方形
void MedianBlur(const Mat &image_Src, Mat &image_Dst, int width_Aperture)
{
	/////////////重新分配图像(如果需要)/////////////////////
	int width_Dst=image_Src.cols;
	int height_Dst=image_Src.rows;
	image_Dst.create(Size(width_Dst,height_Dst),CV_8UC1);//如果重新分配,之前的空间会扔掉
	image_Dst.setTo(Scalar(0));//置为0

	//滑动窗口
	int pixelCount=width_Aperture*width_Aperture;//窗口内像素总个数
	Mat image_Aperture(width_Aperture,width_Aperture,CV_8UC1);//滑动窗口图像

	//直方图
	Mat histogram;
	int histogramSize=256;//灰度等级
	int thresholdValue=http://www.mamicode.com/pixelCount/2+1;//step1.设置阈值(步骤参考:图像的高效编程要点之四)>

使用窗口大小为3*3的窗口,运行效果图:

wKiom1SO04mhmep2AAKFs-KPMaM505.jpg

wKioL1SO1CiDmbp6AAHtVVKzbvM013.jpg

运行这段代码之前,需要配置一下OpenCV,算法核心和OpenCV没有太大关联。

注意:算法没有处理边界的情况,还不太清楚怎么处理边界,有会的朋友,希望能够一起分享一下边界处理的一些技巧

代码写的不是特别规范,大家有什么看不懂的地方,可以一起讨论讨论


本文出自 “QQ” 博客,请务必保留此出处http://qianqing13579.blog.51cto.com/5255432/1590217

高效中值滤波的方法及实现