【实例简介】
基于MATLAB彩色图像分割,采用聚类算法,MATLAB工具
(1)利用RGB空间到LAB空间转换公式(1)-(9);
五· Kmean的聚类算法步骤:
(1)读入图像数据,把彩包图像从RGB颜色空间转化到Lab空间。L表示亮度层
色度a表示图像像素落λred-gren轴,色度b*表示图像像素落入bue-ye1low
轴
(2)根据图像颜色分布选取聚类数目p,山于一般图像的主颜色有3-4个,所以选取
k=3
(3)假设图像像素个数为m*n,任取聚类中心C;(i=1,…,3)分别为像素最大值、
最小值、(最大值+最小值)、2,并将图像像素X(jm*n)按照最小距离准则分配
给任个聚类中心,使其满足下式
nix -clb
(4)按照下式修正聚类中心的值,式中q1(i=L,…,3)为某类像素的个数
∑x;ED1X
q
(5)将图像中的全部像素按照新的中心重新聚类,重复(3)(4)直至聚类结果不再
变化
(6)用3种不同颜色标记像素所属类别,牛成颜色聚类索引图
(7)从颜色聚类索引图中选出某一类,将原图像中该类以外其它位置设为0,这样得
到3幅区域分割图像;
8)合并区域分割图与显著图SM。若区域分割图最大程度包含了图像的显著点,则
对该分割图进行目标轮廓提取、膨胀、腐蚀和区域填充等运算形成感兴趣区标记
图,寻找标记图中值为0的像素点,将其在原图中的r、g、b值设为0,从而提
取图像的感兴趣区。
六·改进 Kmean的聚类算法步骤
图像分块理论:凵知图像大小为(320*213,3维),因此图像分块为【行320=16*20,列
(213=3*71)】分块大小为20*71,有3*16-48块。对分块后的图像进行 Kmean运算,计算
方法与上述方法一致,只是图像大小改变
七·实验程序流程图与实验代码:见附录一
开始
开始
读图
提取R、G、B分量
读图
KG空间转换为LAB空间
图傻分块
[燙取a分量组成新短阼A
聚类中心
对每块图像进行RGB
空间转换为LAB空间
设定初始误差上限
迭代次数上限
进行K均伯运算没有达到
对每决图像进行K
均值聚类计算
是否达到迭代次数上限
护接分块图像
计算迭代误差
误差不满足条件
图像边缘处理
选出原图属于同一类的
像素点,将其它点置1/0
显示结果
显示结果
结束
(结束
图1.实验程序流程图
八·实验结果分析与讨论:
为对比改进的K均值聚类算法与传统K均值聚类算法,实验从三个方面来进行验证:聚
类算法运行时间、分块效应、图像分割效果。
1)聚类算法运行时间:K均值算法是一种迭代过程,迭代次数能直接影响收敛速度快
慢,因此自适应的初始化聚类中心能在一定程度上降低算法的收敛速度。
改进型 Kmean算法图像分12块传统 Kmean算法
迭代3次数所需时间|14.8004 seconds
113. 324301 seconds
迭代15次数所需时间40.303625 seconds
144.801367 seconds
表1.对比不同迭代次数需要的时间
图像分48块
图像分12块
图像分3块
迭代3次数所需时间14.46503
14.229365
21.305810 seconds
seconds
seconds
迭代15次数所需时间1.195131
10.976963
18. 703379 seconds
seconds
seconds
表2.对比相同迭代次数图像分不同大小需要的时间
(2)图像分割效果
①·传统K均值聚类算法的对比(均迭代15次
利用灰度图像特性,将分割结果显示在一嘔图像中:
图2.分割结果显示在一幅图像
分割区域
分割区域二
分割区域三
图3.图像没有分块,聚类中心随机选择
利用传统的聚类算法对图像分割结果如图3,可以将图像分割为天空,背景,目标,从
分割效果看,可以实现彩色图像分割,但是分割后图像目标出现很多不连续点,可以进行区
域生长技术对结果进行优化。
分割区域
分害区域二
分割区域三
昏
图4.图像没有分块,聚类中心选择最大值、最小值、(最大值+最小值)
②·改进K均值聚类算法的对比(迭代次数为3):
分割区域
分割区域二
分割区域三
可
藏学馨
图5.图像分为48块,大小为20*71
将图像先分为48块后进行聚类运算,分割结果不理想,图像出现很多空白区域,因为
图像分割的太小,每一小块的聚类中心几乎都不一样,运算结果也会不一样,最后拼接图像
时,会出现严重的块效应现象。
分割区域一
分割区域二
分割区域三
图6.图像分为12块,大小为80*71
分割区域一
分割区城二
分割区城三
图7.图像分为3块,大小为320*71
改变图像分块大小,依然会出现分块现象,这与聚类中心的选择有密切关系。分块太小
分割效果,不好,产生很多离散区域;分块太大,会产生快效应。
九·实验心得
刚开始编写程序的时候,不知道怎么显示聚类结果,认为需要将分割后的LAB彩色信
息分量转换到RGB,将图像进行复原处理。尝试编与出现,发现遇到的困难很多,LAB怎么
转换到RGB空间,因为转换公式都是近似的,那么在不断转换图像时会有失真现象。后来认
为只要记录图像的空间坐标信息就可以解决问题,尝试编程后,达到预期效果。另外,怎么
在一幅图像中显示分割的三个结果也是一个问题,起初给三个聚类区域分别赋予0、125
255三个数,结果只有黑白,后来在知道 matlab中图像灰度值只有0-1的范围。
应用iat如b的cat函数减少了操作量。由于时间有限,木实验只是对特定的一幅图像
且大小必须为(320*213)进行了分割对比,应该多进行几个对照实验实验,完善实验结论
聚类方法的鲁棒性不好,只能适用于某一些特定的场合,限定了图像的大小,对」一般
的变换多样的条件表现出有限的能力(对比不同图像分割能力)。
扩展思维:分割在其他变换域效果如何?还需要进行验证
参考文献:
《彩色图像处理关键技术研究》韩晓微20050101,东北大学
《视觉注意计算模型的研究及其应用》陈嘉威指导老师周昌乐20090104
《彩色图像分割方法综述》马英辉,韩焱中北大学山西无损检测技术工程中心2005111
《彩色图像分割方法的研究与实现》王婷婷山尔大学20050501
《基于视觉注意机制的感兴趣区域提取方法》安福定,何东健西北农林科技大学201201
附录一:
(1)对图像没有分块,聚类中心随机选择;
file name- input(请输入图像文件路径:','s);
I rgb= imread (file name)
Irgb-im2 double(Irgb);%双精度
R=lrgb(∷,;1)
G=Irgb(:,;,2)
B=Irgb(:,:,3)
LM, N= size(r)
T=0.008856;
RGB=reshape(R,, s): reshape(G, 1, s): reshape(b, 1, s)
MAT=[0.4124530.3575800.180423;0.2126710.7151600.072169;0.0193340.119193
950227]
XY7=MAT半RGB
Ⅹ=XYZ(1,:)/0.950456
Y-XYZ(2,;)
Z=XYZ(3,:)/1.088754
XT=X> T
ZT
fX-XT.*K.(1/3)+(XT),*(7.787,*X+16/116)
Y3=Y.^(1/3
rY=YT.*Y3+(YT),*(7.787.*Y+16/116);
1.=YT.*(116*Y3-16.0)+(YT).*(903.3米Y)
Z=T.*Z.(1/3)+(ZT).*(7.787.*Z+16/116)
a=500*(fX-fY)
b=200*(fY-fZ)
L- reshape(L, M, N)
a= reshape(a, M, N)
reshape(b, M, N)
》>aa= reshape(a,MN,1);%转换成一维数组,需在∵维计算欧式距离,所以没必要转为一维
空间
bb=reshape(b, M=\, 1)
A=Laa bb
Ln, p]-size(a)
k=3
center=ones(k, pI1)
A
+1)=(
为A多出来一列存储数据
for i=l: k
center(i,: =A(i,:
为选择A的前三个作为聚类中心
old= center;%仔储旧的聚类中心,与之后的做比较
for i=l: n
for j=l: k
dist(i, j)=sum((A(i,: )-center(j: )).2
dist(i,: )
A(i,p+1)-ind;%存储下标
en
counter=o
counter12=0
counter13=0;%计算每个聚类中心有多少元素
for i-1: M*N
if A(i, p1)==1
counterll=counterll+1
center(1,: =A(i,: )+center(1,:
f a(
nterl2=counterl2+l
center(2,: ) -A(i,: )+center(2,
fA(i,p+1)=-3
counterl3=counter 13+1
center(3,:)=A(i,;)+ center(3,:);%属」一个聚类中心的数据进行叠加,
center(1,: )=center(1,: )/counterll
center(2,:)= center(2,:)/ counter12;%属于一个聚类中心的数据,重新计算聚类中心
center(3
center
(3,: )/counter13
forw=1:15%最大迭代次数为15次
fo
eror=sum(( center(i,:)-old(i,;)).2);%计算迭代误差
if error o. 000001
else
for t=l: n
dist(t, j)-sgrt(sum((A(t,: )-center(j,: )) 2)
en
m, ind]=min(dist(t,: )
A(t,p+1)=ind;%存储下标
counter21=0
counter22=0
counter23=0
for i=1: M:N
Lf A(i, pI1)=1
counter21=counter21-1
center(1,: ) -A(i,: )+center(1,:
if A(i, p+1)-2
counter22=counter 22+l
center (2,: =A(i,: )+center(2,
end
fA(i,p+1)=3
counter23- countcr23+1
center (,: =A(i,: ) center(3,
end
en
center(1,: ) =center(1,: )/counter21
center(2,: )=center(2,: counter22
center(3,: =center(3,: /counter23
end
A1-A;‰%显小结果
A2=A;
A3=A
A4-A
A5=A
A6=A
fork=1:M米N
irA1(k,p+1)=1
A1(k,1:2)=1;%0背景用黑色表示。1背景用白色
en
Al=reshape(al(:, 1),M, N): %a Fl
fork=1:M水N
fA2(k,p+1)
A2(k,1:2)=1;
end
A2-reshape(A2(:, 1), M, N)
for k=l: KN
if A3(k, pI1)=3
A3(k,1:2)=1;
end
A3=reshape(A3(:, 1),M, N)
for k=1: M:+N
【实例截图】
【核心代码】