均值滤波
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。
均值滤波介绍
滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术。
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(如×模板:以目标象素为中心的周围个象素,构成一个滤波模板,即去掉目标象素本身),再用模板中的全体像素的平均值来代替原来像素值。
均值滤波效果:平滑线性滤波处理降低了图像的“尖锐”变化。由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降低噪声。均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域。然而,由于图像的边缘也是由图像灰度的尖锐变化带来的特性,所以均值滤波处理还是存在着边缘模糊的负面效应。
均值滤波算法实现(c语言)
// junzhilvbo.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h”
#include “stdlib.h”
#include “string.h”
#define data_x //数字图像水平像素个数
#define data_y //数字图像竖直像素个数
void openfile(const char *cfilepath , int noriginaldata[data_y][data_x])
{
printf(“正在获取数据。。。。。。”);
file *fp ;
fp = fopen(cfilepath , “r”);
if(null == fp)
{
printf(“open file failed! ”);
return ;
}
unsigned char *pdata = (unsigned char *)malloc(sizeof(unsigned char)*data_x*data_y);
if(null == pdata)
{
printf(“memory malloc failed!”);
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(“正在保存数据。。。。。。”);
int count_x,count_y;
file *fp ;
fp = fopen(cfilepath , “w”);
if(null == fp)
{
printf(“open file failed! ”);
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(“文件保存成功! ”);
return ;
}
bool junzhilvbo(const int noriginaldata[data_y][data_x], int nresultdata[data_y][data_x])
{
printf(“正在进行均值滤波。。。。。。”);
int count_x ,count_y ;
/**模版滤波计算,不计算边缘像素*/
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(“操作失败!”);
return ;
}
char csavefilepath[] = “result.raw”; //文件保存路径
savefile(csavefilepath,nresultdata);
return ;
}
均值滤波算法效果对比
均值滤波之前: 均值滤波之后:
红旗定制版华为P40披露,或将进行采用全新设计
折叠屏概念如此火热那么折叠屏手机值得购买吗
如何用Python自动获取排班人员
智慧农业系统中温室大棚智能控制的蔬菜喜获丰收
电子芯闻早报:苹果SIM卡激怒通信运营商
均值滤波和均值滤波算法程序
艾迈斯半导体公布面向模拟代工客户的2016年多项目晶圆制造服务计划
nfc手机读取银行卡
OLED屏幕的缺点是什么以及弹片微针模组的作用
再见MP3,你好AAC:MP3专利授权走到终点 相关项目已经终结
用笔记本也需有“本”事
人工智能会让画家提前下岗吗
苹果的ARKit会将iOS变成最大AR平台 大量招聘地图技术专家或为开发AR地图
西门子中国CEO:美国若禁止向中国出售芯片,欧洲在华制造业企业恐受波及
中国联通携手华为完成5G-Advanced 10Gbps峰值速率技术实验测试
AMR调度系统被业内人士称之为“海运”
盘点2021全球电子制造服务生产商(EMS) TOP100+ 超全
传华为手机近半芯片是自研
EtherCAT转Modbus网关的 EtherCAT从站配置案例
如何模拟用于波浪能发电的直线电机或发电机