首先读取图片数据,转化成矩阵格式:
from PIL import Image
import numpy as np
def getimage(path = path):
#path为需要读取图片的路径
img = Image.open(path)
M,N = img.size
r,g,b = img.split()
rd = np.asarray(r)
gd = np.asarray(g)
bd = np.asarray(b)
return rd,gd,bd
分别计算一二三阶颜色矩:
#r通道的一阶颜色矩
rd_1 = rd.mean()
#r通道的二阶颜色矩
rd_2 = rd.std()
#r通道的三阶颜色矩
#定义一个求三阶颜色矩的函数
def var(x=None):
mid = np.mean(((x - x.mean()) ** 3))
return np.sign(mid) * abs(mid) ** (1/3)
批量求一个文件夹下所有图片的各阶颜色矩:
import os
def getimagedata(path=path):
filename = os.listdir(path)
n = len(filename)
data = np.zeros([n,9])
for i in range(n):
img = Image.open(path+'\\'+imagenames[i])
M,N = img.size
r,g,b = img.split()
rd = np.asarray(r)
gd = np.asarray(g)
bd = np.asarray(b)
data[i,0] = rd.mean();data[i,1] = gd.mean();data[i,2] = bd.mean()
data[i,3] = rd.std();data[i,4] = gd.std();data[i,5] = bd.std()
data[i,6] = self.var(rd);data[i,7] = self.var(gd);data[i,8] = self.var(bd)
return data