1 均值滤波介绍

滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术。

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(如3×3模板:以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身),再用模板中的全体像素的平均值来代替原来像素值。

均值滤波效果:平滑线性滤波处理降低了图像的“尖锐”变化。由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降低噪声。均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域。然而,由于图像的边缘也是由图像灰度的尖锐变化带来的特性,所以均值滤波处理还是存在着边缘模糊的负面效应。

2 均值滤波算法实现(C语言)

  1. // junzhilvbo.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "stdlib.h"
  6. #include "string.h"
  7.  
  8. #define DATA_X 256 //数字图像水平像素个数
  9. #define DATA_Y 256 //数字图像竖直像素个数
  10.  
  11. void OpenFile(const char *cFilePath , int nOriginalData[DATA_Y][DATA_X])
  12. {
  13. printf("正在获取数据......\n");
  14. FILE *fp ;
  15. fp = fopen(cFilePath , "r");
  16. if(NULL == fp)
  17. {
  18. printf("open file failed! \n");
  19. return ;
  20. }
  21.  
  22. unsigned char *pData = (unsigned char *)malloc(sizeof(unsigned char)*DATA_X*DATA_Y);
  23. if(NULL == pData)
  24. {
  25. printf("memory malloc failed!\n");
  26. return ;
  27. }
  28.  
  29. fread(pData , sizeof(unsigned char)*DATA_X*DATA_Y , , fp);
  30.  
  31. int count_x = ;
  32. int count_y = ;
  33.  
  34. for(;count_y < DATA_Y ; count_y++)
  35. {
  36. for(; count_x < DATA_X ;count_x++)
  37. {
  38. nOriginalData[count_y][count_x] = pData[count_y*DATA_Y+count_x];
  39. }
  40. }
  41.  
  42. free(pData);
  43. fclose(fp);
  44.  
  45. return ;
  46. }
  47.  
  48. void SaveFile(const char *cFilePath , int nResultData[DATA_Y][DATA_X])
  49. {
  50. printf("正在保存数据......\n");
  51. int count_x,count_y;
  52.  
  53. FILE *fp ;
  54. fp = fopen(cFilePath , "w");
  55. if(NULL == fp)
  56. {
  57. printf("open file failed! \n");
  58. return ;
  59. }
  60.  
  61. for(count_y=;count_y<DATA_Y;count_y++)
  62. {
  63. for(count_x=;count_x<DATA_X;count_x++)
  64. {
  65. fwrite(&nResultData[count_y][count_x],,,fp);
  66. }
  67. }
  68.  
  69. fclose(fp);
  70. printf("文件保存成功! \n");
  71.  
  72. return ;
  73. }
  74.  
  75. bool JunZhiLvBo(const int nOriginalData[DATA_Y][DATA_X], int nResultData[DATA_Y][DATA_X])
  76. {
  77. printf("正在进行均值滤波......\n");
  78. int count_x ,count_y ;
  79.  
  80. /*3*3模版滤波计算,不计算边缘像素*/
  81. for(count_y = ; count_y < DATA_Y ; count_y++)
  82. {
  83. for(count_x = ; count_x < DATA_X ;count_x++)
  84. {
  85. nResultData[count_y][count_x] = (int)((nOriginalData[count_y-][count_x-]+
  86. nOriginalData[count_y-][count_x] +
  87. nOriginalData[count_y-][count_x+]+
  88. nOriginalData[count_y][count_x-] +
  89. nOriginalData[count_y][count_x] +
  90. nOriginalData[count_y][count_x+] +
  91. nOriginalData[count_y+][count_x-]+
  92. nOriginalData[count_y+][count_x] +
  93. nOriginalData[count_y+][count_x+])/);
  94. }
  95. }
  96.  
  97. /*对四个边缘直接进行赋值处理*/
  98. for(count_x=;count_x<DATA_X;count_x++) //水平边缘像素等于原来像素灰度值
  99. {
  100. nResultData[][count_x]=nOriginalData[][count_x];
  101. nResultData[DATA_Y-][count_x]=nOriginalData[DATA_Y-][count_x];
  102. }
  103. for(count_y=;count_y<DATA_Y-;count_y++) //竖直边缘像素等于原来像素灰度值
  104. {
  105. nResultData[count_y][]=nOriginalData[count_y][];
  106. nResultData[count_y][DATA_X-]=nOriginalData[count_y][DATA_X-];
  107. }
  108.  
  109. return true ;
  110. }
  111.  
  112. int _tmain(int argc, _TCHAR* argv[])
  113. {
  114. int nOriginalData[DATA_Y][DATA_X]; //保存原始图像灰度值
  115. int nResultData[DATA_Y][DATA_X]; //保存滤波后的灰度值
  116.  
  117. memset(nOriginalData,,sizeof(nOriginalData)); //初始化数组
  118. memset(nResultData,,sizeof(nResultData));
  119.  
  120. char cOpenFilePath[] = "Lena.raw"; //图像文件路径
  121.  
  122. OpenFile(cOpenFilePath,nOriginalData);
  123.  
  124. if(!JunZhiLvBo(nOriginalData,nResultData)) //滤波计算
  125. {
  126. printf("操作失败!\n");
  127. return ;
  128. }
  129.  
  130. char cSaveFilePath[] = "Result.raw"; //文件保存路径
  131.  
  132. SaveFile(cSaveFilePath,nResultData);
  133.  
  134. return ;
  135. }

