当前所在位置: 首页 > 论文范文 > 正文

数字图像处理实验报告(第5页)

本文共计9043个字,预计阅读时长31分钟。【 字体:

论文指导服务

毕业论文网专业团队提供毕业设计、论文写作指导及相关咨询服务

论文指导 毕业设计 答辩咨询
微信号已复制到剪贴板

  根据计算出来的高度和宽度修改文件信息头,并且申请内存存储新图像。

  计算每点的像素在原来图像中的坐标从而获取其灰度值,写入新内存。

  将m_DIB、m_pBits指向该新内存。刷新视图。

  添加图像旋转菜单,在菜单响应函数中创建对话框,调用文档类中旋转函数,将对话框中获取的角度传给旋转函数。

  8、图像二值化:

  在文档类添加一个成员函数,根据传人的图像和阈值返回组间方差和组内方差的比值。

  再添加一个成员函数,进行二值化。

  在函数中:

  计算新BMP文件的大小,申请一块新内存,存储新的整个BMP文件的信息,将位图信息头中biBitCount置为1,调色板数组只有两个两个元素,下标为0的三个灰度值都为0,下标为1的三个灰度值为255。

  从最大灰度值到最小灰度值之间搜寻上述函数返回值最大的值,作为阈值。

  对每个像素,若其原来灰度值小于阈值,赋1,否则赋0。

  将m_DIB,m_pBits指向新内存的图像数据部分,m_DIB、m_pBMI指向位图信息头。

  9、图像直方图:

  为文档类添加一个int型指针成员变量m_pGray,在构造函数中将该指针赋空,在文档类中定义了一个函数,统计各个灰度值出现的频数,申请一个内存,存储在这个内存中,并将m_pGray指向它。

  创建一个画直方图的对话框,添加Picture控件,在控件里调用文档类成员变量,画直方图。添加一个滚动条,用来确定阈值,为滚动条添加消息响应函数,按照滚动条的值进行二值化。

  在菜单中添加直方图菜单,添加消息响应函数,在响应函数中创建直方图对话框对象。

  最后,因为我开始做工程的时候没有把菜单设计好,做得有点乱,所以,我又在View里添加WM_CONTEXTMENU消息响应函数,在函数体内用CMenu类来实现弹出菜单。

  四、实验总结与体会

  这次实验学到最大的东西,是自己总算有MFC编程的概念了,虽然自己VC++考试的分数还不错,但是里面的很多东西,不通过自己的编程时绝对不能真正理解。比如说封装性,这次用CDib的方便,很好地利用了类的封装性。另外,比如MFC是基于消息响应机制的,这就决定了,要利用鼠标或者菜单响应函数去实现功能,而用c语言编写程序的时候,完全是按主函数的线程来的。

  另外,我也学会了调试的真正含义。以前都只知道那几个按键是做什么用的,调试的真正目的,是根据自己的算法来检验程序计算的各个值是否符合,从而可以很快速方便地查到自己的错误。

  自学也是很重要的一方面。实际上,在现在来说,用MSDN也不是很难的事了,我们不应该被英文打到,而且现在,随着对一些专有名词熟悉了之后,看MSDN也容易一些了,万一不懂的函数,也可以利用网络查到很多函数功能用法的解释。

  刚开始的时候做的是位图的读取和显示,实在是不知从哪里做起,所以就照着实验书上敲了前面的部分,但是慢慢地也看懂了代码的意思。所以后来的基本上都是自己做的了,但是算法还是基本上和书上差不多。不过自己编的时候还是有很多细节的部分没有注意到,比如说,强制数据类型转换,我自己编的时候没有注意这个问题,结果出了很多错,有些事由于函数调用引起的,有些是由于不等号两边数据的匹配问题,还有的是由于指针的移动,直到这个时候,才真正明白实验书上程序为什么那么多强制类型转换,虽然书上很多东西不是尽善尽美,但是对于我这种刚开始学会编程的人还是有很多可以学习的地方的。

  如老师所说,算法的效率是很重要的。要提高算法的效率,一个是要简化计算(不得不说,这需要数学基础),另外一个就是要避免许多重复的计算。在参考书上的程序里,很多时候,为了避免这种重复的计算(在循环中表现尤其明显),会把某些数当常数算出来,只要后来加上这个常数就可以,这样,效率高很多。

  另外,对许多出错的情况,我的程序里也没有做好。比如,如果打开的不是8位图像,我的程序不会提示错误,正常结束,而可能做错,所以,这也是我应该向别人程序学习的地方。

  最后一个,自己菜单的布局也是很乱的。要从一开始就布局好。

阅读全文