close all
%% 读入图像
picture=imread('原图.jpg'); %读入原图
figure,imshow(picture);
%% 转换色彩空间;利用彩色空间转换函数把图像从RGB色彩空间转换到L*a*b色彩空间。
cform=makecform('srgb2lab'); %色彩空间转换,rgb空间转换成L*a*b*空间结构
L_AB=applycform(picture,cform); %将i中的颜色值转换到颜色变换结构cform指定的颜色空间,692*1024*3
%% 进行K-mean聚类
ab=double(L_AB(:,:,2:3)); %取出lab空间的a分量和b分量。。二维(692*1024)*2
hang=size(ab,1); %获取ab的行数,1为行
lie=size(ab,2); %获取矩阵的列数,2为列
ab=reshape(ab,hang*lie,[]); %转化为nrows行ncols列的矩阵到ab
ncolors=4; %分割的区域个数为8
[cluster_idx cluster_center]=kmeans(ab,ncolors,'distance','sqEuclidean','Replicates',3);%重复类聚三次,避免局部最小值
%% 用k均值聚类算法对图像像素标记
pixel_labels=reshape(cluster_idx,hang,lie); %矩形形状改变
figure,imshow(pixel_labels,[]);
%% 生成图像的色彩分割图,既是显示分割后的各个区域
% 把生成的图片保存下来,以从中间寻找合适的图片给finial_2.m使用。
segmented_images=cell(1,3); %细胞形数组
rgb_label=repmat(pixel_labels,[1 1 3]); %矩阵平铺
for k=1:ncolors %显示出分块后的图片
color=picture;
color(rgb_label~=k)=0;
segmented_images{k}=color;
imwrite(segmented_images{k},[num2str(k) '.jpg']);
figure,imshow(segmented_images{k});
end
- 1
- 2
- 3
- 4
- 5
- 6
前往页