教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

中值滤波和均值滤波

来源:网络收集 时间:2026-07-07
导读: 中值滤波和均值滤波 实验四:(必须做,是平时成绩参考的标准) 作业:对lean.raw文件,采用中值滤波和均值滤波,完成图象去噪 中值滤波: /************************************************************************* * * 函数名称: * MedianFilter() *

中值滤波和均值滤波

实验四:(必须做,是平时成绩参考的标准)

作业:对lean.raw文件,采用中值滤波和均值滤波,完成图象去噪

中值滤波:

/************************************************************************* *

* 函数名称:

* MedianFilter()

*

* 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数)

* LONG lHeight - 源图像高度(象素数)

* int iFilterH - 滤波器的高度

* int iFilterW - 滤波器的宽度

* int iFilterMX - 滤波器的中心元素X坐标

* int iFilterMY - 滤波器的中心元素Y坐标

*

* 返回值:

* BOOL - 成功返回TRUE,否则返回FALSE。

*

* 说明:

* 该函数对DIB图像进行中值滤波。

*

************************************************************************/

BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight,

int iFilterH, int iFilterW,

int iFilterMX, int iFilterMY)

{

// 指向源图像的指针

unsigned char* lpSrc;

// 指向要复制区域的指针

unsigned char* lpDst;

// 指向复制图像的指针

LPSTR lpNewDIBBits;

HLOCAL hNewDIBBits;

中值滤波和均值滤波

// 指向滤波器数组的指针

unsigned char * aValue;

HLOCAL hArray;

// 循环变量

LONG i;

LONG j;

LONG k;

LONG l;

// 图像每行的字节数

LONG lLineBytes;

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

// 暂时分配内存,以保存新图像

hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);

// 判断是否内存分配失败

if (hNewDIBBits == NULL)

{

// 分配内存失败

return FALSE;

}

// 锁定内存

lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化图像为原始图像

memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);

// 暂时分配内存,以保存滤波器数组

hArray = LocalAlloc(LHND, iFilterH * iFilterW);

// 判断是否内存分配失败

if (hArray == NULL)

{

// 释放内存

LocalUnlock(hNewDIBBits);

LocalFree(hNewDIBBits);

// 分配内存失败

中值滤波和均值滤波

return FALSE;

}

// 锁定内存

aValue = (unsigned char * )LocalLock(hArray);

// 开始中值滤波

// 行(除去边缘几行)

for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++) {

// 列(除去边缘几列)

for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++) {

// 指向新DIB第i行,第j个象素的指针

lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight -

1 - i) + j;

// 读取滤波器数组

for (k = 0; k < iFilterH; k++)

{

for (l = 0; l < iFilterW; l++)

{

// 指向DIB第i - iFilterMY + k行,第j -

iFilterMX + l个象素的指针

lpSrc = (unsigned char*)lpDIBBits + lLineBytes

* (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;

// 保存象素值

aValue[k * iFilterW + l] = *lpSrc;

}

}

// 获取中值

* lpDst = GetMedianNum(aValue, iFilterH * iFilterW);

}

}

// 复制变换后的图像

memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);

// 释放内存

中值滤波和均值滤波

LocalUnlock(hNewDIBBits);

LocalFree(hNewDIBBits);

LocalUnlock(hArray);

LocalFree(hArray);

// 返回

return TRUE;

}

均值滤波:

/************************************************************************* *

* 函数名称:

* GetMedianNum()

*

* 参数:

* unsigned char * bpArray - 指向要获取中值的数组指针

* int iFilterLen - 数组长度

*

* 返回值:

* unsigned char - 返回指定数组的中值。

*

* 说明:

* 该函数用冒泡法对一维数组进行排序,并返回数组元素的中值。

*

************************************************************************/

unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterLen)

{

// 循环变量

int i;

int j;

// 中间变量

unsigned char bTemp;

// 用冒泡法对数组进行排序

for (j = 0; j < iFilterLen - 1; j ++)

{

for (i = 0; i < iFilterLen - j - 1; i ++)

{

if (bArray[i] > bArray[i + 1])

{

中值滤波和均值滤波

// 互换

}

// 计算中值

if ((iFilterLen & 1) > 0)

{

// 数组有奇数个元素,返回中间一个元素

bTemp = bArray[(iFilterLen + 1) / 2];

}

else

{

// 数组有偶数个元素,返回中间两个元素平均值

bTemp = (bArray[iFilterLen / 2] + bArray[iFilterLen / 2 + 1]) / 2; }

// 返回中值

return bTemp;

}

//===================

2 //作者:aaaSoft

3 //日期:2009年12月11日

4 //论坛:/bbs

5 //说明:原创文章,转载请注明出处并保留作者信息

6 //===================

7

8 /// <summary>

9 /// 中值滤波算法处理…… 此处隐藏:2617字,全部文档内容请下载后查看。喜欢就下载吧 ……

中值滤波和均值滤波.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115167.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)