文档详情

《医学图像与信号处理实验报告.doc

发布:2017-01-14约2.42千字共9页下载文档
文本预览下载声明
《医学图像与信号处理 灰度变化是点运算,将原图象的每个像素的灰度值改成线性变化之后的灰度即可。灰度的线性变换就是指图像的中所有点的灰度按照线性灰度变换函数进行变换。灰度变换方程如下:该方程为线性方程。式中参数为输入图像的像素的灰度值,参数为输出图像的灰度值。 设原图象的灰度范围为[a,b],变化之后的范围为[a’,b’],则: fA=(b’-a’)/(b-a) fB=-(b’-a’)/(b-a)*a+a’ 如果算出来的值大于255,则让它等于255,小于0则让其等于0。 2.2 灰度图象中值滤波: 中值滤波也属于局部处理的一种,将窗口中的各个像素排序之后排序,取中值赋给模板中心的像素,所以窗口中个数一般是基数。 2.3 灰度图象边缘检测: 边缘检测有三种算子:Roberts,Prewit,Sobel。三种算子都是做一阶差分的,通过算子算出各个像素的梯度值,将水平梯度的绝对值和垂直梯度的绝对值相加,若此梯度值大于某个阈值,则将其灰度值赋为255,否则赋为0。 2.4 图象直方图: 统计各灰度值出现的频数,以及像素的总个数,用频数除以总个数作为频率,以灰度值作为横坐标,频率作为纵坐标绘图。 实验步骤 3.1 灰度图象的线性拉伸: 创建一个对话框来输入变化后的灰度值,为对话框的两个编辑框定义成员变量,在文档类中添加处理函数,按照对话框输入值计算出fA与fB,做一个循环,将0 到255的灰度值,计算出拉伸后的灰度值(超限情况特殊处理),存放在下标为此值的一个数组中,然后利用文档类的中定义的CDib类的成员变量 m_DIB,获得当前打开的图像指向图像数据部分的指针m_DIB.m_pBits,在数组中查出每个像素变化后的灰度值,并将此值赋给指针 m_pBits指向的内存。刷新视图。 然后在菜单中加上线性拉伸的菜单,为该菜单的ID添加消息响应函数,在该函数中创建对话框,并调用文档类线性拉伸的函数,将对话框的两个成员变量传给此函数。 3.2灰度图象中值滤波: 在文档类中添加两个成员函数。一个用来把传入的指针里的内容排序,一个用来做中值滤波。也要申请一块新内存来复制原图像的信息,双重嵌套循环,边界像素不处理,对每个像素,使用一个大小为9个字节的数组来存放复制图像窗口中各像素值,然后将数组首地址传入排序的函数中,将中间的值赋给当前图像窗口中心的像素。排序函数我用的是快速排序法。 在菜单中添加中值滤波菜单项,为其添加消息响应函数,调用文档类的中值滤波函数。 3.3灰度图象边缘检测: 在文档类中定义三个函数,分别为Roberts,Prewit,Sobel算子处理函数,处理时,先申请新内存复制原来图像信息,边界像素不作处理,对每个像素值,求出其在复制图像中的梯度,判断,若梯度值大于150(这个是我自己定的),则将灰度值赋为255,否则置零。 菜单中添加边缘检测菜单,置属性为Pop—up,添加三个下一级菜单,分别为Roberts,Prewit,Sobel,各个菜单的消息响应函数中调用文档类中各自的处理函数。 3.4图象直方图: 为文档类添加一个int型指针成员变量m_pGray,在构造函数中将该指针赋空,在文档类中定义了一个函数,统计各个灰度值出现的频数,申请一个内存,存储在这个内存中,并将m_pGray指向它。 创建一个画直方图的对话框,添加Picture控件,在控件里调用文档类成员变量,画直方图。添加一个滚动条,用来确定阈值,为滚动条添加消息响应函数,按照滚动条的值进行二值化。 在菜单中添加直方图菜单,添加消息响应函数,在响应函数中创建直方图对话框对象。 实验结果 4.1灰度图象的线性拉伸: (1) 函数源代码: (2) 前后效果对比图: 图1 实验原图 图2 线性拉伸效果图 4.2灰度图象中值滤波: (1) 函数源代码: (2) 前后效果对比图: 图3对盐噪声进行中值滤波后的效果图 4.3灰度图象边缘检测:(Roberts算子处理函数) (1) 函数源代码: (2) 前后效果对比图: 图4 Roberts算子处理效果图 4.4图象直方图: (1) 函数源代码: (2) 前后效果对比图: 图5 直方图显示效果图 五、实验小结 通过本次课程设计,实在是受益匪浅。本来这门课的知识学的就不够扎实,当刚开始要设计的时候,还真不知道从哪里下手。在设计的过程中遇到问题,可以说是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,例如编写的程序在计算机上识别的是没有错误的,但是运行的结果却是不对的,总是两个字符串一起输出,后来在我的努力下,一一攻破了困难,最后把一个完整的程序设计完成,感觉蛮有成就感的。虽然课程设计只有短短的十几天,但是我发现我学到的知识比整
显示全部
相似文档