zoukankan      html  css  js  c++  java
  • 均值滤波

    学习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+(y)])
    #define SETPIX(image,x,y,value) (((image->imageData)[(x)*image->width+y])=((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");
            cvDestoryWindow("DST");
    
    }





    从上到下依次採用3x3,5x5,11x11的模板进行处理

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

  • 相关阅读:
    js中变量声明提前
    冒泡与捕获
    win7安装不了nodejs及解决方法
    nodejs配置app的服务
    Ming Rpc
    test
    Java8 Lambda sample (iwantmoon.com出品)
    Spring Mvc 输出Json(iwantmoon.com出品)
    单点登录(iwantmoon.com出品)
    虚拟机WIN10发布.NetCore 3.1
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5171072.html
Copyright © 2011-2022 走看看