当前位置:文档之家› 图像预处理、图像特征提取、分类判决

图像预处理、图像特征提取、分类判决

设计实现方案以及原理
 (一)图像预处理模块设计:
本设计选用的待识别医学图片是中国图形图象网站提供的脑核磁共振图、肝超声图、肝CT图、膝关节X线图各一张,非医学图像是一张彩色海报图,分别以mr.jpg,bchao.jpg,ct.jpg,x.jpg,及color.jpg存储。
在实际应用中,我们的系统获取的原始图像并不是完美的,例如对于系统获取的原始图像,由于图像成像过程中存在各种环境因素影响,如噪声、光照等原因,,使图像成像出现了一定的失真,所以需要进行预处理,以有利于提取我们所需要的信息。图像的预处理包括图像增强、滤波、边缘锐化等内容,它既可以在空间域实现,也可以在频域内实现。在设计实现中,这个阶段尤为重要,如果这阶段处理不好,后面的工作就根本无法展开。
 (1)直方图修正
许多图像的灰度值是非均匀分布的,其中灰度值集中在一个小区间内的图像是很常见的。直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的变换算法。通过直方图均衡化的图像对二值化阈值选取十分有利.一般来说,直方图修正能够提高图像的主观质量。
以图像X.jpg为例(预处理过程中其他图像经过同样的处理变换)
代码段:
RGB=imread('x.jpg');
i=rgb2gray(RGB);
j=histeq(i);
subplot(1,2,1)
imshow(i);
subplot(1,2,2)
imshow(j);
figure
subplot(1,2,1)
imhist(i,64)
subplot(1,2,2)
imhist(j,64)
 (2)去除干扰噪声
在实际中获得的图像一般都因为受到某种干扰而含有噪声,噪声产生的原因决定了它的分布特性及它和图像信号的关系。图像的噪声都对应于傅立叶变换的高频部分,所以理论上能够让低频信息畅通无阻而同时又能滤掉高频分量的低通滤波器就能平滑图像,去除噪声。但是同时,低通滤波器又会对图像造成一定程度的细节上的模糊,因此在实际中通常采用自适应滤波器(维纳滤波)来实现对噪声的自适应滤除。Wiener2函数根据图像的局部方差来调整滤波器的输出。当局部方差大时,滤波器的平滑效果较弱。
代码段:
I=Imread(’x.jpg’);
J =rgb2gray(I );
J=double(J);
J = wiener2(J);
Imshow(J,[])
(3)调整图像灰度值
使用对比度调整函数imadjust()既可以增强或者减弱图像的对比度,还可以对图像的灰度范围进行映射,这对于图像识别是必不可少的处理。
代码段:
I=Imread(’x.jpg’);
J =rgb2gray(I );
K=imadjust(J,stretchlim(J),[0 1]);
figure,imshow(K)
( 4 )图像边缘锐化
图像在传输和转换过程中,由于图像的的传输或转换系统的传递函数对高频成分的衰减

作用,造成其细节轮廓不清晰。为了补偿图像的轮廓,使图像中各部分的边界清晰化,采用拉氏算子滤波对图像进行锐化。拉氏算子较适用于改善因光线的漫反射造成的图像模糊。
代码段:
I=Imread(’x.jpg’);
J =rgb2gray(I );
J=double(J);
Imshow(J,[ ])
h=[0 1 0;1 -4 1; 0 1 0];
L=conv2(K,h,’same’);
K=J-L;
Figure
Imshow(K,[])

(二)图像的特征提取模块设计
图象的特征可以分为自然特征和人工特征两种。前者可以由图像的视觉表现来确定,而后者则是对图像进行专门处理和测量的结果。不管是哪种特征,它都是具有某种分布特性的属性,如颜色、面积、欧拉数、边界周长、特定形状等。适当地选择特征非常重要,因为在识别对象时它是唯一的依据。特征提取则是对模式所包含的输入信息进行处理和分析,将不易受随机因素干扰的信息作为该模式的特征提取出来。提取的过程是去除冗余信息的过程,具有提高识别精度,减少运算量和提高运算速度的作用。良好的特征应具有4个特点:
①区别性:对于属于不同分类的样本来说,其特征应含有不同且具有意义的值。不同模式类别的特征之间有差别,且差别越大越好。
②可靠性:对于所有同一分类的所有样本来说,特征应具有类似的值。同一模式类别中不同模式的特征应接近,且越接近越好,受随机因素干扰较小。
③独立性:所使用的特征间应该彼此互不相关。
④数目小:图像模式识别系统的复杂度随其维数(使用特征的数目)增加而快速增加。更重要的是,训练分类器与评估其效率所需的样本数随特征数增加而呈指数增加。

