2017-04-02 47 views
0

比方說,我有一個球的形象像this one如何將圖片分爲顏色組?

ball

我想球的顏色分離的顏色組。在這種情況下,我應該有2個主要顏色組 - 「棕色」和「白色」。 「棕色」組將具有所有棕色像素,「白色」組將具有全部白色像素。 我正在使用matlab來完成這項任務。我想要做的方式是:

  1. 看看RGB通道。我用scatter來看看我是否可以清楚地看到一些組,但是我沒有。
  2. 來看看拜爾價值。但是也看不到任何羣體。
  3. 運行邊緣檢測器。然後,在每個封閉的區域,我會找到像素的平均值。將具有相似平均值(在特定閾值內)的區域將屬於同一組。它似乎有點工作,但在許多情況下,它沒有
  4. 任何其他的想法?
+0

有許多基於顏色的圖像分割方法,你可以使用kmeans [示例](https://www.mathworks.c OM /幫助/圖像/示例/色基分割-使用-k均值-clustering.html)。搜索谷歌更多。 – user2999345

+0

要多少組要分開您的照片?總是2? –

+0

查看相關的QA:[RGB值基本顏色名稱](http://stackoverflow.com/a/37476754/2521214),以便輕鬆入侵,但基本上您想要執行基於顏色的分割。它與洪水填充類似,但當基於2個閾值(絕對和相對)的任何一種顏色離開始點顏色或其鄰居太遠時停止。由於您需要投資回報率,因此您可以直接填寫/標註原始圖片。 – Spektre

回答

0

這個任務被稱爲分段,在你的情況下,每種顏色都是一個段,段並不總是連續的。

搜索Matlab的分割示例應該會產生很多代碼示例和定理。

請注意,有一件事情,沒有地面真相的解決方案,你不能說每個圖像有多少段,因爲這是主觀問題。在一般情況下,您可以對顏色值運行聚類算法,這會將圖像分解爲顏色分段,還有一些算法會自動查找分組的數量 - 這對於圖像中顏色組的數量是一個很好的開端。

快速搜索得到這些作品,它們可以讓你開始的想法:

Image segmentation with matlab

Using EM for image segmentation

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