颜色特征提取

  • 颜色直方图
    • 一般颜色直方图 cv2.calcHist
    • 全局累加直方图 np.cumsum()
    • 主色调直方图
    • 总结
  • 颜色矩
  • 颜色聚合向量
  • 颜色相关图

图像特征是指可以对图像的特点或内容进行表征的一系列属性的集合,主要包括图像自然特征(如亮度、色彩、纹理等)和图像人为特征(如图像频谱、图像直方图等)。

图像特征提取根据其相对尺度可分为全局特征提取和局部特征提取两类。全局特征提取关注图像的整体表征。常见的全局特征包括颜色特征、纹理特征、形状特征、空间位置关系特征等。局部特征提取关注图像的某个局部区域的特殊性质。一幅图像中往往包含若干兴趣区域,从这些区域中可以提取数量不等的若干个局部特征。

  • 特征特点
  1. 代表性(可区分性)
  2. 稳定性
  3. 独立性

颜色特征是比较简单但是应用较广泛的一种视觉特征。颜色特征往往和图像中包含的对象或场景相关。与其他图像特征相比,颜色特征对图像的尺寸、方向、视角变化的依赖性较小,即相对于图像的尺寸、方向、视角变化具有较好的健壮性。

目前使用的颜色特征主要包括颜色直方图、颜色矩、颜色集、颜色聚合向量以及颜色相关图

颜色直方图

颜色直方图用于描述图像中像素颜色的数值分布情况,可以反映图像颜色的统计分布和图像的基本色调。颜色直方图仅可表征图像中某一颜色值出现的频数,无法描述图像像素分布的空间位置信息。

任意一幅图像都能唯一给出一幅与它对应的颜色直方图,但不同的图像可能有相同的颜色直方图,因此直方图与图像存在一对多的关系。

一般颜色直方图 cv2.calcHist

颜色直方图是最基本的颜色特征,它反映的是图像中像素颜色值的组成分布,即出现了哪些颜色以及各种颜色出现的概率。假设s(xi)为图像F中某一特定颜色xi的像素个数,则xi像素出现的频率为:

整个图像F的一般颜色直方图可以表示为:H(F)=[h(x1),h(x}xb2),…,h(xn)]

  • 方法说明

cv2.calcHist(image,channels,mask,histSize,ranges)
参数说明:
1、image:原始图像,需要[]括起来
2、channel:通道编号,需要[]括起来
3、mask:掩膜图像,当统计全局图像,值设为None,统计局部图像的直方图,需要使用到它
4、histSize:表示直方图的灰度级数,例如[0,255]一共256级
5、range:表示像素值范围[a,b],表示a到b
6、accumulate:表示累计标识,默认False,如果设为True,则直方图在开始计算时不会被清零,计算的是多个直方图的累积结果,用于对一组图像计算直方图。参数可选

import matplotlib.pyplot as plt
import cv2 as cv
from skimage import data
img = data.coffee()
hist0 = cv.calcHist([img],[0],None,[256],[0,255])
hist1 = cv.calcHist([img],[1],None,[256],[0,255])
hist2 = cv.calcHist([img],[2],None,[256],[0,255])

全局累加直方图 np.cumsum()

当图像中的颜色值不能取遍所有可能的颜色值时,一般颜色直方图中就会出现一些零值。这些零值的出现会影响相似性的度量,进而会使计算出的相似度不能准确反映图像之间的颜色分布差异。
为了弥合一般颜色直方图法的上述缺陷,在一般直方图方法的基础之上,通过对直方图元素进行累加,消除零值影响,形成全局累加直方图。

img = data.coffee()
hist0 = np.cumsum(cv.calcHist([img],[0],None,[256],[0,255]))
hist1 = np.cumsum(cv.calcHist([img],[1],None,[256],[0,255]))
hist2 = np.cumsum(cv.calcHist([img],[2],None,[256],[0,255]))
plt.figure(figsize=(6,6))
plt.plot(range(256),hist0,label = 'R')
plt.plot(range(256),hist1,label = 'G')
plt.plot(range(256),hist2,label = 'B')
plt.legend()
plt.title("累积直方图")

主色调直方图

在一幅图像中,不同颜色值出现的概率不尽相同,且通常情况下少数几种颜色就能涵盖整幅图像的主色调。基于该思想,主色调直方图法会计算出图像中每种颜色出现的频率,选择出现频率最高的几种颜色并将其作为主色调。

总结

  • 优点

计算简单,对图像的平移和旋转变换不敏感,能简单描述图像中颜色的全局分布情况。

  • 缺点

无法捕捉(即会丢失)颜色组成之间的空间位置关系。

颜色矩

矩是非常重要的统计量,用于表征数据分布的特点。在统计中,一阶矩表示数据分布的均值,二阶矩表示数据分布的方差,三阶矩表示数据分布的偏移度。

图像的颜色矩用于对图像内的颜色分布进行表征,是比较重要的一种全局图像特征表示。图像的颜色矩特征提取时主要瞄准图像颜色矩中的一阶矩、二阶矩和三阶矩,对于图像而言,这3种统计特征已经足以表达数字图像的颜色分布。相对于颜色直方图特征提取,颜色矩特征提取的优点是无须对颜色特征进行提前量化。

  • 原理

