在 MATLAB 中为分割的图片分配颜色

Posted

技术标签:

【中文标题】在 MATLAB 中为分割的图片分配颜色【英文标题】:Assigning colors to segmented pictures in MATLAB 【发布时间】:2017-01-12 10:18:31 【问题描述】:

我正在使用 MATLAB 处理颜色分割。我使用了基于 this 文档的 k-means 聚类,并在代码方面做到了这一点;

global imgRGB;
global imgLAB;
img = imgRGB;

cform = makecform('srgb2lab');
imgLAB = applycform(img, cform);
ab = double(imgLAB(:,:,2:3));
rows = size(ab,1)
cols = size(ab,2);
ab = reshape(ab, rows*cols, 2);
cluster = 5;
[idx center] = kmeans(ab, cluster, 'distance', 'sqEuclidean', 'Replicates', 5);
label = reshape(idx, rows, cols);
figure; imshow(label, []);
imgSeg = cell(5);
rgb_label = repmat(pixel_labels, [1 1 3]);
for k=1:cluster
    color = img;
    color(rgb_label ~= k) = 0;
    imgSegk = color;
end
figure; 
imshow(imgSeg1);

我将图像作为输入,这就是它被定义为全局的原因。

对于像链接中的彩色图像,它会产生灰度输出。

我认为它会将灰色调指定为颜色,但我需要为每个集群指定一种颜色。我的意思不是灰色调,而是一种颜色。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

当直接显示标签时,您应该为您的图形使用不同的colormap

试试:

figure; 
imshow(label, []);
colormap( rnad(max(imgSeg1(:))+1, 3) ); % use random color map

但是,如果您希望将 pixel_labels 转换为 RGB 图像(每个像素 3 个颜色通道),您希望使用 ind2rgb(而不是将标签复制到所有通道)。将rgb_label = repmat(pixel_labels, [1 1 3]); 替换为

rgb_label = ind2rgb(pixel_labels, rand(max(pixel_labels(:)),3));

【讨论】:

很抱歉没有奏效。我应该在代码的其他地方使用颜色图函数吗? 不,仍然无法正常工作。我想知道是不是因为这条线; rgb_label = repmat(pixel_labels, [1 1 3]);

以上是关于在 MATLAB 中为分割的图片分配颜色的主要内容,如果未能解决你的问题,请参考以下文章

利用matlab将一张图片分割成10×10的小图片,求程序!

利用matlab如何将一幅图片按尺寸分割成若干小图片

是否可以在 Matlab 中的 3d 灰度数组的 CIELAB 颜色空间中使用 k 均值聚类进行分割?

matlab前景分割

人脸检测与matlab实现matlab优化算法六

pytorch torchvision 图像分割 使用不同的颜色显示过分割与欠分割