图像处理之均值滤波介绍及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)通常指代 ...
随机推荐
- Unity Lighting - Choosing a Color Space 选择色彩空间(四)
Choosing a Color Space 选择色彩空间 In addition to selecting a rendering path, it’s important to choose ...
- 【洛谷】题解 P1056 【排座椅】
题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数 ...
- Spring Boot 整合JDBC 实现后端项目开发
一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...
- less 语法特性翻译稿 - 特性快速预览部分
原文地址 http://lesscss.cn/features/ 概述 作为CSS的一种扩展语法,Less不仅仅向后兼容CSS,新的特性也是基于CSS现有语法.这使得学习Less变得容易,如果你有所怀 ...
- 梯度下降算法以及其Python实现
一.梯度下降算法理论知识 我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系? 为了实现监督学习,我们选择采用自变量x1.x2的线性函数来评估因变 ...
- hadoop HA sshfen切换隔离时无法跳转ssh: bash: fuser: 未找到命令
在zkfc的日志里面,有一个warn:PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8090 via ssh: bash: fuser: 未找到命令原因是 ...
- eFPGA与FPGA SoC,谁将引领下一代可编程硬件之潮流?|半导体行业观察
eFPGA:冉冉升起的新星 eFPGA即嵌入式FPGA(embedded FPGA),是近期兴起的新型电路IP. 随着摩尔定律越来越接近瓶颈,制造ASIC芯片的成本越来越高.因此,设计者会希望ASIC ...
- Scrum立会报告+燃尽图(十月二十四日总第十五次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- HUST学期助教总结
春节还没过完,在回广州的高铁上收到是否愿意担任一次软测助教的询问.想了一天,答应了.而内心其实是有点恐慌的,有几点原因: 大学从来没有学过软件测试这门课程.对于自己的软件测试只是体系并不是很有自信. ...
- Python学习之路8 - 内置方法
abs(-230) #取绝对值 all([0,1,-5]) #如果参数里面的所有值都为真就返回真,否则返回假 any([0,1,-5]) #如果参数里面有一个值为真则返回真,否则返回假 ascii([ ...