- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
均值滤波算法中值和均值滤波算法
均值滤波算法 中值和均值滤波算法
作业:对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 // 列(除去边缘几列)
for(j = iFilterMX; j // 指向新DIB第i行,第j个象素的指针
lpDst = (unsigne
文档评论(0)