是的当然。这可以使用k-means 聚类来完成。您可以阅读有关imread
和的信息kmeans
。官方文档中给出的示例kmeans
正是您所需要的。
例如,如果您想将您的图像聚类到 5 个云中:
%// Read the image
I = imread('clouds.png');
[y, x] = find(I); %// Obtain all coordinates
y = size(I, 1) - y + 1; %// Adjust y-coordinates
K = 5;
[idx, c] = kmeans([x, y], K); %// Classify clouds into K clusters
现在idx
存储相应的簇索引并c
存储质心的坐标。
要绘制结果,您可以执行以下操作:
%// Plot results
figure, hold on
scatter(x, y, 5, idx) %// Plot the clusters
plot(c(:, 1), c(:, 2), 'r+') %// Plot centroids
text(c(:, 1) + 10, c(:, 2), num2str((1:K)'), 'color', 'r') %// Plot cluster IDs
请注意,此方法需要预先确定簇的数量K
。或者,您可以使用此工具尝试自动检测集群的数量。
编辑:由于版权声明,我删除了生成的图像。