LOG滤波器提取边缘..docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LOG滤波器提取边缘.

LOG滤波器提取边缘实验报告 朱俊 0220080198 一 实验内容 1 用LOG滤波器提取图像边缘 2 比较直接滤波和先缩小原图进行滤波再插补的乘法次数 二 实验原理 LOG滤波器原理 设I(x,y)代表灰度变化,灰度变化剧烈的地方就是阶跃点,而阶跃点的一次微商为极大值,二次微商为零。因此二次微商为零的地方就是图像的边缘所在。 LOG滤波器是高斯(GAUSS)滤波和拉普拉斯(LAPLACIAN)滤波的结合,即先用高斯滤波器进行平滑滤波,以过虑调噪声,再提取边缘,所以效果较好。 LOG滤波器的缺点与解决方法 由于LOG滤波器的模板宽度一般较大,所以LOG滤波缩要进行的计算量也相应较大。设图像尺寸为N×M,模板宽度为K×K,则对整幅图进行卷积的乘法次数为(N-K+1)*(M-K+)*K*K,当N和M》K时,所用的乘法次数约为N*M*K*K。可见乘法次数和模板宽度的平方成正比。 事实上,LOG滤波器可以分解成一只高斯滤波器和另一只模板宽度更小的LOG滤波器。另外,由于高斯滤波器是低通的而且可分解的的,所以。可以把原图尺寸缩小后再进行滤波,滤波结束后再进行插补,这样可以大大减少所要做的工作量。 三 程序设计 程序基于MFC的单文档界面,增加一个位图包裹类(设计模式的适配器模式)来封装对位图的操作,增加一个滤波类来进行通用的滤波操作。 程序结构如下: 类定义如下: 位图包裹类: class CWrapBitmap { public: long GetSize(); //接口:得到位图大小,成功返回阵列大小,失败返回false int GetHeight(); //接口:得到位图高度,成功返回高度,失败返回false int GetWidthBytes(); //接口:得到位图比特宽度,成功返回宽度,失败返回false int GetWidth(); //接口:得到位图实际宽度,成功返回宽度,失败返回false BYTE* GetpBuffer(); //接口:得到位图阵列指针,成功返回指针,失败返回NULL CBitmap* GetpBitmap(); //接口: 得到CBitmap类指针. 成功返回指针,失败返回NULL BOOL Save(LPCTSTR lpszPathName); //接口: 保存位图文件. 成功返回true,失败返回false BOOL Load(LPCTSTR lpszPathName); //接口: 打开位图文件. 成功返回true,失败返回false CWrapBitmap(); virtual ~CWrapBitmap(); private: BYTE* m_pBuffer; //位图阵列指针 CBitmap m_Bitmap; //位图类 HBITMAP m_hBitmap; //打开位图指针 protected: HANDLE DDBToDIB(CBitmap bitmap, DWORD dwCompression, CPalette *pPal); //DDB2DIB }; 滤波器类: const int TEMPLATE_LOG =1; //LOG滤波器 const int TEMPLATE_LAPLACIAN=2; //拉普拉斯滤波器(锐化) const int TEMPLATE_GAUSS =3; //Gauss滤波器(平滑) class CFilter { public: long GetCount(); //接口:得到滤波所用的乘法次数 BOOL Filter(const int nDefTemplate,BYTE *pBuffer, DWORD Size,DWORD Width, DWORD Height); //接口: 对二维数组(阵列)滤波. 成功返回true,失败返回false CFilter(); virtual ~CFilter(); private: long m_lCount; //记录滤波所用的乘法次数 float m_fCoef; //模板系数 BYTE m_TemplateWidth; //模板宽度 char* m_pTemplate; //模板指针 protected: BYTE CutOverflow(float fNum); //截取超出范围的数字 void Multiply(BYTE* pBuffer,DWORD Size,DWORD Width,DWORD Height); //模板和阵列的操作 void SetTemplate(const int nDefTemplate); //设置模板的参数 }; 四 实验结

文档评论(0)

xznh + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档