首页 > 代码库 > 高效均值滤波(加入对边界的处理)

高效均值滤波(加入对边界的处理)

之前在51CTO博客中http://qianqing13579.blog.51cto.com/5255432/1590213,写过均值滤波,但是没有加入对边界的处理,昨天晚上,完成了对边界的处理,代码贴出来,跟大家分享交流一下,没有做太多的优化


void Blur(const Mat &image_Src, Mat &image_Dst, Size size_Aperture)
{
	/////////////step 1.重新分配图像(如果需要)//////////////////////////////
	//新图像的大小
	int width_Dst=image_Src.cols;
	int height_Dst=image_Src.rows;
	image_Dst.create(Size(width_Dst,height_Dst),CV_8UC1);//如果重新分配,之前的空间会扔掉

	//////////////////////////////step 2.创建一副新图像(对源图像加以扩充)////////////////////////////////////////////
	//新图像大小
	int width_Extend=size_Aperture.width>>1;
	int height_Extend=size_Aperture.height>>1;
	int width_New=width_Dst+2*width_Extend;//宽度左右各扩充width_Extend
	int height_New=height_Dst+2*height_Extend;//高度上下各扩充height_Extend

	//创建新图像
	Mat image_New(Size(width_New,height_New),CV_8UC1,Scalar(0));
	
	//拷贝源图像到新图像
	int widthStep_New=image_New.cols;//新图像的步长
	int widthStep_Src=http://www.mamicode.com/image_Src.cols;//源图像的步长>

算法运行之前,需要配置一下OpenCV,算法核心与OpenCV没有太多关联


与OpenCV中的blur函数对比了一下

测试环境:VS2008  Release版本,Lena.bmp,迭代16次,窗口大小:Size(5,3)

平均运行时间,OpenCV为3ms,上面的算法为6ms,慢了整整一倍啊!后面还需要更多的优化工作。


运行结果图:


其中OpenCV的结果图与上面的算法结果图基本一致,我用PS将两幅图像做了减法,两幅图像基本一样

高效均值滤波(加入对边界的处理)