3 均值滤波算法效果对比

均值滤波之前:                                均值滤波之后:

 

图像处理之均值滤波介绍及C算法实现的更多相关文章

  1. opencv3.2.0图像处理之均值滤波blur API函数

    ##.均值滤波:blur函数 ##函数原型 : ,-),int borderType=BORDER_DEFAULT) (参数详解同boxFilter函数) /**********新建Qt控制台程序** ...

  2. 图像处理之中值滤波介绍及C实现

    1 中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波的基本原理是把数字图像或数字序 ...

  3. opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现

    开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...

  4. 基于FPGA的均值滤波算法实现

    我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于 ...

  5. 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)

    相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...

  6. 基于MATLAB的均值滤波算法实现

    在图像采集和生成中会不可避免的引入噪声,图像噪声是指存在于图像数据中的不必要的或多余的干扰信息,这对我们对图像信息的提取造成干扰,所以要进行去噪声处理,常见的去除噪声的方法有均值滤波.中值滤波.高斯滤 ...

  7. Win8Metro(C#)数字图像处理--2.9图像均值滤波

    原文:Win8Metro(C#)数字图像处理--2.9图像均值滤波  [函数名称] 图像均值滤波函数MeanFilterProcess(WriteableBitmap src) [函数代码]    ...

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

    本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...

  9. 滤波器——BoxBlur均值滤波及其快速实现

    个人博客地址:滤波器--BoxBlur均值滤波及其快速实现 动机:卷积核.滤波器.卷积.相关 在数字图像处理的语境里,图像一般是二维或三维的矩阵,卷积核(kernel)和滤波器(filter)通常指代 ...

随机推荐

  1. Eclipse将Java项目打成jar工具包

    jar包:就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法. jar包可分为可执行jar包和jar工具包,在这里, ...

  2. phpcms v9手机站不支持组图($pictureurls)的修改

    phpcms v9自带的手机门户网站,有时候我们需要用到组图功能$pictureurls,我在做的时候发现,如果$pictureurls中只有一张图片会正常显示,但是如果有两张或两张以上的图片的时候, ...

  3. oozie的shell-action中加入hive脚本命令启动执行shell同时操作hive,抛异常Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143

    使用oozie来调度操作,用shell的action执行命令,其中shell里包含着hive -e 操作执行时,oozie窗口报 WARN ShellActionExecutor: - SERVER[ ...

  4. 进击的SDN

    SDN是什么? 不再是OSI七层模型,全新的SDN三层模型. 起源于斯坦福大学博士生领导的一个项目Ethane:通过一个集中式控制器(NOX),网络管理员可以定义基于网络流的控制策略,并将这个策略用于 ...

  5. 如何利用Xshell在Linux下安装jdk

    本文会详细介绍如何在Linux下安装JDK1.8 首先要设置虚拟机的IP地址,不知道如何设置的话可以 翻看我的前一篇博客   http://www.cnblogs.com/xiaoxiaoSMILE/ ...

  6. (转)微软借力.NET开源跨平台支持,布局物联网平台开发

    今天科技类最大的新闻,莫过于微软宣布.NET开发框架开源计划..NET 开源,集成 Clang 和 LLVM 并且自带 Android 模拟器,这意味着 Visual Studio 这个当下最好没有之 ...

  7. $(document).click() 在苹果手机上不能正常运行解决方案

    本来是如下一段跳转代码,发现在安卓和微信开发者工具上都能正常运行,但是苹果手机就不行了. $(document).on('click', '.url', function(){ location.hr ...

  8. Python2 读取表格类型文件

    resp = My_Request_Get(xls_url) # My_Request_Get是我自己封装的请求函数,可修改为requests请求f = ]) nrows = table._dimnr ...

  9. Java中int与String间的类型转换

    int -> String int i=12345;String s=""; 除了直接调用i.toString();还有以下两种方法第一种方法:s=i+"" ...

  10. 解决sublime install package连不上的问题

    下载文件 百度网盘:https://pan.baidu.com/s/1Z-11d4btZJyx5zA7uzNi8Q 修改配置文件 转载请注明博客出处:http://www.cnblogs.com/cj ...