对于数字图像P,其一阶颜色矩的定义为:

其中Pij表示数字图像P的第i个图像通道的第j个像素的像素值,N表示图像中像素的个数。

二阶颜色矩的定义为:

三阶颜色矩的定义为:

其中一阶矩可以表征该颜色通道的平均响应强度,二阶矩可以表示该颜色通道的响应方差,三阶矩可以表征该颜色通道数据分布的偏移度。针对彩色图像,图像的颜色矩一共有9个分量,每个颜色通道均有3个低阶矩。

def color_comment(img):r,g,b = cv.split(img)color_featrue = []# 一阶矩r_mean = np.mean(r)g_mean = np.mean(g)b_mean = np.mean(b)# 二阶矩r_std = np.std(r)g_std = np.std(g)b_std = np.std(b)#三阶矩r_offset = (np.mean(np.abs((r - r_mean)**3)))**(1./3)g_offset = (np.mean(np.abs((g - g_mean)**3)))**(1./3)b_offset = (np.mean(np.abs((b - b_mean)**3)))**(1./3)color_featrue.extend([r_mean,g_mean,b_mean,r_std,g_std,b_std,r_offset,g_offset,b_offset])return color_featrue
print(color_comment(img))

[158.5690875, 85.794025, 51.48475, 62.9728671221504, 60.958103707650785, 52.93569362069574, 73.2849737717244, 69.97427088321201, 67.60422322535385]

颜色矩的特点:图像的颜色矩有9个分量(3个颜色通道,每个通道上3个低阶矩);与其他颜色特征相比非常简洁;分辨力较弱;颜色矩一般和其他特征结合使用,可以起到缩小范围的作用。

颜色聚合向量

参考

针对颜色直方图和颜色矩无法表达图像色彩的空间位置的缺点,有人提出了图像的颜色聚合向量。

其核心思想是将属于颜色直方图的每个颜色量化区间的像素分为两部分,如果该颜色量化区间中的某些像素占据的连续区域的面积大于指定阈值,则将该区域内的像素作为聚合像素,否则作为非聚合像素。

颜色聚合向量可表示为<(α1,β1),(αn,βn)>,其中αi与βi分别代表颜色直方图的第i个颜色量化区间中的聚合像素和非聚合像素的数量。颜色聚合向量除了包含颜色频率信息外,也包含颜色的部分空间分布信息,因此其可以获得比颜色直方图更好的表示效果。

  • 步骤

1、量化

颜色聚合向量算法的第一步与求普通的颜色直方图类似,即对图像进行量化处理。一般采用均匀量化处理方法,量化的目标是使图像中只保留有限个颜色区间。

2、连通区域划分

针对重新量化后的像素值矩阵,根据像素间的连通性把图像划分成若干个连通区域。

3、判断聚合性

统计每个连通区域中的像素数目,根据设定的阈值判断该区域中的像素是聚合的,还是非聚合,得出每个颜色区间中聚合像素和非聚合像素的数量αi和βi。

4、 聚合向量形成

图像的聚合向量可以表示为〈(α1,β1),(αn,βn)〉

颜色相关图

颜色相关图是图像颜色分布的另外一种表达方式。颜色相关图不仅可以显示像素在图像中的占比,也可以反映不同颜色对间的空间位置的相关性。颜色相关图利用颜色对间的相对距离分布来描述空间位置信息。

  • 原理

颜色相关图是一张用颜色对<i,j>索引的表,其中<i,j>的第k个分量表示颜色为c(i)的像素和颜色为c(j)的像素之间的距离等于k的概率。设I表示整张图像的全部像素,Ic(i)表示颜色为c(i)的所有像素,则图像的颜色相关图可以表达为:

|p1-p2|表示像素p1和p2之间的距离

def is_vaild(X,Y,point): #判断像素分布点是否超出图像范围,超出返回Falseif point[0] < 0 or point[0] >= X:return Falseif point[1] < 0 or point[1] >= Y:return Falsereturn Truedef getNeighbors(X,Y,x,y,dist):  # 输入图片的一个像素点的位置,返回它的8邻域cn1 = (x+dist,y+dist)cn2 = (x+dist,y)cn3 = (x+dist,y-dist)cn4 = (x,y-dist)cn5 = (x-dist,y-dist)cn6 = (x-dist,y)cn7 = (x-dist,y+dist)cn8 = (x,y+dist)point = (cn1,cn2,cn3,cn4,cn5,cn6,cn7,cn8)Cn = []for i in point:if is_vaild(X,Y,i):Cn.append(i)return Cndef corrlogram(img,dist):xx,yy,tt = img.shapecgram = np.zeros((256,256),np.uint8)for x in range(xx):for y in range(yy):for t in range(tt):color_i = img[x,y,t]   # X的某一个通道的像素值neighbors_i = getNeighbors(xx,yy,x,y,dist)for j in neighbors_i:j0 = j[0]j1 = j[1]color_j = img[j0,j1,t]   #X的某一个邻域像素点的某一个通道的像素值cgram[color_i,color_j] +=  1  #统计像素值i核像素值j的个数return cgram
crgam = corrlogram(img,4)  # 4
plt.imshow(crgam)
plt.show()

