用K-means聚类实现图像分割matlab代码
时间: 2023-11-26 13:04:44 浏览: 98
下面是一个简单的用K-means聚类实现图像分割的Matlab代码:
```matlab
% 读入图像
I = imread('image.jpg');
% 将RGB图像转换为HSV图像
HSV = rgb2hsv(I);
% 获取亮度通道
V = HSV(:, :, 3);
% 将V通道重塑为一个列向量
V = reshape(V, [], 1);
% 使用K-means聚类算法将像素分为2类
[idx, C] = kmeans(V, 2);
% 将聚类结果重塑为与原图像相同的大小
idx = reshape(idx, size(V, 1), size(V, 2));
% 将聚类结果可视化
segmented_image = zeros(size(I));
segmented_image(:, :, 1) = uint8(idx == 1) .* I(:, :, 1);
segmented_image(:, :, 2) = uint8(idx == 1) .* I(:, :, 2);
segmented_image(:, :, 3) = uint8(idx == 1) .* I(:, :, 3);
% 显示原图像和分割结果
subplot(1, 2, 1), imshow(I), title('Original Image');
subplot(1, 2, 2), imshow(segmented_image), title('Segmented Image');
```
在这个例子中,我们首先将RGB图像转换为HSV图像,并提取亮度通道。然后我们将亮度通道重塑为一个列向量,并使用K-means聚类算法将像素分为2类。最后,我们将聚类结果可视化并显示原始图像和分割结果。
阅读全文