2017-02-09 18 views
1

Я хочу измерить среднюю интенсивность пикселей и показатель цветопередачи изображения. Для этого я слежу этот подход (любезно дайте мне знать, есть ли альтернативный подход к такой же):Изображение Пиксельная интенсивность и измерение цветности в Python

а) Вычислить средний Pixel Интенсивность:

im = Image.open('images-16.jpeg') 
stat = ImageStat.Stat(im) 
r,g,b = stat.mean 
mean = sqrt(0.241* (r ** 2) + 0.691* (g ** 2) + 0.068* (b ** 2)) 
print(mean) 

б) Для измерения красочность:

  • Разделив цветовое пространство в 64 кубических блоков с четырьмя равными перегородками по каждому измерению

    w,h=im.size  
    bw,bh = 8, 8 #block size 
    img = np.array(im) 
    sz = img.itemsize 
    shape = (h-bh+1, w-bw+1, bh, bw) 
    strides = (w*sz, sz, w*sz, sz) 
    blocks = np.lib.stride_tricks.as_strided(img, shape=shape, strides=strides) 
    print (blocks[1,1]) 
    
  • Вычислить евклидовы расстояния между геометрическими центрами С я каждого куба я Not able to compute (say d(a,b)=rgb(Ca)-rgb(Cb))

  • D1 Распределение генерируется как распределение цвета гипотетического изображения таким образом, что для каждой из 64 точек выборки, то частота 1/64 -

    pixels = im.load() all_pixels = [] for x in range(218): #put your block width size for y in range(218): #your block heigh size cpixel = pixels[x, y] all_pixels.append(cpixel)

  • D2 Распределение вычисляется из заданного изображения путем нахождения частоты встречаемости цвета в пределах каждого из 64 кубиков How can i do this?

  • Вычислить Earth Mover's Distance: (D1,D2,d(a,b)) - д (а, б) рассчитывается выше

Это правильный способ сделай это? Какие-либо подтверждающие документы для этого? Любая помощь с кодом оценивается. Благодарю.

+0

Для начала я бы объединил r, g, b в яркость для каждого пикселя * перед * вычислением среднего значения. Используйте правильную гамму '** 2.2' и' ** (1/2.2) 'вместо' ** 2' и 'sqrt'. И не забудьте сначала разделить эти значения пикселей на 255. –

+0

@MarkRansom уверен, что попробует ... и для измерения цветности? –

+0

Извините, если бы у меня был совет по цвету, я бы оставил правильный ответ. –

ответ

0

Вам понадобится библиотека pyemd.

from pyemd import emd 
import numpy as np 
from PIL import Image 
import skimage.color 

im = Image.open("t4.jpg") 
pix = im.load() 

h1 = [1.0/64] * 64 
h2 = [0.0] * 64 
hist1 = np.array(h1) 

w,h = im.size 

for x in xrange(w): 
    for y in xrange(h): 
     cbin = pix[x,y][0]/64*16 + pix[x,y][1]/64*4 + pix[x,y][2]/64 
     h2[cbin]+=1 
hist2 = np.array(h2)/w/h 

# compute center of cubes 

c = np.zeros((64,3)) 
for i in xrange(64): 
    b = (i%4) * 64 + 32 
    g = (i%16/4) * 64 + 32 
    r = (i/16) * 64 + 32 
    c[i]=(r,g,b) 

c_luv = skimage.color.rgb2luv(c.reshape(8,8,3)).reshape(64,3) 

d = np.zeros((64,64)) 

for x in xrange(64): 
    d[x,x]=0 
    for y in xrange(x): 
     dist = np.sqrt(np.square(c_luv[x,0]-c_luv[y,0]) + 
        np.square(c_luv[x,1]-c_luv[y,1]) + 
        np.square(c_luv[x,2]-c_luv[y,2])) 
     d[x,y] = dist 
     d[y,x] = dist 


colorfullness = emd(hist1, hist2, d) 

print colorfullness 

 Смежные вопросы

  • Нет связанных вопросов^_^