在 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的小图片,求程序!