2014-02-28 38 views
0

我有一個代表人體皮膚的圖像數據集。 如何繪製HSV色彩空間和YCbCr色彩空間中的膚色分佈。 但是,我想忽略兩個顏色空間中的「值」或「亮度」,並分析其餘層。如何繪製HSV圖像的顏色分佈

以下是我用來繪製YCbCr分佈的代碼,但不明白髮生了什麼。任何人都可以請解釋發生了什麼,以及如何更有效地做到這一點?

chroma = zeros(256); 
cb = imycc(:,:,2); 
cb = reshape(cb, 1, numel(cb)); 
cb = round(cb); 

cr = imycc(:,:,3); 
cr = reshape(cr, 1, numel(cr)); 
cr = round(cr); 

for i = 1:length(cb) 
    chroma(cb(i), cr(i)) = chroma(cb(i), cr(i)) + 1; 
end 
surf(chroma) 
+0

您可以詳細說明「繪製顏色分佈」的含義嗎?什麼是理想的輸出?你可以繪製CB與CR的圖,或者只顯示S的直方圖。取決於你想學的東西...... – chappjc

+0

@chappjc你可以請看看問題中的新變化 – Iamcool

+0

@lamcool我看着你的變化併發布了一個回答。我的回答是幫助還是回答你的問題?當用戶在帖子上投票並接受答案時,該站點起作用。謝謝。 – chappjc

回答

0

您正在製作給定CB-CR組合出現次數的二維直方圖。

一個更快的方式做,這是accumarray

chroma = accumarray([cb(:) cr(:)],1); 

這做同樣的事情作爲你的循環。它爲CB,CR空間中的每個位置添加一個。

該代碼定義了chroma = zeros(256);,可能是因爲輸入圖像爲uint8,值範圍爲[0,255]。如果您想尊重此輸出尺寸,請添加尺寸參數:

chroma = accumarray([cb(:) cr(:)],1,[intmax('uint8')+1 intmax('uint8')+1]);