纯白色对颜色直方图的影响

时间:2017-03-27 20:39:32

标签: python opencv image-processing colors histogram

我正在尝试使用KNN方法根据人脸照片将人们分类为种族。我在纯白色背景上有一个面部数据集[255,255,255]。

作为Feed输入,我使用的是颜色直方图的值。有人告诉我应该从直方图中删除背景颜色,以提高KNN的性能。

问题:当我从照片中创建一个忽略背景的蒙版时,直方图不会改变一点点。

问题:我对色彩理论不太了解,纯白色会对色彩直方图的形状产生影响吗?当我使用仅居中的常规遮罩(如下图所示)时,直方图会发生变化。

Constructed mask - no change to histogram

这是我从图片构建的面具,忽略了背景

Simple mask - changes histogram

用于测试蒙版应用正确性的简单蒙版

Original image

直方图计数的源图像

Original and constructed mask histogram 这是我从图片中得到的直方图,没有任何遮罩,也是我构造的遮罩,也忽略了白色。

Simple mask histogram 这是我使用简单的蒙版从裁剪图片中获得的直方图。直方图变化,因此我想我的直方图计数方法是正确的。

直方图计数代码:

# loop over the image channels
for (chan, color) in zip(channels, colors):
    # create a histogram for the current channel and
    # concatenate the resulting histograms for each channel
    hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, bin_amount])

    # plot the histogram
    plt.plot(hist_full, color=color)
    plt.xlim([0, bin_amount])

plt.show()

创建面具的代码:

    mask = np.zeros(image.shape[:2], np.uint8)
    # simple mask option
    # mask[75:175, 75:175] = 255


    # create a mask to ignore white background in the histogram
    for row in range(0, len(image)):

        for col in range(0, len(image[0])):

            if (image[row][col] != np.asarray(prop.background)).all():
                try:
                    mask[row][col] = 255
                except IndexError:
                    print(col)

1 个答案:

答案 0 :(得分:3)

请参阅:http://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html

重要部分:

  

Python:cv2.calcHist(images,channels,mask,histSize,ranges [,hist [,accumulate]])→hist

     

参数:......   ranges - 每个维度中直方图bin边界的dims数组的数组。当直方图是均匀的(均匀=真)时,则对于每个维度i,足以指定第0个直方图区间的下部(包括)边界L_0和上部(不包括)边界U _ {\ texttt {histSize} [ i] -1}表示最后一个直方图bin histSize [i] -1。

尝试更改代码的这一部分

hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, bin_amount])

如下

hist_full = opencv.calcHist([chan], [0], mask, [bin_amount], [0, 256])

您需要在图片中指定实际值的范围(不包括上边界)。 最有可能的是,现在您只计算值0-63并忽略直方图中的64-255。