数字图像处理均值滤波.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字图像处理均值滤波

实验项目:灰度图像均值滤波 一、实验内容 目的:掌握搭建一个Visual C++应用工程的基本流程,能创建一个基于MFC的Visual C++数字图像处理平台,实现位图文件的读写、显示、存储操作。对灰度图像均值滤波熟悉均值滤波原理,编程实现灰度图像均值滤波功能,探讨其去噪特性及其适用性。 处理算子原理: 二值化:选定一个阈值,大于部分变成白色,小于部分变成黑色。 局部平滑(n*n模版):均等的对待邻域中的每一个像素,将各个像素灰度的平均值作为中心像素值输出。实现图像的平滑。 超限像素平滑:利用局部平滑的模版得到一个平均灰度值与原像素做差取绝对值,在与设定的阈值做比较。大与阈值取平均值,反之取原像素。 有选择保边缘平滑:对一像素的5*5邻域,采用特定的掩模(一个3*3正方形、4个五边形、4个六边形共9个领域)计算各个掩模的均值和方差,按方差进行排序,最小方差对应的掩模灰度均值作为输出值。 通过给定的原始文件编写C++程序,利用平台进行原理和代码的转换,最终实现灰度图像的平滑处理。 二、算法实现的主要内容 二值化: void CMy0107View::OnBinary() { CYuzhi dlg; dlg.DoModal(); UpdateData(TRUE); if(m_flag == 24) { AfxMessageBox(只处理8位图像!); return; } BYTE *pData = new BYTE[m_dwWidth*m_dwHeight]; BYTE *pOld = pData; memcpy(pData, m_pBitmap, m_dwWidth*m_dwHeight); DWORD i,j; for(i=0;im_dwHeight;i++) { for(j=0;jm_dwWidth;j++) { if(*pData = dlg.m_yuzhi) *pData = 255; else *pData = 0; pData++; } } pData = pOld; memcpy(m_pBitmap, pData, m_dwWidth*m_dwHeight); if(pData) delete []pData; Invalidate(TRUE); } 3*3均值滤波: void CMy0107View::On33junzhi() { float averg; BYTE *p_data; int wide,height; p_data=m_pBitmap; wide=m_dwWidth; height=m_dwHeight; BYTE* p_temp=new BYTE[wide*height]; int size=wide*height; memset(p_temp,255,size); for(int j=1;jheight-1;j++) { for(int i=1;iwide-1;i++) { averg=0; averg=(int)(p_data[(j-1)*wide+(i-1)]+p_data[(j-1)*wide+i] +p_data[(j-1)*wide+(i+1)]+p_data[j*wide+(i-1)] +p_data[j*wide+i+1]+p_data[(j+1)*wide+(i-1)] +p_data[(j+1)*wide+i]+p_data[(j+1)*wide+i+1])/8; p_temp[j*wide+i]=averg; } } memcpy(p_data,p_temp,wide*height); delete p_temp; Invalidate(TRUE); } N*N均值滤波: void CMy0107View::OnNnjunzhi() { DWORD size; NNJUNZHI dlg; dlg.DoModal(); UpdateData(TRUE); n=dlg.m_n; int xx,yy,n2,sum,sum2,sum3; int wide,height; BYTE *p_data; p_data=m_pBitmap; wide=m_dwWidth; height=m_dwHeight; size=wide*height; BYTE* p_temp=new BYTE [size]; memset(p_temp,255,size); if(n3||n%2!=1)//确认n为奇数 AfxMessageBox(请输入一个大于等

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档