如何训练python函数返回我想要的结果?

时间:2013-05-16 18:43:57

标签: python machine-learning python-imaging-library

我正在研究的问题是,我希望以相当合理的确定程度检测图像是黑色还是黑色。我已经编写了代码来获取颜色直方图,下一步是编写一个函数,它将获取(r,g,b)元组并给我一个bool,指示它是黑色还是接近它。这可能不是100%准确,但最好是误报误报。

def average_image_color(i):
    h = i.histogram()

    # split into red, green, blue
    r = h[0:256]
    g = h[256:256*2]
    b = h[256*2: 256*3]

    # perform the weighted average of each channel:
    # the *index* is the channel value, and the *value* is its weight
    return (
        sum( i*w for i, w in enumerate(r) ) / sum(r),
        sum( i*w for i, w in enumerate(g) ) / sum(g),
        sum( i*w for i, w in enumerate(b) ) / sum(b))

我有一组测试图像,我可以用作语料库。什么是最好的图书馆/方法?

我希望训练的功能类似于

def is_black(r, g, b):
    if magic_says_black():
        return True
    return False

1 个答案:

答案 0 :(得分:1)

由于您只关心亮度,因此将图像转换为灰度会更容易,因此您只需使用一个通道而不是三个通道。

然后你有很多选择:

  • 如果平均像素强度高于经验确定的阈值,则图像大部分为黑色;
  • 计算超过某个阈值的像素数
  • 如果您有足够的示例图像,请使用灰度直方图训练分类器(如SVM)(这似乎是使用大锤来敲碎核桃)。您会在scikit-learn package中找到大量的分类器。