Python中图像像素的强度和色彩度量
我想测量图像的平均像素强度和色彩的度量。 为此,我遵循这种方法(请让我知道是否有任何替代方法相同):
a)计算平均像素密度:
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)
b)测量色度:
将色彩空间划分为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])
计算每个立方体的几何中心Ci之间的欧几里德距离i 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)
通过查找64个立方体中每个立方体的颜色出现频率,从给定的图像计算分布D2。 How can i do this?
Earth Mover's Distance: (D1,D2,d(a,b))
- d(a,b) 这是做到这一点的正确方法吗? 任何支持文件来实现这一目标? 任何有关代码的帮助表示赞赏。 谢谢。
你将需要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
链接地址: http://www.djcxy.com/p/89781.html
上一篇: Image Pixel Intensity and Measure of Colourfulness in Python