图像处理之均值滤波介绍及C算法实现
1 均值滤波介绍
滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术。
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(如3×3模板:以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身),再用模板中的全体像素的平均值来代替原来像素值。
均值滤波效果:平滑线性滤波处理降低了图像的“尖锐”变化。由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降低噪声。均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域。然而,由于图像的边缘也是由图像灰度的尖锐变化带来的特性,所以均值滤波处理还是存在着边缘模糊的负面效应。
2 均值滤波算法实现(C语言)
// junzhilvbo.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "stdlib.h"
#include "string.h" #define DATA_X 256 //数字图像水平像素个数
#define DATA_Y 256 //数字图像竖直像素个数 void OpenFile(const char *cFilePath , int nOriginalData[DATA_Y][DATA_X])
{
printf("正在获取数据......\n");
FILE *fp ;
fp = fopen(cFilePath , "r");
if(NULL == fp)
{
printf("open file failed! \n");
return ;
} unsigned char *pData = (unsigned char *)malloc(sizeof(unsigned char)*DATA_X*DATA_Y);
if(NULL == pData)
{
printf("memory malloc failed!\n");
return ;
} fread(pData , sizeof(unsigned char)*DATA_X*DATA_Y , , fp); int count_x = ;
int count_y = ; for(;count_y < DATA_Y ; count_y++)
{
for(; count_x < DATA_X ;count_x++)
{
nOriginalData[count_y][count_x] = pData[count_y*DATA_Y+count_x];
}
} free(pData);
fclose(fp); return ;
} void SaveFile(const char *cFilePath , int nResultData[DATA_Y][DATA_X])
{
printf("正在保存数据......\n");
int count_x,count_y; FILE *fp ;
fp = fopen(cFilePath , "w");
if(NULL == fp)
{
printf("open file failed! \n");
return ;
} for(count_y=;count_y<DATA_Y;count_y++)
{
for(count_x=;count_x<DATA_X;count_x++)
{
fwrite(&nResultData[count_y][count_x],,,fp);
}
} fclose(fp);
printf("文件保存成功! \n"); return ;
} bool JunZhiLvBo(const int nOriginalData[DATA_Y][DATA_X], int nResultData[DATA_Y][DATA_X])
{
printf("正在进行均值滤波......\n");
int count_x ,count_y ; /*3*3模版滤波计算,不计算边缘像素*/
for(count_y = ; count_y < DATA_Y ; count_y++)
{
for(count_x = ; count_x < DATA_X ;count_x++)
{
nResultData[count_y][count_x] = (int)((nOriginalData[count_y-][count_x-]+
nOriginalData[count_y-][count_x] +
nOriginalData[count_y-][count_x+]+
nOriginalData[count_y][count_x-] +
nOriginalData[count_y][count_x] +
nOriginalData[count_y][count_x+] +
nOriginalData[count_y+][count_x-]+
nOriginalData[count_y+][count_x] +
nOriginalData[count_y+][count_x+])/);
}
} /*对四个边缘直接进行赋值处理*/
for(count_x=;count_x<DATA_X;count_x++) //水平边缘像素等于原来像素灰度值
{
nResultData[][count_x]=nOriginalData[][count_x];
nResultData[DATA_Y-][count_x]=nOriginalData[DATA_Y-][count_x];
}
for(count_y=;count_y<DATA_Y-;count_y++) //竖直边缘像素等于原来像素灰度值
{
nResultData[count_y][]=nOriginalData[count_y][];
nResultData[count_y][DATA_X-]=nOriginalData[count_y][DATA_X-];
} return true ;
} int _tmain(int argc, _TCHAR* argv[])
{
int nOriginalData[DATA_Y][DATA_X]; //保存原始图像灰度值
int nResultData[DATA_Y][DATA_X]; //保存滤波后的灰度值 memset(nOriginalData,,sizeof(nOriginalData)); //初始化数组
memset(nResultData,,sizeof(nResultData)); char cOpenFilePath[] = "Lena.raw"; //图像文件路径 OpenFile(cOpenFilePath,nOriginalData); if(!JunZhiLvBo(nOriginalData,nResultData)) //滤波计算
{
printf("操作失败!\n");
return ;
} char cSaveFilePath[] = "Result.raw"; //文件保存路径 SaveFile(cSaveFilePath,nResultData); return ;
}
3 均值滤波算法效果对比
均值滤波之前: 均值滤波之后:
图像处理之均值滤波介绍及C算法实现的更多相关文章
- opencv3.2.0图像处理之均值滤波blur API函数
##.均值滤波:blur函数 ##函数原型 : ,-),int borderType=BORDER_DEFAULT) (参数详解同boxFilter函数) /**********新建Qt控制台程序** ...
- 图像处理之中值滤波介绍及C实现
1 中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波的基本原理是把数字图像或数字序 ...
- opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现
开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...
- 基于FPGA的均值滤波算法实现
我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于 ...
- 基础图像处理之混合空间增强——(Java:拉普拉斯锐化、Sobel边缘检测、均值滤波、伽马变换)
相信看过冈萨雷斯第三版数字图像处理的童鞋都知道,里面涉及到了很多的基础图像处理的算法,今天,就专门借用其中一个混合空间增强的案例,来将常见的几种图像处理算法集合起来,看能发生什么样的化学反应 首先,通 ...
- 基于MATLAB的均值滤波算法实现
在图像采集和生成中会不可避免的引入噪声,图像噪声是指存在于图像数据中的不必要的或多余的干扰信息,这对我们对图像信息的提取造成干扰,所以要进行去噪声处理,常见的去除噪声的方法有均值滤波.中值滤波.高斯滤 ...
- Win8Metro(C#)数字图像处理--2.9图像均值滤波
原文:Win8Metro(C#)数字图像处理--2.9图像均值滤波 [函数名称] 图像均值滤波函数MeanFilterProcess(WriteableBitmap src) [函数代码] ...
- 学习 opencv---(7) 线性邻域滤波专场:方框滤波,均值滤波,高斯滤波
本篇文章中,我们一起仔细探讨了OpenCV图像处理技术中比较热门的图像滤波操作.图像滤波系列文章浅墨准备花两次更新的时间来讲,此为上篇,为大家剖析了"方框滤波","均值滤 ...
- 滤波器——BoxBlur均值滤波及其快速实现
个人博客地址:滤波器--BoxBlur均值滤波及其快速实现 动机:卷积核.滤波器.卷积.相关 在数字图像处理的语境里,图像一般是二维或三维的矩阵,卷积核(kernel)和滤波器(filter)通常指代 ...
随机推荐
- TW实习日记:第十天
今天任务很简单,就是出品项目的时间轴显示页面和动态路由设置.其实时间轴页面很快就做完了,在做完处理完数据之后,然而有很多细节需要打磨,这就又考验了我面向搜索引擎编程的能力,根据需求百度了很多css的样 ...
- java获取IP地址
最近在一个多系统集成的项目中,由于跳转路径含IP地址,每次IP改了重启项目都得改好多地方,甚是麻烦.刚在网上了解到java获取IP地址,给大家分享下: 首先要导入jar包 request.getRem ...
- Linux系统网络安装——基于pxe+dhcp+nfs+tftp+kickstart
原文发表于:2010-09-05 转载至cu于:2012-07-21 一.原理简介 PXE(preboot execute environment)工作于Client/Server的网络模式,支持工作 ...
- Windows和Linux系统如何退出python命令行
python命令行是新手学习python过程中必须要学的一个工具,下面我们来看一下怎么退出python命令行. 第一种方式: 使用python提供的exit()函数,linux平台和windows平台 ...
- 【Python入门总结】
用了两周时间将python的基本语法和模块过了一遍,alex的视频也简单看了下;并且在项目中直接上了python解析语义的实现,初步感觉到了python语言的魅力.下一步,会按照廖雪峰的python学 ...
- .NET导出Excel之NPOI
前段时间研究过微软的Excel导出.table输出Excel,而它们也存在一些弊端: 1.对于微软的Excel导出存在一些弊端,如:需要安装Office软件.速度问题: 2.table输出Excel在 ...
- KETTLE:mongdb与mysql互传数据
注:部分内容引用了 http://blog.sina.com.cn/s/blog_4ac9f56e0101g881.html 1.mongodb传数据到mysql 1)在kettle中,mongodb ...
- 几个好用的php函数
几个好用的php函数 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. function enc ...
- 事后诸葛亮--Alpha版本总结
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结: 本小组和其他组的评分 分工和贡献分 全组讨论的照片 问题 第一组提问回答:爸爸饿了队 第二组提问回答:拖 ...
- 奇异值分解(SVD)原理详解及推导(转载)
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...