眼底图像的病变识别1. 原理阐述1. 1前言眼底病变包括了视网膜,脉络膜,视神经及玻璃体的炎症,肿瘤,各类血管的病变,各种变性疾病及多系统疾病引起的眼部病变。
不仅种类繁多,而且对视功能损害较大。
目前常见而又影响视功能的眼底疾病有糖尿病视网膜病变,老年性黄斑病变,视网膜静脉阻塞等等。
基于以上眼底图像对于疾病的诊断的意义,本文章结合了正常和病态的眼底图像各50幅,采用模式识别的方法先对两种图像各25幅加以训练,并进行特征值提取,在使用剩余的图像进行分类方法的评估,本文意在运用模式识别方法在医学领域应用。
1. 2流程说明本次模式识别的过程是:有已知样本情况的监督模式识别图1 监督模式识别的流程图对于图像的预处理主要分成两个步骤:无效区域的填充和图像的对比度增强。
图2 图像的预处理的流程图对于所给的病变图像,有部分的图像边沿是无效的黑色,这对于下一步对比度增强会带来影响,另外,在图像的特征提取上也会造成影响。
如果前期部进行处理,那么,后期的分离器中则需要加入判断结构对无效区域的识别,这无疑增加特征提取的运行时间。
因此,这里采用了一种简单的方法对向区域填充图像的R 、G 、B 均值。
做法是先读取有效的R 、G 、B 值,并存入数组,下一步将对数组中的值求平均即可得到该图像有效R 、G 、B 的平均值,在向无效区域填充即可。
图3 无效填充前图4 无效填充后接下来,对图像的处理是:对比度增强。
由于拍照的光线对眼底图像质量起着重要作用,因此,对于明场和暗场下的蛋白质与血液的成像都有所不同,为了增强二者在图像中的识别度,采用的是Retinex图像增强的方法,设置蛋白质和血液通道,分别对R、G、B的标准差进行设定,进而得到预处理后的图像。
然后,再对图像的蛋白质和血液筛选,形成25*2的特征矩阵。
图5 特征提取和选择图6 经过蛋白质通道前图7经过蛋白质通道前图8 经过血液通道前图9 经过血液通道后然后将训练集的数据进行整合,使用三种分类器(分别是最小距离分类器、Fisher线性分类器、二次分类器)进行训练。
图10 分类器的训练最后将测试图像也进行相应的预处理和特征提取,最后输入到训练好的分类器中,进行判别,输出正确率、灵敏度和运行时间,进而对分类器的结果进行评估。
训练后图11分类器的测试2.代码实现2. 1主程序部分:2. 2无效区域的填充:2.3 Retinex对比度增强与特征提取:2. 3. 1 蛋白质通道function x=blood_channel(f)fr=f(:, :, 1); fg=f(:, :, 2); fb=f(:, :, 3);%RGB通道mr=mat2gray(im2double(fr)); mg=mat2gray(im2double(fg)); mb=mat2gray(im2double(fb));%数据类型归一化alf1=600; %定义标准差n=51;%定义模板大小n1=floor((n+1)/2);%计算中心for i=1:nfor j=1:nb(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf1))/(pi*alf1); %高斯函数endendnr1 = imfilter(mr,b,'conv', 'replicate');ng1 = imfilter(mg,b,'conv', 'replicate');nb1 = imfilter(mb,b,'conv', 'replicate');%卷积滤波ur1=log(nr1); ug1=log(ng1); ub1=log(nb1);tr1=log(mr);tg1=log(mg);tb1=log(mb);yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;alf2=600; %定义标准差for i=1:nfor j=1:na(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf2))/(6*pi*alf2); %高斯函数endendnr2 = imfilter(mr,a,'conv', 'replicate');ng2 = imfilter(mg,a,'conv', 'replicate');nb2 = imfilter(mb,a,'conv', 'replicate');%卷积滤波ur2=log(nr2); ug2=log(ng2); ub2=log(nb2);tr2=log(mr);tg2=log(mg);tb2=log(mb);yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3;alf3=100; %定义标准差for i=1:nfor j=1:ne(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf3))/(4*pi*alf3); %高斯函数endendnr3 = imfilter(mr,e,'conv', 'replicate');ng3 = imfilter(mg,e,'conv', 'replicate');nb3 = imfilter(mb,e,'conv', 'replicate');%卷积滤波ur3=log(nr3); ug3=log(ng3); ub3=log(nb3);tr3=log(mr);tg3=log(mg);tb3=log(mb);yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;cr=im2uint8(dr); cg=im2uint8(dg); cb=im2uint8(db);z=cat(3, cr, cg, cb);%figure, imshow(z);pr=z(:, :, 1); pg=z(:, :, 2); pb=z(:, :, 3);%RGB通道blo_ture=0;bg_plus=0;N=101;for j=1:N %列for i=1:N %行if(pb(i,j)==0)if((pg(i,j)<40)&&(pr(i,j)>pg(i,j)))blo_ture=blo_ture+1;endend%血液特征一if(pg(i,j)==0)if(pb(i,j)>pr(i,j))blo_ture=blo_ture+1;endend%血液特征二if((pr(i,j)>80)&&(pr(i,j)<100))if((pg(i,j)>20)&&(pg(i,j)<90))if((pb(i,j)>100)&&(pb(i,j)<130))blo_ture=blo_ture+5;endendend%血液特征三if((pr(i,j)>140)&&(pr(i,j)<150))if((pg(i,j)>140)&&(pg(i,j)<150))if((pb(i,j)>180)&&(pb(i,j)<255))bg_plus=bg_plus+1;endendend%灰色特征一if((pr(i,j)>140))if((pg(i,j)>140))if((pb(i,j)==0))bg_plus=bg_plus+1;endendend%黄色特征一endendadd_mark=floor(bg_plus*1000/(101*101));if((add_mark<120)&&(add_mark>90))x=blo_ture+add_mark;elsex=blo_ture;end3. 3. 2 血液通道function x=protein_channel(f)fr=f(:, :, 1); fg=f(:, :, 2); fb=f(:, :, 3);%RGB通道mr=mat2gray(im2double(fr)); mg=mat2gray(im2double(fg)); mb=mat2gray(im2double(fb));%数据类型归一化alf1=100; %定义标准差alf=a^2/2 a=54n=51;%定义模板大小n1=floor((n+1)/2);%计算中心for i=1:nfor j=1:nb(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf1))/(pi*alf1); %高斯函数endendnr1 = imfilter(mr,b,'conv', 'replicate');ng1 = imfilter(mg,b,'conv', 'replicate');nb1 = imfilter(mb,b,'conv', 'replicate');%卷积滤波ur1=log(nr1); ug1=log(ng1); ub1=log(nb1);tr1=log(mr);tg1=log(mg);tb1=log(mb);yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;alf2=100; %定义标准差alf=a^2/2 a=10.3325x1=floor((n+1)/2);%计算中心for i=1:nfor j=1:na(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf2))/(6*pi*alf2); %高斯函数endendnr2 = imfilter(mr,a,'conv', 'replicate');ng2 = imfilter(mg,a,'conv', 'replicate');nb2 = imfilter(mb,a,'conv', 'replicate');%卷积滤波ur2=log(nr2); ug2=log(ng2); ub2=log(nb2);tr2=log(mr);tg2=log(mg);tb2=log(mb);yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3;alf3=100; %定义标准差alf=a^2/2 a=167l1=floor((n+1)/2);%计算中心for i=1:nfor j=1:ne(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf3))/(4*pi*alf3); %高斯函数endendnr3 = imfilter(mr,e,'conv', 'replicate');ng3 = imfilter(mg,e,'conv', 'replicate');nb3 = imfilter(mb,e,'conv', 'replicate');%卷积滤波ur3=log(nr3); ug3=log(ng3); ub3=log(nb3);tr3=log(mr);tg3=log(mg);tb3=log(mb);yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;cr=im2uint8(dr); cg=im2uint8(dg); cb=im2uint8(db);z=cat(3, cr, cg, cb);pr=z(:, :, 1); pg=z(:, :, 2); pb=z(:, :, 3);%RGB通道pro_ture=0;N=101;for j=1:N %列for i=1:N %行if((pg(i,j)>70)&&(pg(i,j)<80))if((pr(i,j)>10)&&(pb(i,j)>55))pro_ture=pro_ture+1;endendif(pg(i,j)>=80)if((pr(i,j)>45)&&(pb(i,j)>70))pro_ture=pro_ture+1;endendendendx=pro_ture;3. 4 分类器测试:3. 4. 1最小距离分类器4.结果说明4. 1训练参数图 12 训练参数分布图从图上可以看出对于蛋白质的病变识别效果较好,因为表示蛋白质的数据(Y轴上的数据)的间类离散度大,反之,对于血管破裂的情况就比较难区分,表示血液的数据(x轴上的数据)的间类离散度小。