我正在研究一篇发表在人脸上的头发识别的研究论文,在研究论文中我被困在以下部分:
我们将每个Y,Cb和Cr通道下采样到64级。然后我们可以 构建三维颜色直方图,其中每个维度 有64个箱子。 我们将颜色直方图标准化以便近似 头发颜色可能性分布。
据我所知,我给出了3种不同的直方图,我必须创建一个新的编译直方图,因为我没有在我的项目中使用MATLAB所以我需要找到一种方法来将3种不同的直方图标准化为1,我搜索了很多但没有发现任何东西,有人可以帮我这个。我需要公式或类似的东西来实现这一点, 优选的语言是:
python,C ++
答案 0 :(得分:3)
我怀疑它是3个直方图。听起来更像是你有一个64x64x64值为Y,Cb,Cr的三维数组,每个桶(在那个桶的3D数组中)是有多少人拥有那种特定头发颜色的数量。标准化只是将每个桶除以总计数(您从中获取颜色样本的人数)。 有了这个假设,下面的代码就可以了(我用了16而不是64):
# Initialize 3D array to random counts
import random
cbucket = {}
for y in range(0,16):
for cb in range(0,16):
for cr in range(0,16):
cbucket[ y,cb,cr ] = float(round(random.uniform(0,10)))
# Find total count
tcount = 0
for y in range(0,16):
for cb in range(0,16):
for cr in range(0,16):
tcount += cbucket[ y,cb,cr ]
print("tcount: %6.2f " % tcount)
# now normalize
for y in range(0,16):
for cb in range(0,16):
for cr in range(0,16):
cbucket[ y,cb,cr ] = cbucket[ y,cb,cr ]/tcount