我有一个代表人体皮肤的图像数据集。 如何在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)
答案 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]);