基于自适应阈值的视网膜图像分割及其程序设计毕业设计论文.docx
- 文档编号:11386159
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:47
- 大小:1.63MB
基于自适应阈值的视网膜图像分割及其程序设计毕业设计论文.docx
《基于自适应阈值的视网膜图像分割及其程序设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于自适应阈值的视网膜图像分割及其程序设计毕业设计论文.docx(47页珍藏版)》请在冰豆网上搜索。
基于自适应阈值的视网膜图像分割及其程序设计毕业设计论文
毕业设计(论文)
设计(论文)题目:
基于自适应阈值的视网膜图像
分割算法及程序设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
基于自适应阈值的视网膜图像分割算法及程序设计
摘要
视网膜图像分割作为图像处理的一个应用在临床医学和身份鉴定中发挥着愈来愈重要的作用。
当前的图像分割方法主要包括并行边界分割、串行边界分割、并行区域分割和串行区域分割等。
本文致力于研究基于自适应阈值的视网膜图像分割算法及其实现技术。
文章内容主要包括:
1)综述了公开报道的各种视网膜图像的分割方法;2)研究了并行区域分割方法中基于自适应阈值的视网膜图像分割的算法及其实现技术;3)通过VC++6.0编程实现了用自适应阈值算法进行视网膜图像分割;4)通过实验验证了算法的有效性。
关键词:
视网膜图像,自适应阈值,图像分割
ReviewonAdaptivethreshold-basedsegmentationofretinalimageanditsprogramdesign
ABSTRACT
Retinalimagesegmentationasoneofimageprocessingapplications,playanincreasinglyimportantroleinclinicalmedicineandidentification.Thecurrentimagesegmentationmethodsincludeparallelboundarysegmentation,serialboundarysegmentation,parallelregionsegmentationandserialregionsegmentation.Thisarticlefocusedontheadaptivethreshold-basedsegmentationalgorithmofretinalimageanditsimplementationtechniques,including1)Reviewedavarietyofpubliclyreportedretinalimagesegmentationmethods.2)Discussedtheadaptivethreshold-basedsegmentationalgorithmofretinalimageintheparallelregionsegmentationanditsrealization.3)DothesegmentationofretinalimagesusingadaptivethresholdalgorithmviaVC++6.0programmingalgorithm.4)Testthevalidityofthealgorithmbyexperiments.
KeyWords:
retinalimage,adaptivethreshold,imagesegmentation,
第1章绪论
1.1本课题研究的目的及意义
图1眼底结构示意图
由哈佛公共卫生学院和世界卫生组织联合展开的一项长期的研究表明,在发达国家和发展中国家,包含中风和糖尿病在内的心血管疾病是导致死亡的首要原因之一.一个可以有效预测心血管疾病发生和帮助治疗的手段,将每年挽救和提高广大群体的生活质量,在如高血压,心血管和心衰竭等疾病的症状明显出现前,循环系统的检测可以为此提供证据.这一点已经在T.Wong等人[1]的通过对大量研究得到的综述中被证实.这些研究中包含的大量主诉同通过视网膜检测即可发现的循环问题和迹象相联系.对人类眼睛血管的检测,可以预测疾病的发生和辅助诊断,以及追踪一系列与循环系统相关的疾病和症状.
另外,视网膜,具有唯一性、稳定性、可采集性、非侵犯性等优点,在身份鉴别等高层次安全保密方面有重要的应用前景。
而且与脸像、声音等非接触式的身份鉴别方法相比,视网膜具有更高的准确性。
据统计,视网膜识别的错误率是各种生物特征识别中最低的。
基于视网膜的身份鉴别技术日益得到学术界和企业界的重视。
然而,通过肉眼直接观测眼睛或者人工分析视网膜影像是耗时的,耗力的,而且需要经过专门培训的眼科医生和专业设备.一种可以精确的绘制视网膜血管的方法是采用一般的数码相机和陈旧的计算机设备,自动化的分析和诊断工具可以在这些仪器上配合使用,这大大提升了这些检测的速度和效度,同时也大大减少了成本.任何自动视网膜图像分割方法都需要精确确定眼内的静脉,动脉以及毛细血管的位置,大小和边界,通过此图像去追踪它们的通路.这使得自动化诊断工具的应用成为可能.这些自动诊断工具通过进行视网膜检测,可以预见和显示这些健康问题的所在,并为此提供很多有价值的信息.
由于硬件限制,视网膜图像较明显地表现出以下特点:
光照不均匀;血管与背景的对比度不强;图像噪声点多。
这导致采用常用的图像处理方法很难分割出满意的效果,寻找合适的视网膜图像分割方法是难点所在。
目前视网膜图像的分割方法已有不少,但是基于自适应阈值的分割方法尚未见发表。
本文就重点研究基于自适应阈值的视网膜图像分割算法。
1.2当前的研究进展和存在的问题
视网膜图像的分割检测在临床医疗过程和身份鉴定中发挥着重要作用。
国内外发表了许多关于视网膜图像分割检测的文章。
当今的分割方法主要可以分为两大类:
一类是边界方法[2],这种方法的假设是图像分割结果的某个子区域在原来的图像中一定会有边缘存在,一般有孤立点法,孤立线法,组成边界法,边界跟踪法等;一类是区域方法[2],这种方法的假设是图像分割结果的某个子区域一定会有相同的性质,而不同区域的像素则没有共同的性质,一般有阈值分割法,区域分裂与合并,自适应等。
根据分割方法的不同,可分为:
1.并行边界分割[2]:
对图像上的每一点所作的分割处理不依赖与其他的点处理结果,同时地在所有点上进行分割运算。
2.串行边界分割[2]:
通过顺序的搜索边缘点,采用串行的方法来对目标边界检测来实现分割的方法。
在处理图像时不但利用了本身像素的信息,而且利用前面已经处理像素的结果。
对某个像素的处理,以及是否把它分类成边界点,和先前对其它点处理得到的信息有关。
3.并行区域分割[2]:
采用并行的算法对目标区域进行检测实现图像的分割。
4.串行区域分割[2]:
采用串行处理策略对目标区域直接检测来实现分割的方法。
主要特点是整个处理过程分解为顺序的多个步骤依次进行。
以下综述了当今主流的视网膜图像分割的方法及其优缺点。
如下图2为当如上所述的分割方法的框架表:
图2图像分割方法框架
1.2.1基于并行边界的分割方法——Canny自适应的边缘检测方法[3]
基于Canny算子[2],提出了一种Canny自适应的边缘检测方法。
Canny自适应算法在保持了Canny算子原有的定位准确,单边响应和信噪比高等优点的基础上,提高了Canny算子在提取图像边缘细节信息和抑制假边缘噪声方面的性能。
Canny自适应算法将整幅图像分割为若干子图像,并根据各子图像的边缘梯度信息,结合全局边缘梯度特征信息自适应地生成动态阈值,提高了边缘检测的自动化程度,在实际的应用中获得了很好的效果。
通过数学分析和试验结果证明了Canny自适应算法是一种有效的边缘检测改善方法。
Canny自适应算法普遍适用于各类图像的阶跃边缘,本算法保持了传统Canny算子的优点,提高了抑制噪声的能力,而且在算法复杂度和计算时间上均小于传统Canny算子,得到的边缘轮廓图信噪比高,连通性好,更重要的是本算法能够自适应的生成高、低阈值检测图像边缘,自动化程度高,为实现自动匹配进行了有益的探索。
Canny自适应算法也存在如检测效果优于Sobel、Laplacian等简单算子,但是速度相对较慢等问题,这有待于进一步研究解决。
1.2.2基于串行边界的分割方法——追踪的分割方法[4]
基于追踪(tracking)的分割方法,此法由血管图像边界上的一个点出发依次搜索并连接相邻边界点从而逐步检测出整个血管边界。
主要包括如下步骤:
搜索起点的确定,搜索机制的选取,搜索结束的判定。
根据算法的不同,搜索起点可有一个或数个。
方法的缺点在于它不是全自动的,需要操作者给出初始点和结束条件。
Menegaz等提出一种结合了先验知识的血管追踪算法,即利用血管位置、走向和宽度的连续性特点,在人工设定种子点和搜索方向之后利用追踪算法寻找血管中心线实现血管分割。
串行分割法比并行分割法有潜在的优点。
并行分割法必须在每个图像点完成相同的计算,因为接受或放弃这个像素点的惟一依据就是它的本身的计算结果。
但是这种计算带来的问题是:
如果希望分割是可靠的,这些计算可能会相当的复杂,因为不得不在处理该像素的时候,考虑邻域甚至更多其他的像素。
采用串行分割可采用简单的、方便的计算。
1.2.3基于并行区域的分割方法——聚类分割法[5]
聚类分割法是最为直接和最实用的图像分割方法。
阈值法实际上是聚类法的一个特例。
为了弥补不使用训练数据所造成的缺陷,聚类算法在分割图像和确定每一类特征之间进行迭代计算。
从这个角度而言,聚类算法是在用已存在的数据对自身进行训练。
目前常用的聚类算法有K均值(或ISODATA)算法、模糊C均值算法和最大期望值(expectionmaximization,EM)算法等。
尽管聚类算法不要求训练数据,但需要预分割(或初始参数)。
由于聚类算法不需要直接包含空间建模,所以对初始化参数敏感、噪声和灰度不均匀性均比较敏感;但这种缺乏空间模型的算法却带来了计算的快捷。
Ayala[6]等提出2种新的模糊集均值算法并应用于视网膜血管的自动分割。
Thanapong等利用FCM算法分割20套眼底视网膜血管图像,FCM算法敏感性,与目前临床应用的传统的分割方法相比较,特异性分别达到78.116%和95.175%。
1.2.4基于串行区域的分割方法——区域生长分割法[5]
基于区域生长(regiongrowing)的分割方法区域生长法从满足检测准则的种子点开始,在各个方向上生长区域,当其相邻点满足特定检测准则就并入小块区域中。
当新的点被合并后再用新的区域重复这一过程,直到没有可接受的邻近点时生成过程终止,性质的相似性和空间的相邻性是其重要准则。
区域生长算法假定灰度相近、性质上相似、空间上相邻的像素属于同一物体,除将阈值作为判定条件外,还考虑到目标区域的空间相邻性,其优点在于计算简单,对于均匀的连通目标有很好的分割效果。
其主要缺点是需要用户放置种子点,并反复调试阈值直到获得满意的结果,耗时较长,所获结果在很大程度上依赖于用户对阈值的选择。
由于图像密度和噪声不一,区域生长法往往产生孔洞和过度分割,所以需要后处理Tuduki等改进了传统的区域生长法先利用阈值法处理MRA数据,再通过基于欧几里德变换的算法提取血管中轴线,以此为种子点进行区域生长,自动分割提取了脑血管,实现了血管三维成像。
1.3本课题研究的主要内容及贡献
1)综述了公开报道的各种视网膜血管检测方法;
2)深入研究并行区域分割法,重点比较了固定阈值分割和自适应阈值分割算法;
3)研究自适应算法的实现技术;
4)以自适应阈值算法为工具研究视网膜图像分割问题。
5)通过VC++6.0编程实现了以自适应阈值算法为基础的并行区域分割法进行视网膜图像分割;
6)通过实验验证了算法的有效性。
1.4本论文的结构
第1章绪论;
第2章基本算法原理;
第3章基于自适应阈值算法的视网膜图像分割;
第4章总结;
参考文献;
附录核心代码;
致谢;
软件使用说明书。
第2章基本算法原理
本章主要介绍算法的基本原理。
先对并行区域分割技术进行描述,再对经典的并行区域分割算法——固定阈值算法和自适应阈值算法分别作详细讨论。
2.1并行区域分割
并行区域分割技术是指采用并行的方法对目标区域进行检测实现图像分割的方法。
从某种角度讲,图像分割的目的之一就是目标提取―将人类感兴趣的区域提取出来。
从这一点说,区域分割是最直接的方法,利用这种分割方法可以直接得到感兴趣的目标区域。
并行区域是把图像分成前景和背景,所以阈值分割相当于对图像进行二值化,实质是对每一个像素点确定一个阈值,根据阈值决定当前像素是前景还是背景点。
出于这个原因,直接的阈值分割一般不能适用于复杂景物的正确分割,如自然场景,因为复杂景物的图像,有的区域很难判断究竟是前景还是背景。
不过阈值分割在处理前景与背景有较强对比的图像时特别有用,此时需要的计算复杂度小。
当物体的灰度级比较集中时,简单设置灰度级阈值提取物体是一个有效方法。
2.1.1固定阈值算法
固定阈值分割的研究已经有几十年的历史,到现在为止,已经提出了很多算法。
固定阈值分割的基本想法是确定一个阈值,然后把每个像素点的像素值和阈值相比较,根据比较的结果把该像素划分成两类——前景或者背景。
一般阈值分割可以分成以下3步:
●
(1)确定阈值;
●
(2)将阈值和像素值比较;
●(3)把像素归类。
上面的3个步骤,关键的是第一步,如果能确定一个合适的阈值,就可以对图像进行正确、方便的分割。
固定阈值方法分全局阈值和局部阈值两种,如果分割过程中对图像上每个像素所使用的阈值都相等,则为全局阈值方法;如果每个像素所使用的阈值可能不同,则为局部阈值方法。
●全局阈值:
(2-1)
●局部阈值:
(2-2)
可以认为局部阈值是全局阈值的一般情况,全局阈值则是最简单的图像分割方法。
在选用阈值时,根据不同的目标,对图像分割往往存在一个最佳的阈值。
2.1.2自适应阈值算法
当照明不均匀、有突发噪声,或者背景灰度变化比较大时,整幅图像分割将没有合适的单一门限,因为单一的阈值不能兼顾图像各个像素的实际情况。
这时,可对图像按照坐标分块,对每一块分别选一阈值进行分割,这种与坐标相关的阈值称为动态阈值方法,也称为自适应阈值方法。
这类算法的时间复杂度和空间复杂度比较大,但是抗噪声能力比较强,对采用全局阈值不容易分割的图像有较好的效果。
自适应阈值选取比较简单的方法则是对每个像素确定以它为中心的一个n的邻域窗口,但是,一般来说,同一种运算窗口越大,需要处理的数据越多,时间复杂度越大,所以要根据实际对图像的要求进行邻域的大小选取。
计算窗口内像素的最大值和最小值,或者窗口内所有的像素值得和,然后取它们的均值作为阈值。
令Valuemax表示n邻域像素的最大灰度值,Valuemin表示n邻域像素的最小灰度值,则阈值可以设定为:
(2-3)
也可以采用均值设定阈值:
(2-4)
具体如下图(3)所示选取的窗口为当前像素的8邻域窗口:
P
C
图3自适应阈值确定方法
在图(3)中,令C表示当前像素,P为C的8邻域像素,根据上诉公式则阈值具体可以设定为:
(2-5)
其中Pi是C的8邻域像素。
第3章基于自适应算法的视网膜图像分割
本章深入研究自适应算法在视网膜图像分割的实现技术。
本课题的核心算法是在均值阈值算法基础上,用邻域内的均值作为阈值进行比较,以提高实验性能。
为了体现本算法的特点和优越性,特与固定阈值算法和串行区域分割法中的canny算子进行比较,得出鲜明可比的实验结果,并进行具体的性能分析。
3.1节首先给出了三种算法的核心算法代码;3.2节给出了实验结果;3.3节进性能分析。
3.1核心算法
该研究以VC++6.0为开发平台,以CxImage图像处理库为开发工具,设计并实现了相关算法。
上述核心算法的描述和代码如下:
3.1.1固定阈值
本算法先选固定阈值为全局像素值的平均值,即先对全局像素值求和为Tp,并记录像素个数C,然后再求得全局像素均值
为固定阈值,最后遍历整图中的像素值与固定阈值进行比较并重新赋值进行显示。
voidCDemoDoc:
:
OnCximage_YBBCT()
{
//在这里开始添加自己的命令代码
if(image==NULL)return;/*如果没有读取到图像,返回*/
longw,h,x,y;/*w为图像的宽度,h为图像的高度,x为像素的横坐标,y为像素的纵坐标*/
intc=0;
doublev=0;
w=image->GetWidth();/*读取图像的宽度*/
h=image->GetHeight();/*读取图像的高度*/
image->GrayScale();/*把图像转换为灰度图*/
BYTE*thd_img;/*建立图像数据的指针*/
thd_img=(BYTE*)malloc((w)*(h)*sizeof(BYTE));/*给图像分配内存*/
for(y=0;y { for(x=0;x { v+=image->GetPixelIndex(x,y); c++; } } v/=c; if(image->GetPixelIndex(x,y)>=(BYTE)v)/*跟所求阈值进行比较并赋值*/ thd_img[y*w+x]=255; else thd_img[y*w+x]=0; image->SetPixelIndex(x,y,(BYTE)thd_img[y*w+x]); /*对所得的像素点进行显示*/ } } free(thd_img);/*释放指针*/ } 3.1.2自适应阈值 本算法先对每个像素选取一个大小为18*18的邻域,然后针对每一个邻域求出它相应的均值,即 为自适应阈值,然后针对该邻域中的每个像素的值与该邻域的阈值进行比较并重新赋值,依次遍历整图,最后对所得的像素点进行显示。 voidCDemoDoc: : OnCximage_YBBAT() { //在这里开始添加自己的命令代码 if(image==NULL)return;/*如果没有读取到图像,返回*/ longw,h,x,y;/*w为图像的宽度,h为图像的高度,x为像素的横坐标,y为像素的纵坐标*/ intk,l,c;/*k表示所取子领域的宽度,l为所取子领域的高度,c作为灰度值的和加总*/ doublev;/*v为所求灰度的均值*/ w=image->GetWidth();/*读取图像的宽度*/ h=image->GetHeight();/*读取图像的高度*/ image->GrayScale();/*把图像转换为灰度图*/ BYTE*thd_img;/*建立图像数据的指针*/ thd_img=(BYTE*)malloc((w)*(h)*sizeof(BYTE));/*给图像分配内存*/ for(y=0;y { for(x=0;x { v=0;/*对变量v赋初值0*/ c=0;/*对变量c赋初值0*/ for(l=-9;l<10;l++)/*对邻域的高度l开始遍历*/ { for(k=-9;k<10;k++)/*对邻域的宽度k开始遍历*/ { if((y+l)>=0&&(y+l) /*像素点的坐标要满足在图像内*/ { v+=image->GetPixelIndex(x+k,y+l); c++; } } } v/=c; if(image->GetPixelIndex(x,y)>=(BYTE)v)/*跟所求阈值进行比较并赋值*/ thd_img[y*w+x]=255; else thd_img[y*w+x]=0; } } for(y=0;y { for(x=0;x { image->SetPixelIndex(x,y,(BYTE)thd_img[y*w+x]); /*对所得的像素点进行显示*/ } } free(thd_img);/*释放指针*/ } 3.1.3Canny算子 本算法先是利用高斯函数对图像进行平滑,去除图像中的噪声,并产生一个一维高斯分布函数,在高斯平滑函数中生成高斯滤波函系数[7],然后采用二阶范数计算梯度,抑制局部像素非最大梯度点,根据梯度计算及经过非最大值抑制后的结果设定阈值,再利用函数寻找边界的起点,最后用Hysteresis[2]执行的结果,从一个像素点开始进行搜索,搜索以该像素为边界起点的一条边界所有的边界点。 voidCanny(unsignedchar*pUnchImage,intnWidth,intnHeight,doublesigma,doubledRatioLow,doubledRatioHigh,unsignedchar*pUnchEdge) { unsignedchar*pUnchSmooth;/*经过高斯滤波后的图像数据*/ int*pnGradX;/*指向x方向导数的指针*/ int*pnGradY;/*指向y方向导数的指针*/ int*pnGradMag;/*梯度的幅度*/ pUnchSmooth=newunsignedchar[nWidth*nHeight]; pnGradX=newint[nWidth*nHeight]; pnGradY=newint[nWidth*nHeight]; pnGradMag=newint[nWidth*nHeight]; GaussianSmooth(pUnchImage,nWidth,nHeight,sigma,pUnchSmooth); /*对原图像进行滤波*/ DirGrad(pUnchSmooth,nWidth,nHe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 自适应 阈值 视网膜 图像 分割 及其 程序设计 毕业设计 论文