【问题标题】:Creating a normalized histogram创建标准化直方图
【发布时间】:2015-01-13 07:01:41
【问题描述】:

我正在撰写一篇关于人脸毛发识别的研究论文,在研究论文中我被困在以下部分:

我们将 Y、Cb 和 Cr 通道中的每一个下采样为 64 个级别。然后我们可以 构建一个三维颜色直方图,其中每个维度 有 64 个垃圾箱。 我们将颜色直方图归一化以近似 头发颜色似然分布。

据我理解这个陈述,我得到了 3 个不同的直方图,我必须创建一个新的编译直方图,因为我没有在我的项目中使用 MATLAB,所以我需要找到一种方法来将 3 个不同的直方图标准化为1,我google了很多,但一无所获,有人可以帮我解决这个问题。我需要公式或类似的东西来实现这个, 首选语言是:

python、C++

【问题讨论】:

  • 那么你的作品发表了吗?还是您能够成功识别头发?
  • 我已经成功地从图像中分割出头发,但实施了一些涉及头发概率模型并排除了 YCrCb 模型 @Hayro 的其他方法。
  • 它是已发表的作品还是可以阅读的地方?我想了解更多相关信息
  • 不,我已经在应用程序中实现了该算法,该算法目前仅在印度发布,基本上该应用程序会从你的脸上创建一个漫画生物。

标签: python image-processing histogram


【解决方案1】:

我怀疑它是 3 个直方图。听起来更像是您有一个 64x64x64 的 Y、Cb、Cr 值的 3 维数组,其中每个桶(在桶的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多