(1)基于不变矩方法的图像特征提取算法
一个与平面区域有关的几何特性如大小,位置,方向及形状等,其中很多特性与矩这个参数有关。在概率论中,矩用来呈现概率密度函数的特性,而不变矩是指物体图像经过平移,旋转以及比例变换仍保持不变的矩特征量。
矩的提取:将区域内部的像素作为质点,像素的坐标作为力臂,从而以各阶矩的形式来表示区域形状特征的一种矩描绘子。设图形各像素的质量为l,即l—像素的质量就等于它的像素值。S为图形面积;i,j为图形内像素的坐标,则矩的公式可表示为:


上式中,M为不同p,q值下的图形的矩;P=0,1,2,…;f(i,j)相当于一个像素的质量,当p,q取值不同,可得阶数不同的矩。
二维图形的几个关键特征都直接与矩有关,不变矩法则因为不受被识别目标大小,位置,方位的影响而在图像特征提取方面得到了广泛的应用。它由于概念清晰,识别率稳定及对具有旋转和缩放变化的目标有良好

的不变性及抗干扰性,从而能有效地反映图像的本质特征。在不变矩的实际计算过程中,不同的医学图像的不变矩数值分布范围非常大。而在识别过程中,如果不变矩特征值愈小,对识别结果的贡献就愈小;如果不变矩特征值愈大,对识别结果的贡献就愈大。在医学图像中,由于核磁共振和CT图的图像形状比较清晰,因此选取不变矩作为特征

(2)基于欧拉数的图像特征提取算法
在对图像拓扑进行估计时,经常会用到一个量——欧拉数。所谓欧拉数,就是一幅图像中的对象数目减去该图像中的孔洞的数目。在模式识别中,经常会利用欧拉数进行聚类分析,该分析方法是一种非常有效的方法。同样,针对医学图像呈现的孔洞数目之间的区别,也可以采用基于欧拉数的图像特征提取算法。
在matlab图像处理工具箱中提供了专门的bweuler函数,用于计算二进制图像的欧拉数。在利用bweuler函数进行欧拉数计算的时候,要注意该函数只支持4连通和8连通两种邻域连通方式。以下程序代码段说明了该函数在8连通邻域方式下使用的情况。
代码段:
I=Imread(’x.jpg’);
J =rgb2gray(I );
Eul=bweuler(J,8)
在实际运行中,如果eul是一个负数,则是表明孔洞的数目大于对象的数目;反之亦然。
(3)基于面积熵的特征提取
面积熵基于图象中各个连接区域面积大小的统计,对于连通区域Si来说,设其包含Ni个’1’,而图像中’1’的总数为N个,Si面积熵Li定义为:
Pi=Ni/N;
Li=-Pi×logPi;
图像的平均面积熵L为:
L=∑Li=∑-Pi×logPi
由上式可知,若一幅图像具有很多个小面积区域组成,则其面积熵的值较大;若一幅图像有较大面积的色块,而小面积区域基本很少的情况下,其面积熵较小;提高logPi的阶次会使结果差异性更大,L=∑Li=∑-Pi×(logPi)n。但在某些情况下,面积熵不适合作为图像识别的特征,例如图像中既有大面积色块,又有相对不少的小面积区域。对于B超图像而言,其图像纹理较多较小,灰度变化缓慢,也没有大范围的色块,因此可以将图像的连通区域的面积熵作为B超图像的特征。

(三)分类器模块的设计
(1)高斯图像模式类别的贝叶斯分类器
a.贝氏分类器:设某一个图像模式x来自Wi类的概率为P(Wi|x),另外假设一个分类器判定某个图像模式来自Wj,但事实上它来自Wi所造成误判的损失为Lij。因此,将因像模式Wi归类为类别Wj的平均损失为:

M为类别总数,据贝叶斯公式上式又可改写为:

因为P(x)为常数,与类别无关,所以:

决策时,对一输入图像模式:计算所有的平均损失ρ1(x),ρ2(x),…,ρM(x),井选择具有

最小平均损失的类别当做x的归属。
具有0~1失真损失的贝氏分类器相当于采用决策函数:
Dj(x)=P(x|Wj)P(Wj),j=1,2,…,M
b.高斯图像分类器:
当P(x|Wj)是高斯分布时,即