图像基础—— 特征提取之颜色特征提取相关推荐

  1. 图像颜色特征提取(颜色直方图,颜色矩)--python

    图像颜色特征提取(颜色直方图,颜色矩)–python 颜色直方图 颜色直方图用以反映图像颜色的组成分布,即各种颜色出现的概率.Swain和Ballard最先提出了应用颜色直方图进行图像特征提取的方法, ...

  2. 颜色矩特征提取matlab,彩色图像特征提取研究(一)

    彩色图像特征提取研究(一) 通过函数的MATLAB实现得到如下结果图: 图(4-2)图像的边缘检测 4.3图像分割 图像分割是由图像处理到图像分析的关键步骤,也是一种基本的计算机视觉技术.随的图像处理 ...

  3. 颜色矩特征提取matlab,求matlab彩色图片的颜色特征提取算法的代码,和纹理特征提取的? 爱问知识人...

    其实学数字图像处理,关键的不是源代码(和一般编程还是有区别的,这个是经验之谈,其实一般博导未必会编程,但是你和他说说你的方法,他一般都能切中要害),而是你能理解基于概念及适用场所. 基于颜色.纹理.形 ...

  4. python提取人物特征_基于图像人物面部表情识别的特征提取优化方法与流程

    本发明涉及一种基于图像人物面部表情识别的特征提取优化方法,主要利用基于统计特征提取的二维主成分分析法和改进的粒子群算法优化图像矩阵的解,属于图像处理.模式识别和计算机视觉交叉技术应用领域. 背景技术: ...

  5. CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释

    CV:计算机视觉技术之图像基础知识(二)-图像内核的可视化解释 目录 图像内核的可视化解释 测试九种卷积核 官方Demo DIY图片测试 DIY实时视频测试 相关文章 CV:计算机视觉技术之图像基础知 ...

  6. matlab颜色直方图特征提取,灰度直方图特征提取的Matlab实现

    Computer Knowledge and Technology 电脑知识 与技术第5卷第32期(2009年11月)本栏目责任编辑:唐一东人工智能及识别技术灰度直方图特征提取的Matlab 实现 刘 ...

  7. CV:计算机视觉技术之图像基础知识(二)—图像内核的九种卷积核可视化解释(blur/bottom sobel /emboss/identity /sobel /outline/sharpen)

    CV:计算机视觉技术之图像基础知识(二)-图像内核的九种卷积核可视化解释(blur/bottom sobel /emboss/identity /left sobel /outline/right s ...

  8. 【AI白身境】深度学习必备图像基础

    文章首发于微信公众号<有三AI> [AI白身境]深度学习必备图像基础 今天是新专栏<AI白身境>的第四篇,所谓白身,就是什么都不会,还没有进入角色. 我们已经说了linux基础 ...

  9. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  10. 一看就会!Matplotlib图像基础

    1. Matplotlib图像基础 1.1 基本绘图实例:sin.cos函数图 from pylab import * import numpy as np import matplotlib.pyp ...

最新文章

  1. 启动Mysql时发生的一个关于PID文件错误问题
  2. shell getopts
  3. 搭建一个jupyter站点做数据分析吧
  4. ASP.NET Core 进程内(InProcess)托管(6)《从零开始学ASP.NET CORE MVC》:
  5. windows mobile 开发 web service 未能建立与网络的连接、无法连接到远程服务器
  6. 返回json格式 不忽略null字段
  7. Flink 如何读取和写入 Clickhouse?
  8. 幼儿抽象逻辑思维举例_四个锻炼幼儿推理能力的小游戏,让孩子的逻辑思维更上一层楼...
  9. 火狐无法安装扩展_立即安装的前5个Firefox扩展
  10. 树莓派搭建kms服务器
  11. 无法在驱动器0分区上安装windows解决方法
  12. IOS 控制键盘升降
  13. 为什么显示服务器升级中,手机老是显示服务器升级中
  14. EZo UIBuilder中嵌入微博分享按钮【实例】
  15. WAF学习之一——Nginx与反向代理
  16. 增强低频和高频 matlab,实验名称高斯低频滤波及高频增强滤波.doc
  17. Centos8修改源并更新
  18. 台达伺服ASDA-B2调试
  19. java文件打包成jar文件_将java文件打包成jar包步骤
  20. UGUI-- Text文本控件

热门文章

  1. 劳动与社会保障法-作业
  2. 米扑代理:爬虫代理IP哪家好
  3. 2019年Unity学习资源指南[精心整理]
  4. reactJS项目搭建
  5. Python 绘制惊艳的瀑布图
  6. APP上架各大应用市场对比
  7. word中方框中打钩
  8. LV4500二维码扫描器对接到安卓访客一体机系统应用-拓展扫描二维码登记访客功能
  9. Docker 搭建PHP开发环境
  10. 秘密打印机涉密计算机之间,涉密打印机与涉密计算机之间采用什么方式