图3-6 图像灰度变换前后对比
3.5 直方图均衡化的MATLAB实现
研究直方图均衡化,为了研究方便,首先将直方图归一化,即让原图像灰度范围[Z1,Zk]归一化为[0 1]。设其中任一灰度级Z归一化为r,变换后图像的任一灰度级Z‘归一化为s ,显然r、s应当满足:
因此直方图修正就是对下列公式的计算过程:
式中T(r)为变换函数,它必须满足下列条件[7]:
1.T(r)在0≤r≤1区间内是单值函数,且单调增加; 2.T(r)在0≤r≤1内满足0≤T(r)≤1。
在直方图均衡化时,有,这里L为均衡化后灰度变化范围,归一化表示时L=1,则,有,即:
两边取积分得:
这就是所求的变换函数,表明变换函数T(r)是原图像的累计分布函数,因此只要知道原图像的概率密度就能很容易地确定变换函数。
将上述结论推广到离散的情况。设一幅图像总像素为n,共分L个灰度级,nk代表第k个灰度级rk出现的频数(像素数),则第k灰度级出现的概率为:
p(r)?n/nrk0?rk?1k?0,1,2,??L-1
此时变换函数可以表示为
s其反变换函数为
k?T(rk)??pi?0kr?r???nn
kiii?0rk?T?1?s?k0?sk?1
因此,根据原图像的直方图统计值就可算出均衡后各像素的灰度值。 MATLAB图像处理工具箱提供了用于直方图均衡化的函数Histeq。Histeq语法格式为:
J=)
其功能是:指定直方图均衡化后的灰度级数n,默认值为64。 代码如下:
I = imread('C:\\Users\\zouyifeng\\Desktop\\论文图片\\shou.jpg'); I=rgb2gray(I);
J = &canny edge check');%此为用高斯滤波后Canny算子边缘检测结果;检测结果如下图
图3-10
图3-11 图像边缘检测前后对比
第4章 总结
本文主要内容是介绍了MATLAB在医学图像处理领域内的编程,由于时间仓促,笔者水平有限,导致本文还只是对图像进行简单的处理,并且只能进行一次简单的处理。编写更加复杂的算法、实现对图像多次连续处理是本次论文的一个发展方向;本文还不能脱离MATLAB环境运行,由于MATLAB程序功能复杂,占用系统空间资源较大,影响系统处理速度,所以可以添加插件,将本文脱离MATLAB环境运行将对本文运行速度有更大的提高;另外代码的编写风格虽然尽量依照软件工程的要求,但是仍然有不规范、不严谨的情况存在。虽然在医学图像处理设计之初,就将面向实际应用作为预期目标,但是到目前为止其实际应用仍然十分有限,这也是本图像处理的一个进一步研究的方向。
参考文献
[1] 徐明远,刘增力. MATLAB仿真在信号处理中的应用[M].西安:电子科技大学出版
社,2007.
[2] 何锦平.图像增强及其应用研究[D].西北工业大学硕士学位论文.2003. [3] 章晋.图像处理与分析[M].北京:北京大学出版社,2004. [4] 张志涌.精通MATLAB6.5[M].北京:北航电子版,2002.
[5] 张家广,杨长贵.计算机图像学[M].北京:清华大学出版社,1995.
[6] 陈杨,陈荣娟.MATLAB60X图像编程与图像处理[M].西安:电子科技大学出版社,2002. [7] 闫敬文.数字图像处理MATLAB版[M].北京:国防工业出版社,2007. [8] 周新伦,柳建.数字图像处理[M].北京:国防工业出版社,1986. [9] 李信真,车明刚.计算方法[M].西安:西北工业大学出版社,2000.
[10] 陈桂明,张明照.应用MATLAB语言处理信号与数字图像[M].北京:科学出版社,2000. [11] 高诸明.数字图像处理[J].计算机学报,1998,(3):.
[12] 于万波. 基于MATLAB的图像处理[M].北京:清华大学出版社,2008.
致 谢
为期十多周的毕业设计结束了,我的毕业设计能顺利完成多亏各位老师指导和周围同学的帮助,在此依依表示感谢。
首先,要感谢我的指导老师,朱卫平老师。朱老师在我的这次毕业设计中
对我的指导和帮助至关重要。正是在朱老师的指导下,我逐步理清了设计思路,明白了设计目的。在毕业设计的完成过程中,朱老师给予了很多指点,帮助解决了很多难题,再此对朱老师表示深深的感谢!
此外,感谢在毕业设计中给予我帮助的老师、同学。在此,也向他们表示感谢!
附 录
本系统中所用到的相关代码:
Private Declare Function OSWinHelp% Lib \(ByVal .Height - 1500
' picture1.Width = frmMain.Width - 300
SaveSetting App.Title, \ SaveSetting App.Title, \ SaveSetting App.Title, \ SaveSetting App.Title, \ End If End Sub Private Sub \
'启动ACTIVEX自动化服务器 Result = MATLAB.execute(\
Result = MATLAB.execute(\Result = MATLAB.execute(\
Result = MATLAB.execute(\Clipboard.Clear
Result = MATLAB.execute(\Picture2.Picture = LoadPicture Picture2.Picture = Clipboard.GetData() MATLAB.execute (\'功能是缩小图像 的动态范围 End Sub
Private Sub mnutoolsadj_Click() Dim Result As String
Clipboard.Clear '清空剪贴板
Clipboard.SetText (Path) '将图像完整路径写入剪贴板 Set MATLAB = CreateObject(\'启动ACTIVEX自动化服务器 Result = MATLAB.execute(\
Result = MATLAB.execute(\Result = MATLAB.execute(\
Result = MATLAB.execute(\Clipboard.Clear
Result = MATLAB.execute(\Picture2.Picture = LoadPicture Picture2.Picture = Clipboard.GetData() MATLAB.execute (\End Sub
Private Sub mnutoolscrop_Click() Dim Result As String
Clipboard.Clear '清空剪贴板
Clipboard.SetText (Path) '将图像完整路径写入剪贴板 Set MATLAB = CreateObject(\'启动ACTIVEX自动化服务器 Result = MATLAB.execute(\
Result = MATLAB.execute(\Result = MATLAB.execute(\
MATLAB.execute(\Clipboard.Clear
Result = MATLAB.execute(\Picture2.Picture = LoadPicture Picture2.Picture = Clipboard.GetData() MATLAB.execute (\End Sub
Private Sub ToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) On Error Resume Next Select Case Button.Key Case Is = \新建\