首页 > 代码库 > 学习DIP第1天--均值滤波
学习DIP第1天--均值滤波
均值滤波,是比较简单的滤波方式,比较典型的是以3x3的模板对核心(或者称为锚点)的元素及其周围八个元素进行求和并除以元素个数(即9)得到的值将原值覆盖,基本的实现方法为四层循环,算法时间复杂度:
O(w*h*m*n)
其中w,h为图像宽和长,m,n为模板宽和长。该算法有优化方法,将在以后的博文中讨论。
代码使用OpenCV1.0编写,由于代码水平有限,望请见谅0.0
#include <cv.h> #include <highgui.h> #include <stdio.h> #define GETPIX(image,x,y) ((unsigned char) (image->imageData)[(x)*image->width+(j)]) #define SETPIX(image,x,y,value) (((image->imageData)[(x)*image->width+j])=((unsigned char)value)) void mean(IplImage *src,IplImage * dst,int kernel_size){ unsigned int temp=0; for(int i=kernel_size/2;i<src->width-kernel_size/2;i++) for(int j=kernel_size/2;j<src->height-kernel_size/2;j++){ temp=0; for(int m=-kernel_size/2;m<=kernel_size/2;m++) for(int n=-kernel_size/2;n<=kernel_size/2;n++) temp+=GETPIX(src,i+m,j+n); SETPIX(dst,i,j,(unsigned char)(temp/(kernel_size*kernel_size))); } } int main(){ IplImage * image = cvLoadImage("e:\\OpenCV_Image\\lena.jpg",0); IplImage * test =cvCreateImage(cvSize(512,512),image->depth,1); mean(image,test,11); cvNamedWindow("SRC"); cvNamedWindow("DST"); cvShowImage("SRC",image); cvShowImage("DST",test); cvWaitKey(); cvReleaseImage(&image); cvDestoryWindow(“SRC”);
<span style="white-space:pre"> </span>cvDestoryWindow("DST"); }
从上到下依次采用3x3,5x5,11x11的模板进行处理
均值滤波的缺点是:不能很好的保存边缘信息
学习DIP第1天--均值滤波
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。