如何绘制HSV图像的颜色分布

时间:2014-02-28 17:30:03

标签: matlab image-processing

我有一个代表人体皮肤的图像数据集。 如何在HSV颜色空间和YCbCr颜色空间中绘制肤色分布。 但是,我想忽略两个颜色空间中的“值”或“亮度”并分析其余的层。

以下是我用来绘制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)

1 个答案:

答案 0 :(得分:0)

您正在制作给定CB-CR组合出现次数的二维直方图。

更快的方法是使用accumarray

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

这和你的循环一样。它为CB,CR空间中的每个位置添加一个。

代码定义chroma = zeros(256);可能是因为输入图像为uint8,值为[0,255]。如果要尊重此输出大小,请添加size参数:

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