番茄果实在成熟的时候有红色和青色的果实,将番茄植株图像通过kmeans聚类分割,分割出红色果实、青色果实和叶片、背景。
%彩色图像分割
clear;
clc;
set(0,'defaultfigurecolor','w') %图片背景显示白色
I_rgb = imread('自己的图片位置'); %读取文件数据
figure();
imshow(I_rgb); %显示原图
title('原始图像');
%将彩色图像从RGB转化到lab彩色空间
C = makecform('srgb2lab'); %设置转换格式
I_lab = applycform(I_rgb, C);
%进行K-mean聚类将图像分割成3个区域
ab = double(I_lab(:,:,2:3)); %取出lab空间的a分量和b分量
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 3; %分割的区域个数为3
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3);
%重复聚类3次,聚类参数设置为'distance'距离,'sqEuclidean'欧式距离(默认时,采用此距离方式)
%'Replicates'聚类重复次数
pixel_labels = reshape(cluster_idx,nrows,ncols);
figure();
imshow(pixel_labels,[]), title('聚类结果');
%显示分割后的各个区域
segmented_images = cell(1,3);%cell中的4表示4个区域
rgb_label = repmat(pixel_labels,[1 1 3]);
for k = 1:nColors
color = I_rgb;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
end
figure(),imshow(segmented_images{1});
% title('区域1');
figure(),imshow(segmented_images{2});
% title('区域2');
figure(),I=imshow(segmented_images{3});
imwrite(segmented_images{2},'./1.png');
% title('区域3');
% %当盆与植株颜色过于接近时需要分为4个区域
% figure(),imshow(segmented_images{4}), title('分割结果——区域4');
% subplot(221),imshow(segmented_images{1}), title('区域1');
% subplot(222),imshow(segmented_images{2}), title('区域2');
% subplot(223),imshow(segmented_images{3}), title('区域3');
% %当盆与植株颜色过于接近时需要分为4个区域
% subplot(224),imshow(segmented_images{4}), title('区域4');