基于 K-means 聚类算法的图像区域分割系统主要由两部分组成,分别是登录界面和主界面。用户登录模块负责用户的登录功能,用户输入账号和密码正确后,进入主界面,失败则跳出弹窗,提示用户登录失败。这是用户运行程序的第一个界面,下一个界面是主界面。主界面主要是三个模块,分别是左方控制模块,右方显示模块,下方显示和功能模块。左方控制模块有打开图像和自动运行运行两个按钮,下方可以自定义聚类个数,并能够再最后运行在下方axes7中输出。右方显示模块,可以在打开图像后显示原图,在点击运行后显示聚类个数分别为2,3,4,5,6的聚类图像。下方在点击打开图片后能够输出图片路径。右下方是保存结果和退出系统功能,保存结果能够保存程序运行的结果,退出系统会弹出弹窗询问是否退出,点击确认则退出系统。

在这里插入图片描述
系统模块图
在这里插入图片描述
自动运行模块

%计算样本空间和聚类中心C的距离
%X:样本空间, nXp数组
%C:聚类中心, kXp数组
%method:距离公式
%varargin:其他参数
%D:每个点到聚类中心的欧式距离,
function D=sampledist(X,C,method,varargin)
[n,p]=size(X);
K=size(C,1);
%初始化距离矩阵
D=zeros(n,K);
switch lower(method(1))
	%循环计算到聚类中心距离
    case 'e'
        for i=1:K
            D(:,i)=(X(:,1)-C(i,1)).^2;
            for j=2:p
                D(:,i)=D(:,i)+(X(:,j) - C(i,j)).^2;
            end
        end
    case 'c'
        for i=1:K
            D(:,i)=abs(X(:,1) - C(i,1));
            for j=2:p
                D(:,i)=D(:,i) + abs(X(:,j) - C(i,j));
            end
        end
end

自定义运行聚类

%从img图像中提取特征向量,包括颜色、距离和纹理等
%img:图像数组,可以是灰度或彩色的
%vec:像表占些征向量
function vec=exactvecotr(img)
[m,n,~]=size(img);
%初始化特征向量,一个像素对应一个特征
vec=zeros(m*n,3);
%将图像转换到特定的颜色空间
img=double(img);
%循环构建像素点特征向量
for j=1:n
for i=1:m
	 %颜色特征
        color=img(i,j,:);
        dist=[];
        texture=[];
		%组成特征向量
        vec((j-1)*m+i,:)=[color(:);dist(:);texture(:)];
    end
end

https://github.com/MeetNiceMe/matlab

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