图像降噪技术研究背景及意义毕业论文.doc_第1页
图像降噪技术研究背景及意义毕业论文.doc_第2页
图像降噪技术研究背景及意义毕业论文.doc_第3页
图像降噪技术研究背景及意义毕业论文.doc_第4页
图像降噪技术研究背景及意义毕业论文.doc_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳理工大学学士学位论文 I 图像降噪技术研究背景及意义毕业论文图像降噪技术研究背景及意义毕业论文 目 录 1 绪论 1 1 1 VC 6 0 简介 1 1 2 数字图像处理基本概念 1 1 3 图像降噪技术研究背景及意义 2 1 4 图像降噪的国内外研究现状 2 1 5 关于图像噪声 2 2 位图操作基本知识 4 2 1 CDIB 类的介绍 4 2 2 位图操作 4 2 2 1 图像读取 4 2 2 2 图像显示 5 2 3 程序源代码 6 2 3 1 图像读取 6 2 3 2 图像保存 8 3 噪声的添加 13 3 1 基本原理 13 3 2 实现步骤 13 3 3 程序源代码 13 3 3 1 添加响应函数 13 3 3 2 添加成员函数 13 3 4 输出结果 16 4 均值滤波 18 4 1 基本原理 18 沈阳理工大学学士学位论文 II 4 2实现方法 18 4 3程序源代码 20 4 3 1 添加响应函数 20 4 3 2 添加成员函数 20 4 4 结果输出及分析 23 4 4 1 结果输出 23 4 4 2 结果分析 25 5 中值滤波 26 5 1 基本原理 26 5 2 实现方法 26 5 3 程序源代码 26 5 3 1 添加响应函数 26 5 3 2 添加成员函数 27 5 4 结果输出及分析 32 5 4 1 结果输出 32 5 4 2 结果分析 33 6 傅立叶降噪 34 6 1 基本概念 34 6 1 1 二维傅里叶变换 34 6 1 2 二维离散傅里叶变换 34 6 1 3 快速傅里叶变换 35 6 2 相关原理 35 6 3 程序源代码 35 6 3 1 快速傅里叶变换 36 6 3 2 快速傅里叶逆变换 38 6 3 3 低通滤波 40 6 4 结果输出及分析 43 6 4 1 结果输出 43 6 4 2 结果分析 46 沈阳理工大学学士学位论文 III 7 小波降噪 47 7 1 基本概念基本概念 47 7 1 1 二维离散小波变换 47 7 2 2 Mallat 算法 48 7 2 相关原理 49 7 3 程序源代码 50 7 3 1 LPass Filter 函数 52 7 3 2 HPass Filter 函数 53 7 3 3 DWT Inverse 函数 55 7 4 结果输出及分析 56 7 4 1 结果输出 56 7 4 2 结果分析 59 结 论 60 致 谢 61 参考文献 62 附录 A 英文原文 63 附录 B 中文翻译 74 沈阳理工大学学士学位论文 1 1 绪论 1 1 VC 6 0 简介 VC 6 0 是 Microsoft 公司推出的一个基于 Windows 系统平台 可视化的集成开 发环境 它的源程序按 C 语言的要求编写 并加入了微软提供的功能强大的 MFC Microsoft Foundation Class 类库 MFC 中封装了大部分 Windows API 函数和 Windows 控件 它包含的功能涉及到整个 Windows 操作系统 MFC 不仅给用户提供了 Windows 图形环境下应用程序的框架 而且还提供了创建应用程序的组件 这样 开 发人员不必从头设计创建和管理一个标准 Windows 应用程序所需的程序 而是从一个 比较高的起点编程 故节省了大量的时间 另外 它提供了大量的代码 指导用户编 程时实现某些技术和功能 因此 使用 VC 提供的高度可视化的应用程序开发工具和 MFC 类库 可使应用程序开发变得简单 1 2 数字图像处理基本概念 数字图像处理 DigitalImageProcessing 是通过计算机对图像进行去除噪声 增强 复原 分割 提取特征等处理的方法和技术 数字图像处理的产生和迅速发展主要受 三个因素的影响 一是计算机的发展 二是数学的发展 特别是离散数学理论的创立 和完善 三是广泛的农牧业 林业 环境 军事 工业和医学等方面的应用需求的增 长 20 世纪 20 年代 图像处理首次应用于改善伦敦和纽约之间海底电缆发送的图片质 量 到 20 世纪 50 年代 数字计算机发展到一定的水平后 数字图像处理才真正引起 人们的兴趣 1964 年美国喷气推进实验室用计算机对 徘徊者七号 太空船发回的大 批月球照片进行处理 收到明显的效果 20 世纪 60 年代末 数字图像处理具备了比较 完整的体系 形成了一门新兴的学科 20 世纪 70 年代 数字图像处理技术得到迅猛的 发展 理论和方法进一步完善 应用范围更加广泛 在这一时期 图像处理主要和模式 识别及图像理解系统的研究相联系 如文字识别 医学图像处理 遥感图像的处理等 20 世纪 70 年代后期到现在 各个应用领域对数字图像处理提出越来越高的要求 促进 了这门学科向更高级的方向发展 特别是在景物理解和计算机视觉 即机器视觉 方 面 图像处理已由二维处理发展到三维理解或解释 近年来 随着计算机和其它各有 关领域的迅速发展 例如在图像表现 科学计算可视化 多媒体计算技术等方面的发 沈阳理工大学学士学位论文 2 展 数字图像处理已从一个专门的研究领域变成了科学研究和人机界面中的一种普遍 应用的工具 1 3 图像降噪技术研究背景及意义 随着计算机科学和图像处理技术的迅速发展 图像在医学成像 模式识别等方面取 得了广泛应用 但是 图像在形成 传输过程中 不可避免会受到噪声的干扰 而且 有些图像的噪声非常严重 图像中的噪声往往和信号交织在一起 会使图像本身的细 节如边界轮廓 线条等变的模糊不清 引起噪声的原因很多 噪声的种类也很多 因 此 需要对图像进行降噪处理 便于更高层次的图像分析与理解 如何既对图像中出 现的噪声进行合理的抑制 衰减以及去除不需要的信息 又能使有用的信息得到加强 从而便于目标区分或对象解释 是图像去噪主要研究的主要任务 1 4 图像降噪的国内外研究现状 图像降噪是图像处理的一个重要环节 目前图像噪声的取出在数字图像处理技术中 的重要性愈加明显 近年来 在小波基础上发展起来的图像去噪仍是一个值得关注的 问题 在理论和实践上都具有重大的研究意义 其中 基于中值滤波和小波变换的图像 去噪小波变换是近年来兴起的信号处理技术 它具有良好的局部化分析特性和多分辨 率分析特性 非常适合于图像处理 1 5 关于图像噪声 噪声是不可预测的随机信号 通常采用概率统计方法对其进行分析 噪声对图像处 理十分重要 它影响图像处理的 采集 处理的各个环节以及输出结果的全过程 特 别是图像的输入 采集噪声的抑制是十分关键的问题 若输入伴有较大的噪声 必然 影响处理全过程及输出的结果 噪声可以理解为 妨碍人们感觉器官 对所接收的信源 信息理解的因素 噪声在理论上可以定义为 不可预测 只能用概率统计方法来认识 的随机误差 因此将图像噪声看成是多维随机过程是合适的 因而描述噪声的方法完 全可以借用随机过程的描述 即用其概率分布函数和概率密度分布函数 但在很多情 况下 这样的描述方法是很复杂的 甚至是不可能的 而实际应用往往也不必要 通 常是用其数字特征 即均值方差 相关函数等 因为这些数字特征都可以从某些方面 反映出噪声的特征 除此之外 噪声的灰度值与其周围的灰度之间有着明显的灰度差 也正式这些明显的灰度差才造成了视觉障碍 因此一个良好的图像处理系统 不论是 沈阳理工大学学士学位论文 3 模拟处理还是用计算机进行的数字处理 无不把减少最前一级的噪声作为主攻目标 特此根据噪声性质的不同 消除噪声的方法也不同 本文将介绍 均值滤波 中值滤 波 傅里叶降噪 小波变换 四种降噪方法 根据噪声产生的来源 大致可以分为外部噪声和内部噪声两大类 外部噪声是指从处理系统外来的影响 如天线干扰或电磁波从电源线窜入系统的噪 声 内部噪声则有一下几种最常见形式 1 由光和电的基本性质引起的噪声 例如电流可看作电子或空穴运动 这些例 子运动产生随机散粒噪声 导体中电子流动的热噪声 光量子运动的光量子噪声等 2 由机械运动引起的噪声 例如 接头振动使电流不稳 磁头或磁带 磁盘抖 动等 3 元器件期检噪声 如光学底片的颗粒噪声 磁带 磁盘缺陷噪声 光盘的疵 点噪声等 4 系统内部电流的噪声 从噪声的分类方法来看是多种多样的 但综合来说 噪声是随机产生的量 所以又 可以从统计数学的观点来定义噪声 凡是统计特性不随时间变化的噪声称为平稳的噪 声 而统计特性随时间变化的噪声称作非平稳噪声 以上所讨论的各种类型的噪声反映在图像画面上 大致可以分为两种经典的图像噪 声 若噪声的幅值基本相同 但是噪声出现的位置是随意的 称这类噪声为椒盐噪声 若从噪声幅值大小的分布统计来看 其密度函数有高斯型 瑞利型 分别称为高斯噪 声和瑞利噪声 又如频谱均匀分布的噪声称为白噪声等等 本文着重讨论椒盐噪声 沈阳理工大学学士学位论文 4 2 位图操作基本知识 2 1 CDIB 类的介绍 大多数图像处理都是基于与设备无关位图 DIB 来进行讨论的 而 MFC 中没有 处理 DIB 位图的类 这就给编程带来了很大困难 所以需要建立一个处理 DIB 位图的 专用类 CDIB 类 在其中封装必要而有效的处理函数 该类具有的功能如下 Void LoadFile Cstring m fileName 装载 BMP 位图文件 Char GetFileName 返回位图文件名 DWORD GetSize 返回位图文件的大小 UINT GetWidth 返回位图的宽度 UINT GetHeight 返回位图的高度 UINT GetNumberOfColors 返回位图颜色数目 RGBQUAD GetRGB 返回颜色表首地址 BITMAPINFO GetInfo 返回图像信息结构首地址 BYTE GetData 返回图像数据首地址 根据对 DIB 操作的分析 以及参照 Cbitmap 的功能设计 CDIB 类的基本操作功能 应包括 1 DIB 文件的读写操作 2 提供位图宽度 高度 颜色数目等位图相关信息 3 提供有关位图占据内存空间的信息 包括 图像数据区首地址 颜色表首地址 位图信息结构首地址等信息 2 2 位图操作 2 2 1 图像读取 沈阳理工大学学士学位论文 5 N Y 图 2 1 图像读取流程图 2 2 2 图像显示 得到文件的完整路径名 打开位图文件 读取 BITMAPFILEHEADER 结构 文件是 BMP 格式吗 计算得到 bmp 文件除文件头以外的大小 把 bmp 文件除文件头以外的部分读入内存返回 DIB 句 柄 结束 开始 沈阳理工大学学士学位论文 6 N Y N 图 2 2 图像显示流程图 2 3 程序源代码 2 3 1 图像读取 通过 ReadDIBFile 函数实现对函数的读取 参数 CFile 开始 设定显示参数 显示位图 恢复原调色板 结束 从 DOC 对象中得到位图数据起始位置指针 并得到图像的宽 高等信息 把新创建的调色板作为设备环境的调色板 并保留原调色板 使用文件中颜色表数据创建调色板 位图是 8 位 沈阳理工大学学士学位论文 7 HDIB hDIB LPBYTE lpDIB 获取 DIB 文件 长度 字节 DWORD dwBitsSize file GetLength 尝试读取 DIB 文件头 if file Read LPBYTE 判断是否是 DIB 对象 检查头两个字节是否是 BM if bmfHeader bfType DIB HEADER MARKER 非 DIB 对象 返回 NULL return NULL 为 DIB 分配内存 hDIB HDIB GlobalAlloc GMEM MOVEABLE GMEM ZEROINIT dwBitsSize if hDIB 0 内存分配失败 返回 NULL return NULL 锁定 lpDIB LPBYTE GlobalLock HGLOBAL hDIB 沈阳理工大学学士学位论文 8 读象素 if file ReadHuge lpDIB dwBitsSize sizeof BITMAPFILEHEADER dwBitsSize sizeof BITMAPFILEHEADER 大小不对 解除锁定 GlobalUnlock HGLOBAL hDIB 释放内存 GlobalFree HGLOBAL hDIB 返回 NULL return NULL 解除锁定 GlobalUnlock HGLOBAL hDIB 返回 DIB 句柄 return hDIB 2 3 2 图像保存 通过 ReadDIBFile 函数实现将 DIB 保存到指定文件中 参数 HDIB hDib CFile 指向 BITMAPINFOHEADER 的指针 LPBITMAPINFOHEADER lpBI if hDib NULL 如果 DIB 为空 返回 FALSE return FALSE 读取 BITMAPINFO 结构 并锁定 lpBI LPBITMAPINFOHEADER GlobalLock HGLOBAL hDib if lpBI NULL 为空 返回 FALSE return FALSE 判断是否是 WIN3 0 DIB if IS WIN30 DIB lpBI 不支持其它类型的 DIB 保存 解除锁定 GlobalUnlock HGLOBAL hDib 返回 FALSE return FALSE 沈阳理工大学学士学位论文 10 填充文件头 文件类型 BM bmfHdr bfType DIB HEADER MARKER 计算 DIB 大小时 最简单的方法是调用 GlobalSize 函数 但是全局内存大小并 不是 DIB 真正的大小 它总是多几个字节 这样就需要计算一下 DIB 的真实大 小 文件头大小 颜色表大小 BITMAPINFOHEADER 和 BITMAPCOREHEADER 结构的第一个 DWORD 都 是该结构的大小 DWORD dwDIBSize LPDWORD lpBI PaletteSize LPBYTE lpBI 计算图像大小 if lpBI biCompression BI RLE8 lpBI biCompression BI RLE4 对于 RLE 位图 没法计算大小 只能信任 biSizeImage 内的值 dwDIBSize lpBI biSizeImage else 大小为 Width Height DWORD dwBmBitsSize WIDTHBYTES lpBI biWidth DWORD lpBI biBitCount lpBI biHeight 计算出 DIB 真正的大小 dwDIBSize dwBmBitsSize 沈阳理工大学学士学位论文 11 更新 biSizeImage 很多 BMP 文件头中 biSizeImage 的值是错误的 lpBI biSizeImage dwBmBitsSize 计算文件大小 DIB 大小 BITMAPFILEHEADER 结构大小 bmfHdr bfSize dwDIBSize sizeof BITMAPFILEHEADER 两个保留字 bmfHdr bfReserved1 0 bmfHdr bfReserved2 0 计算偏移量 bfOffBits 它的大小为 Bitmap 文件头大小 DIB 头大小 颜色表大 小 bmfHdr bfOffBits DWORD sizeof BITMAPFILEHEADER lpBI biSize PaletteSize LPBYTE lpBI 尝试写文件 TRY 写文件头 file Write LPBYTE 写 DIB 头和象素 file WriteHuge lpBI dwDIBSize CATCH CFileException e 解除锁定 沈阳理工大学学士学位论文 12 GlobalUnlock HGLOBAL hDib 抛出异常 THROW LAST END CATCH 解除锁定 GlobalUnlock HGLOBAL hDib 返回 TRUE return TRUE 沈阳理工大学学士学位论文 13 3 噪声的添加 3 1 基本原理 定义 Saltnoising HDIB hDIB 类 用以封装实现添加噪声的相关函数 设置指向源 图像的指针 设置表示行 列的循环变量 i j 在加噪过程中 存储标准图像象素信 息后 生成一个为随机种子 可以为任意数或系统时间 当 dTemp 31500 时 指向源 图像倒数第 j 行 第 i 个象素的指针 将图像中当前点置为黑 即完成一次噪声的添加 3 2 实现步骤 1 取得图像大小 数据区 并把数据区复制到缓冲区 2 循环取得各点像素值 3 若产生的随机数大于特定值 把该点置黑 4 把缓冲区中改动的数据复制到原数据区中 3 3 程序源代码 3 3 1 添加响应函数 CDIBview 中添加 加入椒盐噪声 的响应函数 oid CDIPSView OnAddnoisingSalt TODO Add your command handler code here CDIPSDoc pDoc GetDocument CAddNoising addSALT addSALT Saltnoising pDoc GetHDIB Invalidate pDoc SetModifiedFlag TRUE 沈阳理工大学学士学位论文 14 3 3 2 添加成员函数 建立 CaddNoising 类 其成员函数执行具体操作 void CAddNoising Saltnoising HDIB hDIB 指向源图像的指针 LPSTR lpSrc 循环变量 long i long j 图像每行的字节数 LONG lLineBytes 计算图像每行的字节数 LPBYTE lpDIB LPBYTE GlobalLock HGLOBAL hDIB LPBYTE lpDIBBits CDIB m add LONG lWidth m add DIBWidth lpDIB LONG lHeight m add DIBHeight lpDIB lpDIBBits m add FindDIBBits lpDIB lLineBytes WIDTHBYTES lWidth 8 for i 0 i lLineBytes i 存储标准图像象素信息 for j 0 j lHeight j BMP stdData i lLineBytes j BYTE lpDIBBits lLineBytes i j if m add DIBBitCount lpDIB 8 沈阳理工大学学士学位论文 15 prompt MessageBox This program can only process 8bits image Prompt MB ICONINFORMATION MB OK unlock GlobalUnlock HGLOBAL hDIB 生成伪随机种子 srand unsigned 2 int tem 0 在图像中加噪 for j 0 j lHeight j for i 0 i 31500 指向源图像倒数第 j 行 第 i 个象素的指针 lpSrc char lpDIBBits lLineBytes j i 图像中当前点置为黑 lpSrc 0 tem 沈阳理工大学学士学位论文 16 char ctem 20 sprintf ctem 噪声象素点个数为 d tem MessageBox ctem 3 4 输出结果 图 3 1 原图像 沈阳理工大学学士学位论文 17 图 3 2 加入椒盐噪声后的图像 沈阳理工大学学士学位论文 18 4 均值滤波 4 1 基本原理 所谓均值滤波实际上就是用均值替代原图像中的各个像素值 均值滤波的方法如下 设被噪声污染后的信号为 原始信号为 噪声为 g t f t 则 g tf tn t 均值滤波公式如下 n t 1 1 1 g tg tng tmg tg tg tm n 4 1 经过均值滤波后的图像 可以看到噪声明显的被抑制了 下面推导均值滤波对抑制的原理 因为 g tf tn t 4 2 等式两边取数学期望 即统计中 得 g tf tn t 4 3 如果噪声椒盐噪声 则有 0n t 4 4 所以 g tf tn t 4 5 按照如上的定义可知 因为出现的为椒盐噪声 其幅值基本相同 但是数据中 还存在一些点没有噪声 这样 可以将未输出的噪声的点等同的认为噪声幅值为 0 这 样就有 n tn t 4 6 所以 经过均值滤波之后 中所包含的噪声强度值低于 g t g t 椒盐噪声的抑制 只是将某点出现的噪声强度 让周围的数据平均分担了 4 2 实现方法 根据上述对以为均值滤波的原理介绍 将其宽展到二维信号的处理 就可以事先对 图像噪声的抑制 均值滤波方法是 对待处理的当前像素 选择一个模板 该模板为其近邻的若干像 沈阳理工大学学士学位论文 19 素组成 用模板中像素的均值来替代原像素的方法 如图 图 4 1 均值滤波原理示意图 序号为 0 的是当前像素 序号为 1 8 的像素是其模板中的邻家像素 求模板中所 有像素的均值 再把该均值赋予当前像素点 作为处理后图像在该点上的灰度 x y 即 g x y 1 fs g xf x y M 4 7 其中 s 为模板 M 为该模板中包含当前像素在内的像素总个数 考虑到数据分布的平衡性 本文中模板选择为 3 3 待处理像素放在模板的中心 为了使输出像素值保持在原理的灰度值范围内 模板的权值总和应该维持为 1 模板与 模板像素的乘积要除以一个系数 通常是模板系数之和 这个过程也被称为模板的归 一化 模板的描述还可以采用矩阵的形式 入 3 3 的均值滤波可以描述如下 1 1 1 1 1 1 1 9 1 1 1 H 4 8 该模板的响应计算为 1 1 1 1 1 1 1 9 1 1 1 1 1 1 g x yf xyf xyf xyf x yf x y f x yf xyf xyf xy 4 9 以式 4 8 对椒盐噪声图片进行均值滤波后 所得到的结果可知 均值滤波器对椒 123 804 765 沈阳理工大学学士学位论文 20 盐噪声的滤波效果不是很理想 因为椒盐噪声的幅值都是基本相同的 只是出现噪声 点的位置是随机的 所以在统计意义下的噪声均值也不为 0 因此 即使是理想情况也 无法完全去除 但是从模板的含义来理解 经过均值处理之后 噪声部分被弱化到周 围像素点上 所以得到的结果是噪声幅值减小 但是噪声点的颗粒面积同时变大 另外 均值滤波有一个非常致命的缺点 就是在求均值的计算中 会同时将景物 的边缘也同时进行均值处理 这样就使得景物的清晰度降低 画面变的模糊 4 3 程序源代码 4 3 1 添加响应函数 在 CDIPSView 类中 得到均指滤波响应函数 OnDenoisingAveraging void CDIPSView OnDenoisingAveraging TODO Add your command handler code here CDIPSDoc pDoc GetDocument call class CDeNoising CDeNoising clsDeNoising clsDeNoising AveragingFilter pDoc GetHDIB refresh the view Invalidate set flag in order to indicate modification pDoc SetModifiedFlag TRUE 4 3 2 添加成员函数 沈阳理工大学学士学位论文 21 建立类 CdeNoising 其成员函数 AveragingFilter HDIB hDIB 执行具体算法 void CDeNoising AveragingFilter HDIB hDIB variables definition LONG i j int intensity1 intensity2 intensity3 intensity4 intensity5 intensity6 intensity7 intensity8 intensity a pointer to BitMapFileHeader LPBYTE lpDIB a point to start of BitMapData LPBYTE lpDIBBits Lock and get pointer Of DIB lpDIB LPBYTE GlobalLock HGLOBAL hDIB Get pointer of BitMapData lpDIBBits m clsDIB FindDIBBits lpDIB If DIBBitCount equal 24 then give a prompt and exit this program if m clsDIB DIBBitCount lpDIB 8 prompt MessageBox This program can only process 8bits image Prompt MB ICONINFORMATION MB OK unlock GlobalUnlock HGLOBAL hDIB 沈阳理工大学学士学位论文 22 exit return let cursor in wait status BeginWaitCursor get width of the image LONG lWidth m clsDIB DIBWidth lpDIB get height of the image LONG lHeight m clsDIB DIBHeight lpDIB get bytes of each line LONG lLineBytes WIDTHBYTES lWidth 8 accesss every pixel for i 1 i lHeight 1 i for j 1 j GetHDIB refresh the view Invalidate set flag in order to indicate modification pDoc SetModifiedFlag TRUE 5 3 2 添加成员函数 在类 CdeNoising 中 其成员函数 MidFilter HDIB hDIB 执行具体算法 void CDeNoising MidFilter HDIB hDIB 1 5 中值滤波 variables definition LONG i j m n int intensity 6 LPBYTE lpDIB LPBYTE lpDIBBits 沈阳理工大学学士学位论文 28 Lock and get pointer Of DIB lpDIB LPBYTE GlobalLock HGLOBAL hDIB lpDIBBits m clsDIB FindDIBBits lpDIB If DIBBitCount equal 24 then give a prompt and exit this program if m clsDIB DIBBitCount lpDIB 8 prompt MessageBox This program can only process 8bits image Prompt MB ICONINFORMATION MB OK unlock GlobalUnlock HGLOBAL hDIB exit return let cursor in wait status BeginWaitCursor LONG lWidth m clsDIB DIBWidth lpDIB LONG lHeight m clsDIB DIBHeight lpDIB get bytes of each line LONG lLineBytes WIDTHBYTES lWidth 8 accesss every pixel for i 0 i lHeight i for j 2 j lLineBytes 2 j intensity 0 BYTE lpDIBBits lLineBytes i j 2 沈阳理工大学学士学位论文 29 intensity 1 BYTE lpDIBBits lLineBytes i j 1 intensity 2 BYTE lpDIBBits lLineBytes i j intensity 3 BYTE lpDIBBits lLineBytes i j 1 intensity 4 BYTE lpDIBBits lLineBytes i j 2 for m 0 m 3 m for n m 1 nintensity n intensity 5 intensity m intensity m intensity n intensity n intensity 5 write new value BYTE lpDIBBits lLineBytes i j BYTE intensity 2 unlock GlobalUnlock HGLOBAL hDIB 计算均方根误差 Acc Targets lHeight lWidth lpDIBBits let cursor in normal status EndWaitCursor 沈阳理工大学学士学位论文 30 void CDeNoising Smoothing HDIB hDIB variables definition LONG i j m int intensity 10 avIntensity a pointer to BitMapFileHeader LPBYTE lpDIB a point to start of BitMapData LPBYTE lpDIBBits Lock and get pointer Of DIB lpDIB LPBYTE GlobalLock HGLOBAL hDIB lpDIBBits m clsDIB FindDIBBits lpDIB If DIBBitCount equal 24 then give a prompt and exit this program if m clsDIB DIBBitCount lpDIB 8 prompt MessageBox This program can only process 8bits image Prompt MB ICONINFORMATION MB OK GlobalUnlock HGLOBAL hDIB return let cursor in wait status 沈阳理工大学学士学位论文 31 BeginWaitCursor LONG lWidth m clsDIB DIBWidth lpDIB LONG lHeight m clsDIB DIBHeight lpDIB LONG lLineBytes WIDTHBYTES lWidth 8 accesss every pixel intensity 9 0 for i 1 i lHeight 1 i for j 1 j lLineBytes 1 j intensity 0 BYTE lpDIBBits lLineBytes i 1 j 1 intensity 1 BYTE lpDIBBits lLineBytes i 1 j intensity 2 BYTE lpDIBBits lLineBytes i 1 j 1 intensity 3 BYTE lpDIBBits lLineBytes i j 1 intensity 4 BYTE lpDIBBits lLineBytes i j intensity 5 BYTE lpDIBBits lLineBytes i j 1 intensity 6 BYTE lpDIBBits lLineBytes i 1 j 1 intensity 7 BYTE lpDIBBits lLineBytes i 1 j intensity 8 BYTE lpDIBBits lLineBytes i 1 j 1 for m 0 mGetHDIB Invalidate pDoc SetModifiedFlag TRUE 2 函数 FFT 来实现快速傅里叶变换 参数 complex TD 指向时域数组的指针 complex FD 指向 频域数组的指针 r 2 的幂数 即迭代次数 函数无返回值 VOID WINAPI FFT complex TD complex FD int r LONG count 傅里叶变换点数 inti j k 循环变量 intbfsize p 中间变量 double angle 角度 complex W X1 X2 X count 1 r 计算傅里叶变换点数 分配运算所需存储器 W new complex count 2 沈阳理工大学学士学位论文 37 X1 new complex count X2 new complex count 计算加权系数 for i 0 i count 2 i angle i PI 2 count W i complex cos angle sin angle 将时域点写入 X1 memcpy X1 TD sizeof complex count 采用蝶形算法进行快速傅里叶变换 for k 0 k r k for j 0 j 1 k j bfsize 1 r k for i 0 i bfsize 2 i p j bfsize X2 i p X1 i p X1 i p bfsize 2 X2 i p bfsize 2 X1 i p X1 i p bfsize 2 W i 1 k X X1 X1 X2 X2 X 沈阳理工大学学士学位论文 38 重新排序 for j 0 j count j p 0 for i 0 i r i if j 沈阳理工大学学士学位论文 39 Invalidate pDoc SetModifiedFlag TRUE 2 函数 IFFT 来实现实现快速逆傅里叶变换 参数 complex TD 指向时域数组的指针 complex FD 指向频 域数组的指针 r 2 的幂数 即迭代次数 函数无返回值 BOOL WINAPI IFFT complex FD complex TD int r 傅里叶变换点数 LONG count 循环变量 inti complex X 计算傅里叶变换点数 count 1 r X new complex count memcpy X FD sizeof complex count 将频域点写入 X 求共轭 for i 0 i count i X i complex X i real X i imag FFT X TD r 调用快速傅里叶变换 求时域点的共轭 for i 0 i count i 沈阳理工大学学士学位论文 40 TD i complex TD i real count TD i imag count delete X return true 6 3 3 低通滤波 有了上面的的 FFT 和 IFFT 函数 就可以非常方便的进行而为离散数字图像的傅 里叶变换 即低通滤波 Fourier 函数来对图像进行傅里叶变换 参数 LPSTR lpDIBBits 指向源 DIB 图像指针 LONG lWidth 源图像宽度 象素 数 LONG lHeight 源图像高度 象素数 返回值 BOOL 成功返回 TRUE 否则返回 FALSE BOOL WINAPI Fourier LPSTR lpDIBBits LONG lWidth LONG lHeight 指向源图像的指针 unsigned char lpSrc 中间变量 double dTemp 循环变量 LONG i LONG j 进行傅里叶变换的宽度 高度 长度 2 的整数次方 沈阳理工大学学士学位论文 41 LONG w LONG h LONG FTlong intwp inthp intFTcount 图像每行的字节数 LONG lLineBytes 计算图像每行的字节数 lLineBytes WIDTHBYTES lWidth 8 赋初值 w 1 h 1 ftLong 1 wp 0 hp 0 ftCount 0 计算进行傅里叶变换的长度 2 的整数次方 while ftLong 2 lWidth lHeight ftLong 2 ftCount 分配内存 沈阳理工大学学士学位论文 42 TD new complex lWidth lHeight FD new complex lWidth lHeight 行 for i 0 i lHeight i 列 for j 0 j lWidth j 指向 DIB 第 i 行 第 j 个象素的指针 lpSrc unsigned char lpDIBBits lLineBytes lWidth 1 i j 给时域赋值 TD j lWidth i complex lpSrc 0 给时域赋值 为虚部全为 0 FFT TD FD ftCount 行 for i 0 i lWidth i 列 for j 0 j 255 对于超过的 直接设置为 255 dTemp 255 指向 DIB 第 i h 2 i h 2 i h 2 行 第 j w 2 j w 2 j w 2 个象素的指 针 此处不直接取 i 和 j 是为了将变换后的原点移到中心 lpSrc unsigned char lpDIBBits lLineBytes lHeight 1 i j lpSrc unsigned char lpDIBBits lLineBytes lWidth 1 i lWidth 2 i lWidth 2 i lWidth 2 j1 m n 则根据 0 a 0 bR 2 z 有 1 2 a b xb hxah a a bR 0a 沈阳理工大学学士学位论文 48 7 4 2 000 mm m n hxah axnb 这样离散小波变换可定义为 7 5 2 m nm nm n DWf x hx dxf x hxm nz 因此离散小波变换式 7 5 也是一种时域分析 它从集中在某个区间上的基本函数开 始 以规定步长向左或向右移动基本波形 并用标度因子来扩张或压缩以构造其函 0 a 数系 一系列小波由此而生 这就是 小波 一词的由来 这里m和n分别称为频率范围 指数和时间步长变化指数 由于正比于 故高频时 对应于小的m值 高度 m n h 0 m a m n h 集中 反之亦然 步长的变化则与n成正比 为了从离散小波变换式 7 5 重构函数信号 算子必须是 f x 222 m n DWL Rlz 一有界可逆算子 即对某个 0 ab 7 6 22 2 m n m n z A ff x hxB f 对一切成立 其中表示二元平方可和序列矢量空间 范 2 f xL R 22 lz m n hx 数 2 2 ff xdx 7 2 2 Mallat算法 Mallat 以多分辨分析为基础提出了著名的快速小波算法 Mallat 算法 小波理论 获得突破性进展 使得小波分析成为近年来迅速发展起来的新兴学科 并得到了广泛 的应用 Mallat 算法通过一组分解滤波器 H 低通滤波器 LPF 和 G 高通滤波器 HPF 对信号进行滤波 然后对输出结果进行下二采样 指隔一取一 来实现小波分解 分 解的结果是产生长度减半的两个部分 一个是经低通滤波器产生的原始信号的平滑部 分 另一个则是经高通滤波器产生的原始信号细节部分 重构时使用一组 h 和 g 合成 滤波器对小波分解的结果滤波 再进行上二采样 相邻两点间补零 来生成重构信号 多级小波分解通过级联的方式进行 每一级的小波变换都是在前一级分解产生的低频 分量上的继续 重构是分解的逆运算 低频分量上的信息比较丰富 能量集中 高频 分量上的信息分量多为零 细节信息丰富 能量较少 沈阳理工大学学士学位论文 49 7 2 相关原理 图像经过二维小波分解后 可以得到四幅子图像 LfAdj 1 2 1 2 LLfAdj 1 2 HLfAdj 和 它们分别表示在尺度上的水平低通 垂直低通子图像 水平 1 2 LHfAdj 1 2 HHfAdj j 2 带通 垂直低通子图像 水平低通 垂直带通子图像 水平带通 垂直带通子图像 可以 对子图像再次小波分解 得到尺度上的四幅子带图像 类似的可以对图 1 2 LLfAdj1 2 j 像再次分解 以此类推 可以得到图像的多级小波分解 得到不同分辨的 1 2 1 LLfAdj 子带图像 图 7 1 是图像的三级小波分解表示水平低通 垂直低通子图像 表示 LLLH 水平低通 垂直带通子图像 表示水平低通 垂直低通子图像 水平带通 垂直 HLHH 带通子图像 下标表示不同的分辨率 LL3HL3 LH3HH3 HL2 LH2 HH2 HL1 水平高通 垂直低通 LH1 水平低通 垂直高通 HH1 水平高通 垂直高通 图 7 1 图像三级小波分解示意图 图像经过小波变换后 能够获得良好的空间一频率多分辨率表示 小波变换具有以 下主要特征 1 不仅保持原图像的空间特性 而且很好的提取了图像的高频信息 在低频处 有很好的频率特性 在高频处有很好的空间选择性 2 小波分量有方向选择性 分为水平 垂直 斜向 这些特性都和人类的视觉 特性相吻合 3 能量主要集中在低频子带图像 沈阳理工大学学士学位论文 50 4 低通模糊子图具有很强的相关性 水平子带图像在水平方向相关系数大 而 垂直方向小 垂直子带图像在垂直方向相关系数大 而水平方向小 斜子带图像在垂 直方向和水平方向相关系数都小 7 3 程序源代码 在 CWvltView 类中 得到小波降噪响应函数 OnFilterBlur void CWvltDoc OnFilterBlur TODO Add your command handler code here 读取数字图像的文件头 获取图像的属性参数 LPBITMAPINFOHEADER lpBitmapInfoHeader LPBITMAPINFOHEADER m pBitmap 14 LPBITMAPFILEHEADER lpBitmapFileHeader LPBITMAPFILEHEADER m pBitmap unsigned char lpData m pBitmap lpBitmapFileHeader bfOffBits unsigned long biHeight lpBitmapInfoHeader biHeight unsigned long biWidth lpBitmapInfoHeader biWidth unsigned long biAlign biWidth 3 3 4 4 unsigned long bmSize biHeight biAlign if m pTransfered NULL m pTransfered unsigned char malloc bmSize if m pTransfered NULL return 图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论