假设我有一个颜色直方图。 python中有一种巧妙的方法可以根据颜色直方图生成随机图像吗?
更具体地说,我想根据颜色直方图的分布生成具有随机颜色的每个像素。
谢谢!
答案 0 :(得分:4)
来自链接文档的参数:
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)
收益
要支持多个颜色通道,您有几种选择。这是一种,我们从颜色索引中选择而不是颜色本身:
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']