颜色矩

颜色矩

一种非常简单而有效的颜色特征使由Stricker和Orengo所提出的颜色矩(color moments) [7]。这种方法的数学基础在于图像中任何的颜色分布均可以用它的矩来表示。此外,由于颜色分布信息主要集中在低阶矩中,因此仅采用颜色的一阶矩(mean)、二阶矩(variance)和三阶矩(skewness)就足以表达图像的颜色分布。与颜色直方图相比,该方法的另一个好处在于无需对特征进行向量化。

一阶颜色矩——均值,反映图像明暗程度
在这里插入图片描述
pij表示第j个像素的第i个颜色通道的值
二阶颜色矩 ——标准差,反映图像颜色分布范围

在这里插入图片描述

三阶颜色矩 ——方差,反映图像颜色分布对称性
在这里插入图片描述

import cv2
import numpy as np
def color_moment(img):
    hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    h,s,v=cv2.split(hsv)
    color_feature=[]
    h_mean=np.mean(h)
    s_mean=np.mean(s)
    v_mean=np.mean(v)
    color_feature.extend([h_mean,s_mean,v_mean])
    h_std=np.std(h)# np.sqrt(np.mean(abs(h - h.mean())**2))
    s_std=np.std(s)
    v_std=np.std(v)
    color_feature.extend([h_std,s_std,v_std])
    h_skewness=np.mean((h-h_mean)**3)
    s_skewness = np.mean((s - s_mean) ** 3)
    v_skewness = np.mean((v - v_mean) ** 3)
    h_skewness=np.sign(h_skewness) * abs(h_skewness) ** (1/3)
    s_skewness = np.sign(s_skewness) * abs(s_skewness) ** (1 / 3)
    v_skewness = np.sign(v_skewness) * abs(v_skewness) ** (1 / 3)
    color_feature.extend([h_skewness,s_skewness,v_skewness])
    return color_feature
def abs_dst(feature1,feature2):
    dst = sum([abs(feature1[i] - feature2[i]) for i in range(len(feature1))])
    return dst
if __name__=='__main__':
    img1=cv2.imread('lena.jpg')
    img2=cv2.imread('test.jpg')
    feature1=color_moment(img1)
    feature2 = color_moment(img2)
    print(abs_dst(feature1,feature2))
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值