我有一个包含10000个RGB三元组的表和另一个具有相应颜色名称的表。但是唯一颜色名称的数量只有10.现在我想使用这两个表为给定图像创建一个10-bin直方图。我使用scarest的NearestNeighbors为此学习。这是我的代码的一部分:
rgb_matrix = np.asarray(joblib.load('rgb-matrix.pkl'))
rgb_colors = np.asarray(joblib.load('rgb-colors.pkl'))
color_list = []
for i in xrange(len(rgb_colors)):
color = rgb_colors[i]
if color not in color_list:
color_list.append(color)
nbrs = NearestNeighbors(n_neighbors=4,algorithm='ball_tree').fit(rgb_matrix)
rgb_arr = input_image.reshape(-1,3)
color_arr = nbrs.kneighbors(rgb_arr)[1] # No of nearest neighbours is set to 4
color_index = np.asarray(color_arr[:,0]) # Get the top color index
hist = np.zeros(10)
for i in xrange(len(color_index)):
hist[color_list.index(rgb_colors[color_index[i]])] += 1.0
但是这个循环使得这个过程非常缓慢。有没有办法在这里使用np.histogram?