创建标准化直方图

时间:2015-01-13 07:01:42

标签: python image-processing histogram

我正在研究一篇发表在人脸上的头发识别的研究论文,在研究论文中我被困在以下部分:

  

我们将每个Y,Cb和Cr通道下采样到64级。然后我们可以   构建三维颜色直方图,其中每个维度   有64个箱子。 我们将颜色直方图标准化以便近​​似   头发颜色可能性分布。

据我所知,我给出了3种不同的直方图,我必须创建一个新的编译直方图,因为我没有在我的项目中使用MATLAB所以我需要找到一种方法来将3种不同的直方图标准化为1,我搜索了很多但没有发现任何东西,有人可以帮我这个。我需要公式或类似的东西来实现这一点, 优选的语言是:

  

python,C ++

1 个答案:

答案 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