首页 > 编程知识 正文

均值滤波和中值滤波计算,均值滤波和中值滤波例题

时间:2023-05-05 10:51:38 阅读:156857 作者:2820

说明

平均滤波

均值滤波是典型的线性滤波算法,在图像上对对象像素提供模板,包括其周围的相邻像素(以对象像素为中心的周围像素)构成滤波器模板,去除对象像素本身,将原始像素值除以模板中所有像素的

平均滤波也称为线性滤波,主要方法是邻域平均法。 线性滤波的基本原理是用平均值代替原图像中的各像素值。 即,对处理对象的当前像素点(x,y )选择由其附近的多个像素构成的模板,求出模板中所有像素的平均值,对当前像素点(x,y )赋予该平均值,处理后图像在该点中的灰度g )

平均滤波介绍

滤波是对信号中特定频带的频率进行滤波的操作,是从包括干扰信号的接收信号中提取有用的信号的技术。

均值滤波是典型的线性滤波算法,在图像上对对象像素提供模板,由以其周围的邻近像素(例如,(像素)模板)为中心的周边像素构成去除对象像素本身的滤波器模板

平均滤镜效果:通过平滑线性滤镜来减少图像的“锐化”变化。 典型的随机噪声为灰度级的快速变化,因此一般平滑处理的应用是降低噪声。 均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板的尺寸相比较小的像素区域。 然而,由于图像的边缘也是图像灰度尖锐变化带来的特性,平均滤波具有边缘模糊的负面效果。

平均过滤算法的实现(c语言) )

//junzhilvbo.cpp :定义控制台APP应用程序的入口点。

//

#include “stdafx.h”

#include “stdlib.h”

#include “string.h”

#define DATA_X //数字图像水平像素数

#define DATA_Y //数字图像垂直像素数

void openfile (const char * cfile path,intnoriginaldata [ data _ y ] [ data _ x ] ) ) ) )。

{

printf (“正在获取数据。 n ";

FILE *fp

FP=fopen(cfilepath,“r”);

if (空值==FP ) )。

{

printf(「openfilefailed! n ";

返回;

}

unsigned char * pdata=(unsigned char * ) malloc ) sizeof(unsignedchar ) ) *DATA_X*DATA_Y;

if(null==pdata ) )。

{

printf(「memorymallocfailed! n ";

返回;

}

fread(pdata,sizeof(unsignedchar ) *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;

flose(FP );

返回;

}

void save file (const char * cfile path,int nResultData[DATA_Y][DATA_X] ) )

{

printf (“正在保存数据。 n ";

int count_x,count_y;

FILE *fp

FP=fopen(cfilepath,“w”);

if (空值==FP ) )。

{

printf(「openfilefailed! n ";

返回;

}

for(count_y=; count_y《DATA_Y; count_y )

{

for(count_x=; count_x《DATA_X; count_x )

{

write (n result data [ count _ y ] [ count _ x ]、、fp );

}

}

flose(FP );

printf (“文件保存成功! n ";

返回;

}

bool JunZhiLvBo(const int nOriginalData[DATA_Y][DATA_X], int nResultData[DATA_Y][DATA_X])

{

printf(“正在进行均值滤波。。。。。。n”);

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(“操作失败!n”);

return ;

}

char cSaveFilePath[] = “Result.raw”; //文件保存路径

SaveFile(cSaveFilePath,nResultData);

return ;

}

均值滤波算法效果对比

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

打开APP阅读更多精彩内容

点击阅读全文

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。