贝叶斯判决函数可化为: Dj(x)=-1/2*ln|Cj|-1/2[(x-mj)TCj-1(x-mj)]
其中,mj和cj为第j类图像模式的平均向量与协方差矩阵。
在本次设计中,先将标准医学图库中的mr脑核磁共振图,肝b超声图,ct肝图,等图像进行边界提取,并计算出各自的七个不变矩Xj=[Фj];将待判别图形的七个不变矩向量x=[Фi],i=1,2,..7,输入高斯图像分类器中,计算Dj(x),取Dj(x)最大值,则该图形即可判定成第j类,以此来识别mr脑核磁共振图,肝b超声图,ct肝图。

(二)基于面积熵的线性分类器设计
线性分类器是指两类决策域的界面方程是单个线性方程。它的决策面为超平面。在实现时,有不止一种正态分布概率模型,可使最小错误率贝叶斯决策的决策面具有超平面形式。这里我们讨论其中一种情况。
(1)Σi=σ2I i=1,…,c
这种情况与上一种情况不同之处在于并不要求各类的先验概率相等这个条件。在这种情况下,判别函数可以简化为
(1)
(1)是X的二次函数,但是由于二项XTX与类别号i无关,因此判别函数可进一步简化成
(2) 
其中
(3)
(4) 
可见判别函数为一线性函数。根据决策面方程gi(X)-gi(X)=0可有
(5)
利用 及
代入(5)并整理,可得
WT(X-X0)=0 (6)
其中
W=μi-μj
(7)
由(6)与(7)式可以看出,决策面为一超平面,其法线方向为(μi-μj),当P(ωi)=P(ωj)时该超平面过(μi+μj)/2点,在二维情况下,就是过μi与μj连线的垂直平分线。当P(ωi)≠P(ωj)时,该超平面的位置要向远离先验概率大的方向偏,但超平面方向不变。
在这里,基于面积熵的线性分类器的线性判别函数是图像所选取的特征量的组合。设它的组合系数为Wi,W0为阈值,对于M类问题,其任一类i的线性判别函数为: Di(x)= ∑WiXi+W0; 边界方程为: Dj(x)- Di(x)=0
在进行面积熵的特征识别时,选取面积为特征向量,面积熵函数就是线性判别函数,即
Di(x)= ∑-Pi×(logPi)n
将各类图像的面积熵按式L=∑Li=∑-Pi×(logPi)n计算,
根据面积熵检测图像的原理, Dj(x)大于阈值时Wb,则说明该图像为超声图像
(三)判别x线图像的基于灰度图像的分类器
x线图像的灰度等级数目很少,表现在灰度直方图上的断带。而且x线图物体周围出现较多的白色光晕,可通过截取背景图将其求取出来,此时的统计就是背景图中白色光晕的像素

数目S,物体的边界长度即白色光晕的内边界长度L,比值Dj(x)=S/L就是此时的分类器,Dj(x)大于阈值Wx时,说明该图像为x线图。


模块流程图及程序代码
1. 对是医学图像还是一般的彩色图像作出判断
代码:

i1=imread('image');
i2=imread('image1');


H=his_h(i1);
H1=H;

H=his_h(i2);
H2=H;


h1_mean=mean(H1); %原先图象是三维矩阵y*x*z,其中H分量是二维矩阵y*x,对H进行一次求均值后,得到一维矩阵y ,h1_mean
h2_mean=mean(H2);

h1_2mean=mean(h1_mean);
h2_2mean=mean(h2_mean);

if h1_2mean==0
disp('此图象是医学图像');
subplot(1,2,1)
imshow(i1);
title('此图象是医学图像');
else
disp('此图象不是医学图像');
subplot(1,2,1)
imshow(i1);
title('此图象不是医学图像');
end

if h2_2mean==0

subplot(1,2,2)
imshow(i2);
title('此图象是医学图像');
else
subplot(1,2,2)
imshow(i2);
title('此图象不是医学图像');
end


2,四种医学图像的直方图分析
代码:
i=imread('image');
j=rgb2gray(i);
subplot(2,2,1)
imshow(i)
subplot(2,2,2)
imshow(j);
subplot(2,2,3)
imhist(j);







(一)基于灰度图像的X线图识别程序
















流程图:


















