matlab图像按颜色分割代码
时间: 2023-11-02 10:37:04 浏览: 48
以下是Matlab的图像按颜色分割的示例代码:
%% 读取图像
img = imread('example.jpg');
figure, imshow(img);
%% 分割图像
% 将RGB图像转换为HSV图像
hsvImg = rgb2hsv(img);
% 获取图像的H、S、V通道
h = hsvImg(:,:,1);
s = hsvImg(:,:,2);
v = hsvImg(:,:,3);
% 选择分割颜色的范围
hMin = 0.55;
hMax = 0.8;
sMin = 0.5;
sMax = 1;
vMin = 0.5;
vMax = 1;
% 使用阈值分割图像
mask = (h >= hMin) & (h <= hMax) & (s >= sMin) & (s <= sMax) & (v >= vMin) & (v <= vMax);
% 显示分割结果
figure, imshow(mask);
%% 填充内部空洞
% 获取填充结构体元素
se = strel('disk', 5);
% 填充内部空洞
mask = imfill(mask, 'holes');
% 显示填充结果
figure, imshow(mask);
%% 获取分割区域
% 获取连通区域
cc = bwconncomp(mask);
% 获取每个区域的像素数
numPixels = cellfun(@numel, cc.PixelIdxList);
% 获取像素数最大的区域
[biggestSize, biggestIdx] = max(numPixels);
% 创建一个与原图像大小相同的全黑图像
mask2 = false(size(mask));
% 将像素数最大的区域填充为白色
mask2(cc.PixelIdxList{biggestIdx}) = true;
% 显示结果
figure, imshow(mask2);
%% 应用分割结果
% 将分割结果应用到原图像上
result = img;
result(repmat(~mask2, [1 1 3])) = 0;
% 显示结果
figure, imshow(result);
以上代码将读取名为example.jpg的图像,并将其转换为HSV图像。然后,使用阈值分割来选择指定颜色范围内的像素。接下来,使用imfill函数填充内部空洞,并获取像素数最大的连通区域。最后,将分割结果应用到原始图像上并显示结果。