图像分割(image segmentation)matlab实现

利用k-means算法对cherry.jpg和dog.jpg两图RGB模式的图像按颜色进行分割,并显示分割结果。此处使用matlab自带的kmeans函数。

补充知识:RGB模式的图像读入后为m*n*3的数组,记这个数组为a,则a(:, :, 1)为颜色通道R上的取值矩阵,a(:, :, 2)为颜色通道G上的取值矩阵,a(:, :, 3)为颜色通道B上取值矩阵。图像中位于第i行第j列的像素点的颜色为a(i, j, :),它包括a(i, j, 1),a(i, j, 2),a(i, j, 3),分别是在3个颜色通道上的颜色取值,这些取值共同决定一个像素点显示为什么颜色。

完整代码如下:mo_2_3.m3. 图像分割matlab实现源代码

分割的原图如下:

dog.jpg

cherry,jpg

img=imread('./dog.jpg');
%img=imread('./cherry.jpg');
subplot(2,3,1);
imshow(img);
C = makecform('srgb2lab');       %设置转换格式
img_lab = applycform(img, C);

ab = double(img_lab(:,:,2:3));    %取出lab空间的a分量和b分量
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

nColors = 3;        %分割的区域个数为3
[cluster_idx cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3);  %重复聚类3次
pixel_labels = reshape(cluster_idx,nrows,ncols);
subplot(2,3,2);
imshow(pixel_labels,[]), title('聚类结果');


%显示分割后的各个区域
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);

for k = 1:nColors
    color = img;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
end
subplot(2,3,3);
imshow(segmented_images{1}), title('分割结果——区域1');
subplot(2,3,4);
imshow(segmented_images{2}), title('分割结果——区域2');
subplot(2,3,5);
imshow(segmented_images{3}), title('分割结果——区域3');

 分割结果:

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子树下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值