学习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的模板进行处理

均值滤波的缺点是:不能很好的保存边缘信息

时间: 2024-10-19 13:02:30

学习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 &l

学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波

本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤波","高斯滤波"三种常见的邻域滤波操作.而作为非线性滤波的"中值滤波"和"双边滤波",我们下次再分析. 因为文章很长,如果详细啃的话,或许会消化不良.在这里给大家一个指引,如果是单单想要掌握这篇文章中讲解的OpenCV线性滤波相关的三个函

opencv初学习-椒盐噪声-中值滤波-均值滤波-腐蚀膨胀

#include <opencv2\opencv.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\imgcodecs\imgcodecs.hpp>#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<iomanip>void salt(cv

灰度图像--图像增强 平滑之均值滤波、高斯滤波

学习DIP第30天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

图像算法之十二:非局部均值滤波及其Matlab实现

保边去噪算法之二: 首先谈一下什么是非局部均值滤波.在此之前,我们先来看一下均值滤波的原理. 均值滤波 均值滤波的计算非常简单,将图像像素点灰度记录在数组中,然后设置方框半径的值,然后将方框中的所有点的像素求和取平均,得到的结果就是均值滤波后对应像素点的灰度值. 优点: 计算很快而且简单 从算法可以看出,只是求了平均,并没有很复杂的计算 缺点: 得到的图像很模糊 当方框的半径越大,得到的图像中那些变化较大的地方(边缘)计算后变化就越小,即边缘不明显,即模糊 非局部均值滤波 非局部均值滤波的基本原

13.均值滤波

//均值滤波 int g_nBlurValue; void on_ChangeBlurValue(int,void*) { if(g_nBlurValue>0) { blur(g_srcImage_Contrast,g_dstImage_Contrast,Size(g_nBlurValue,g_nBlurValue)); imshow("均值滤波",g_dstImage_Contrast); } } void Test_Blur() { namedWindow("均值滤

图像处理之均值滤波介绍及C算法实现

1 均值滤波介绍 滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(如3×3模板:以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身),再用模板中的全体像素的平均值来代替原来像素值. 均值滤波效果:平滑线性滤波处理降低了图像的“尖锐”变化.由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降低噪声.均值滤波器的主要应用是

高效均值滤波的方法与实现

均值滤波的基本原理很简单,就是用滑动窗口内所有像素的平均值代替窗口中心像素的灰度值 高效均值滤波的原理如下: 代码: //高效均值滤波 void Blur(const Mat &image_Src, Mat &image_Dst, Size size_Aperture) { //////////step 1.重新分配图像(如果需要)///////////////// //新图像的大小 int width_Dst=image_Src.cols; int height_Dst=image_Sr

快速均值滤波

参考任明武老师的文章,把均值滤波以模板形式实现,真是很快对于500*376的图像,以大小15的半径做的滤波,速度竟然3个毫秒.如果代码有不足之处,希望批评. 代码:template<typename M,typename N>void meanFilter(M* data,N* outputData,int width,int height,int r){    assert(data!=NULL);    int i,j,k;    int block=(r<<1)+1;