如何将图片分成颜色组?

时间:2017-04-02 06:13:41

标签: algorithm matlab image-processing

我们说我有像this one这样的球的形象:

ball

我想将球的颜色与颜色组分开。在这种情况下,我应该有2个主要颜色组 - "棕色"和"白色"。 "褐色"组将具有所有棕色像素和"白色"组将具有所有白色像素。 我使用matlab完成这项任务。我想做的方式是:

  1. 查看RGB通道。我使用scatter来查看是否可以清楚地看到某些群组,但我没有。
  2. 看看拜耳瓦尔斯。但是也看不到任何团体。
  3. 运行边缘检测器。然后,在每个封闭区域中,我将找到像素的平均值。具有相似平均值(在特定阈值内)的区域将属于同一组。它似乎有点工作,但在很多情况下它并没有
  4. 还有其他想法吗?

2 个答案:

答案 0 :(得分:0)

此任务称为细分,在您的情况下,每种颜色都是细分,细分并不总是连续的。

搜索Matlab的分段示例应该会产生很多代码示例和定理。

注意一件事,没有基本事实解决方案,你不能说每个图像有多少段,因为它是主观问题。在一般情况下,您可以对颜色值运行聚类算法,这会将图像分解为颜色段,有一些算法可以自动找到组的数量 - 这可以是图像中颜色组数量的良好开端。

快速搜索产生了这些作品,他们可以为您提供想法:

Image segmentation with matlab

Using EM for image segmentation

答案 1 :(得分:0)

虽然图像分割是处理分色的正确方法,但如果你的图像很简单,你可以试着用它来做暴力。

此处,转换为HSV会更容易处理图像。

对于图像的白色部分:

I=imread('ball.jpg');
H=rgb2hsv(I);
% separate dimensions
h=H(:,:,1);
s=H(:,:,2);
v=H(:,:,3);

% color conditions
v(v<0.8 | s>0.7 | h>0.7 )=NaN;
h(isnan(v))=NaN;
s(isnan(v))=NaN;

% convert image back
W=cat(3,h,s,v);
White_image=hsv2rgb(W);
figure; imagesc(White_image);

enter image description here

对于棕色部分:

% separate dimensions
h=H(:,:,1);
s=H(:,:,2);
v=H(:,:,3);

% color conditions
v(s<0.6 | v>0.8 )=NaN;
h(isnan(v))=NaN;
s(isnan(v))=NaN;

% convert image back
B=cat(3,h,s,v);
Brown_image=hsv2rgb(B);
figure; imagesc(Brown_image); axis off

enter image description here