1.基于k均值的hsv彩色空间油菜花图像分割
原图
k均值处理之后的效果图
基于k均值hsv彩色空间处理效果图
效果显然可见。
close all; clear all; clc; I_rgb=imread('1.png');%读取一张RGB彩图,此时也可以的当成数据矩阵 %[I_rgb,rect]=imcrop(I_rgb); %裁剪图片 %rectangle('Position',rect,'LineWidth',2,'EdgeColor','r'); %imwrite(I_rgb,'截图原图1.jpg') %保存 imshow(I_rgb); %显示图像 title('原始图像'); %I_hsv=rgb2hsv(I_rgb) %将彩色图像从RGB转化到lab彩色空间 C = makecform('srgb2lab'); %设置格式makecform创建一个颜色转换结构 I_lab = applycform(I_rgb,C); %进行K-mean聚类将图像分割成三个区域 ab = double(I_lab(:,:,2:3)); %取出lab空间的a分量和b分量 nrows = size(ab,1); %得到ab的行的长度 ncols = size(ab,2); %得到ab的列的长度 %reshape函数重新调整矩阵的行数、列数、维数。返回一个(nrows*ncols)*2的矩阵ab %结果ab中元素是按列从右边ab中得到的。如果右边ab中元素个数没有(nrows*ncols)*2个, 则会引发错误。 %K表示将X划分为几类,为整数 %Distance距离测度;sqEuclidean欧氏距离;cluster初始聚类阶段随机选取10%的X的子样本;Replicates聚类重复次数,为整数 ab = reshape(ab,nrows*ncols,2); %改变矩阵的列数和行数,但是数据总个数不变 nColors=3; %分割区域为3 [cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3);% matlab自身有这个算法kmeans 算法 pixel_labels = reshape(cluster_idx,nrows,ncols);%改变矩阵的列数和行数 Idx---N*1的向量,存储的是每个点的聚类标号,center---K*P的矩阵,存储的是K个聚类质心位置 figure(); imshow(pixel_labels,[]), title('聚类结果'
1234567891011121314151617181920212223242526272829