Как рассчитать расчетное совместное распределение вероятностей для красного и зеленого пикселей только в PNG-изображении? - PullRequest
3 голосов
/ 25 января 2012

У меня есть изображение в формате png, содержащее только красный и зеленый каналы.Я удалил синий канал с изображения для целей расчета.Мне нужно рассчитать предполагаемое совместное распределение вероятностей для этих пикселей.Я сталкивался с этой функцией: numpy.random.multivariate_normal (mean, cov [, size]), но эта вычисляет известное распределение.Мне нужно рассчитать предполагаемое распределение.Какие-либо предложения?Большое спасибо.Areej

Ответы [ 2 ]

4 голосов
/ 26 января 2012

легко объединить данные в набор гистограмм

#2d histogram gives you the counts, in each cell
(H,redEdges,greedEdges) = numpy.histogram2d(
    red.ravel(),green.ravel(),
    bins=nbins
)

#divide by the total to get the probability of 
#each cell -> the joint distribution
Prg = H/H.sum()

#sum over the `green` axis to get the `red` marginal (nx1)
Pr = H2d.sum(1)[:,numpy.newaxis]
#sum over the `red` axis to get the `green` marginal (1xn) 
Pg = H2d.sum(0)[numpy.newaxis,:]

Оттуда взаимная информация проста:

#calculate information contribution of each bin
dIrg = Prg*numpy.log(Prg/(Pr*Pg))
#filter nans and sum
Irg = dIrg[~numpy.isnan(dIrg)].mean()
0 голосов
/ 26 января 2012

Используя scipy, есть ряд распределений, которые вы можете подогнать под данные.Вот пример того, как это сделать, если вы загружаете свое изображение из файла .png или .jpg или связанного с ним файла:

from PIL import Image
import numpy
import scipy.stats as ss

im = numpy.array(Image.open("myfile.png")
red = im[:,:,0]
green = im[:,:,1]

from matplotlib import pyplot
pyplot.hist(red.ravel())
pyplot.hist(green.ravel())

# if your data follow a normal distribution
print "red mean: %g  sigma: %g" % ss.norm.fit(red.ravel())
print "green mean: %g  sigma: %g" % ss.norm.fit(green.ravel())

Если вы хотите другой дистрибутив, замените norm выше на одиниз них: http://docs.scipy.org/doc/scipy/reference/stats.html

...