Matlab K均值图像分割


title: Matlab K均值图像分割
tags: 机器学习
category: matlab

参考

https://ww2.mathworks.cn/help/images/ref/imsegkmeans.html

代码如下

%% 使用纹理和空间信息改进 k 均值分割


% 将图像读入工作区。减小图像大小以使示例运行得更快。
RGB = imread('turtle.png');
RGB = imresize(RGB,0.5);


% 使用 k 均值聚类将图像分割成两个区域。
L = imsegkmeans(RGB,2);
B = labeloverlay(RGB,L);


% 使用每个像素邻域中的纹理信息来补充图像。要获取纹理信息,请使用一组 Gabor 滤波器对图像的灰度版本进行滤波。
% 创建一组 Gabor 滤波器(包含 24 个),覆盖 6 个波长和 4 个方向。
wavelength = 2.^(0:5) * 3;
orientation = 0:45:135;
g = gabor(wavelength,orientation);


% 将图像转换为灰度。
I = im2gray(im2single(RGB));


% 使用 Gabor 滤波器对灰度图像进行滤波。以蒙太奇方式显示 24 个滤波后的图像。
gabormag = imgaborfilt(I,g);


% 对每个滤波后的图像进行平滑处理以消除局部变化。以蒙太奇方式显示平滑处理后的图像。
for i = 1:length(g)
    sigma = 0.5*g(i).Wavelength;
    gabormag(:,:,i) = imgaussfilt(gabormag(:,:,i),3*sigma); 
end


% 用空间位置信息补充关于每个像素的信息。此额外信息让 k 均值聚类算法能够在分组时优先考虑空间上相近的像素。
%获取输入图像中所有像素的 x 和 y 坐标。
nrows = size(RGB,1);
ncols = size(RGB,2);
[X,Y] = meshgrid(1:ncols,1:nrows);


% 串联有关每个像素的强度信息、邻域纹理信息和空间信息。
% 对于此示例,特征集使用强度图像 I,而不是原始彩色图像 RGB。特征集省略了颜色信息,因为狗毛的黄色与图块的黄色相似。颜色通道无法提供足够多有关狗和背景的差异信息来进行清晰的分割。
featureSet = cat(3,I,gabormag,X,Y);


% 使用 k 均值聚类基于补充特征集将图像分割成两个区域。
L2 = imsegkmeans(featureSet,2,'NormalizeInput',true);
C = labeloverlay(RGB,L2);
imshow(C)
title('带有附加像素信息的标记图像')
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宁静_致远_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值