2014-02-28 36 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]);