从颜色直方图生成随机图像的最快方法是什么?

时间:2018-07-13 18:01:15

标签: python image colors pixel pixels

假设我有一个颜色直方图。 python中有一种巧妙的方法可以根据颜色直方图生成随机图像吗?

更具体地说,我想根据颜色直方图的分布生成具有随机颜色的每个像素。

谢谢!

2 个答案:

答案 0 :(得分:4)

numpy.random.choice

来自链接文档的参数:

  

a :一维数组状或整型

     

如果是ndarray,则从其元素生成一个随机样本。如果   int,则生成随机样本,就像a是np.arange(a)

     

大小:整数或整数元组,可选

     

输出形状。如果给定的形状是例如(m,n,k),则m * n * k   抽取样品。默认值为无,在这种情况下,单个值为   返回。

     

替换:布尔值,可选

     

样品是否需要更换

     

p :一维数组状,可选

     

与a中每个条目关联的概率。如果没有给出   样本假定a中所有条目的分布均匀。


参数shape应该是图片的大小,例如(100,100)。参数a应该是分布,参数p应该是直方图生成的分布。

例如,

import numpy as np
bins = np.array([0,0.5,1])
freq = np.array([1.,2,3])
prob = freq / np.sum(freq)
image = np.random.choice(bins, size=(100,100), replace=True, p=prob)
plt.imshow(image)

收益

Random image


要支持多个颜色通道,您有几种选择。这是一种,我们从颜色索引中选择而不是颜色本身:

colors = np.array([(255.,0,0), (0,255,0), (0,0,255)])
indices = np.array(range(len(colors)))
im_indices = np.random.choice(indices, size=(100,100), p=prob)
image = colors[im_indices]

答案 1 :(得分:1)

random.choices可以从加权总体中选择元素。示例:

>>> import random
>>> histogram = {"white": 1, "red": 5, "blue": 10}
>>> pixels = random.choices(list(histogram.keys()), list(histogram.values()), k=25)
>>> pixels
['blue', 'red', 'red', 'red', 'blue', 'red', 'red', 'white', 'blue', 'white', 'red', 'red', 'blue', 'red', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'blue']