(MATLAB)K均值聚类算法用于图像的分割

(MATLAB)K均值聚类算法用于图像的分割用 MATLAB 实现将 K 均值聚类算法用于图像的分割

目的

道理是这样,但是我们是直接用MATLAB里面的kmeans函数(用 help(‘kmeans’) 可以直接查看kmeans的相关信息),聚类起始点我们并不需要考虑。代码中我们重点关照一下K,最好把不同的K得出的效果放在同一个figure中,这样对比起来效果比较明显。此外,比较有可能影响结果的应该就是模式样本的几何性质了,也就是图片的前景背景的占比,RGB占比等等。(所以建议多试试几张图看看对比)

代码

close all; clear all; clc; k=2; org = imread('test1.png'); %读入图像 figure; subplot(2,2,1); imshow(org),title('原始图像'); %显示原图像 % 接下来需要知道图片的尺寸(长和宽),如若直接对RGB图像进行操作,如下 % [m,n,p]=size(org) %m,n为所求,p=3为通道数 % 或者用下面的这种方法,转化为灰度图再求 gray=rgb2gray(org); [m,n]=size(gray); % 将图像进行RGB——3通道分解 % org(:, :, 1)......分别代表rgb通道 A = reshape(org(:, :, 1), m*n, 1); B = reshape(org(:, :, 2), m*n, 1); C = reshape(org(:, :, 3), m*n, 1); data = [A B C]; % r g b分量组成样本的特征,每个样本有三个属性值,共width*height个样本 % 第二张图 % kmeans第一个参数: N*P的数据矩阵,N为数据个数,P为单个数据维度 res = kmeans(double(data), k); result = reshape(res, m, n); % 反向转化为图片形式 subplot(2,2,2); % label2rgb功能是转换标记矩阵到RGB图像 imshow(label2rgb(result)),title(strcat('K=',num2str(k),'时RGB通道分割结果')); % 显示分割结果 % 第三张图 res = kmeans(double(data), k+1); result = reshape(res, m, n); subplot(2,2,3); imshow(label2rgb(result)),title(strcat('K=',num2str(k+1),'时RGB通道分割结果')); % 第四张图 res = kmeans(double(data), k+2); result = reshape(res, m, n); subplot(2,2,4); imshow(label2rgb(result)),title(strcat('K=',num2str(k+2),'时RGB通道分割结果')); 

结果如下

在这里插入图片描述

如果说非要讨论距离、起始点等因素的话,可以调用kmeans的另一种形式进行实现。如下。具体参数信息依然是用 help('kmeans') 查看。

[...] = kmeans(...,param1,val1,param2,val2,...) 

参数不清楚的可以参考这个链接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213895.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:24
下一篇 2026年3月18日 下午5:24


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号