matlab 彩色图片分解,MATLAB 彩色图像分割

【实例简介】

基于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

【实例截图】

【核心代码】

你可能感兴趣的:(matlab,彩色图片分解)