代码:
(1)figure
I1=imread(‘image’);
J1=rgb2gray(I1);
a=find_posib200(J1);
subplot(1,2,1)
imshow(I1)
if a>=0.15
title('图象是X光线图')
else
title('图象不是X光线图')
end

(2)实现a:
function a=find_posib200(image)

[y,x]=size(image);
m=y;
n=x;
count200=0;
for i=1:m
for j=1:n
if image(i,j)>200
count200=count200+1;
end
end
end
a=count200/(m*n)
end


(4)基于面积熵的B超图像识别程序
代码:
function L=tell_bchao(imag); %返回面积平均熵L
i1=rgb2gray(imag); %将图像转换为灰度图
bg=imopen(i1,strel('disk',15));
i2=imsubtract(i1,bg); %将原图进行开运算提取背景并从原图中减去背景
i3=imadjust(i2,stretchlim(i2),[0 1]);%对比度增强
level=graythresh(i3);
bw=im2bw(i2,level); %图像二值化
[labeled,numobjects]=bwlabel(bw,4); %标记图像连通区域
idata=regionprops(labeled,'basic');%得到图像连通区域的属性值矩阵
iarea=[idata.Area]; %得到图像连通区域的面积属性
min_area=min(iarea);
max_area=max(iarea);
n_sum=sum(numobjects); %图像的总面积
% n_sum=sum(iarea);
if max_area>100*min_area
iarea=iarea(iarea>100*min_area);
end
p=iarea/n_sum;
logn=(-log2(p)).^2; %面积熵计算
h=p*logn'; %面积平均熵计算
disp('面积熵');
disp(h)
if h>4.0000
disp('图象是B超图')
else disp('图象不是B超图')
end

流程图:见纸上



(三)基于图象外部轮廓的图象识别程序
流程图






















代码:


function [invariancematrix]=invariance(image,size_order,rotate)
X=image;
[F_x,F_y]=size(X);
F=imresize(X,[fix(F_x*size_order) fix(F_y*size_order)]);
F=imrotate(F,rotate);


%此段实现平均值的计算
[F_x,F_y]=size(F);

F_xsum=sum(F,2);
temp=1:F_x;
temp=temp';
%mean_temp=temp.*F_xsum;
%mean_x=sum(mean_temp)/sum(sum(F));

F_ysum=sum(F,1);
temp=1:F_y;
temp=temp';
mean_temp=temp.*F_ysum';
mean_y=sum(mean_temp)/sum(sum(F));
%此段实现协方差
for p=0:3
for q=0:3
r(p+1,q+1)=(p+q)/2+1;
x=1:F_x;
x=x-mean_x;
x=x.^p;
y=1:F_y;
y=y-mean_y;
y=y.^q;
u_temp=x'*y;
u(p+1,q+1)=sum(sim(u_temp.*F));
end
end
n=u./u(1,1).^r;
%%图像不变矩的求取
invariancematrx(1,1)=log10(abs(n(3,1)+n(1,3)));
invariancematrx(1,2)=log10(abs(n(3,1)-n(1,3)).^2+4*n(2,2).^2);
invariancematrx(1,3)=log10(abs(n(4,1)-3*n(2,3)).^2+(3*n(3,2)-n(1,4)).^2);
invariancematrx(1,4)=log10(abs((n(4,1)+n(2,3)).^2+(n(3,2)+n(1,4)).^2));
invariancematrx(1,5)=log10(abs((n(4,1)-3*n(2,3))*(n(4,1)+n(2,3))*(n(4,1)-n(2,3)).^2-3*(n(3,2)+n(1,4)).^2)+(3*n(3,2)-n(1,4))*(n(3,2)+n(1,4))*((3*n(4,1)+n(2,3)).^2-(n(3,2)+n(1,4)).^2));
invariancematrx(1,6)=log10((n(3,1)-n(1,3))*((n(4,1)+n(2,3)).^2-(n(3,2)+n(1,4)).^2)+4*n(2,2)*(n(4,1)+n(2,3))*(n(3,2)+n(1,4)));
invariancematrx(1,7)=log10(abs((3*n(3,2)-n(1,4))*(n(4,1)+n(2,3))*((n(4,1)+n(2,3)).^2-3*(n(3,2)+n(1,4)).^2)+(3*n(2,3)-n(4,1))*(n(3,2)+n(1,4))*((3*n(4,1)+n(2,3)).^2-(n(3,2)+n(1,4)).^2)));
end

相关主题
相关文档 最新文档