图像特征是指可以对图像的特点或内容进行表征的一系列属性的集合,主要包括图像自然特征(如亮度、色彩、纹理等)和图像人为特征(如图像频谱、图像直方图等)。
图像特征主要有图像的颜色特征、纹理特征、形状特征和空间关系特征。
图像特征提取根据其相对尺度可分为全局特征提取和局部特征提取两类。全局特征提取关注图像的整体表征。常见的全局特征包括颜色特征、纹理特征、形状特征、空间位置关系特征等。局部特征提取关注图像的某个局部区域的特殊性质。一幅图像中往往包含若干兴趣区域,从这些区域中可以提取数量不等的若干个局部特征。
特征特点有:代表性、稳定性和独立性。
颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。
一般情况下,颜色特征是基于像素点的特征(即所有属于图像或图像区域的像素都有各自的贡献)。
由于,颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征。此外,仅使用颜色特征进行查询时,如果数据库很大,常会将许多不需要的图像也检索出来。
颜色特征描述方法有:颜色直方图、颜色集、颜色矩(颜色分布)、颜色聚合向量、颜色相关图。
颜色直方图是最常用的表达颜色特征的方法。其优点在于:它能简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像,同时不受图像旋转和平移变化的影响,进一步借助归一化还可不受图像尺度变化的影响;其缺点是:它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。
最常用的颜色空间:RGB颜色空间、HSV颜色空间。
颜色直方图特征匹配方法:直方图相交法、距离法、中心距法、参考颜色表法、累加颜色直方图法。
颜色直方图法是一种全局颜色特征提取与匹配方法,无法区分局部颜色信息。颜色集是对颜色直方图的一种近似首先将图像从 RGB颜色空间转化成视觉均衡的颜色空间(如HSV 空间),并将颜色空间量化成若干个柄。然后,用色彩自动分割技术将图像分为若干区域,每个区域用量化颜色空间的某个颜色分量来索引,从而将图像表达为一个二进制的颜色索引集。在图像匹配中,比较不同图像颜色集之间的距离和色彩区域的空间关系。
图像中任何的颜色分布均可以用它的矩来表示。此外,由于颜色分布信息主要集中在低阶矩中,因此,仅采用颜色的一阶矩(mean)、二阶矩(variance)和三阶矩(skewness)就足以表达图像的颜色分布。
其核心思想是:将属于直方图每一个柄的像素分成两部分,如果该柄内的某些像素所占据的连续区域的面积大于给定的阈值,则该区域内的像素作为聚合像素,否则作为非聚合像素。
颜色相关图(color correlogram)是图像颜色分布的另一种表达方式。这种特征不但刻画了某一种颜色的像素数量占整个图像的比例,还反映了不同颜色对之间的空间相关性。实验表明,颜色相关图比颜色直方图和颜色聚合向量具有更高的检索效率,特别是查询空间关系一致的图像。
如果考虑到任何颜色之间的相关性,颜色相关图会变得非常复杂和庞大(空间复杂度为O(N2d))。一种简化的变种是颜色自动相关图(color auto-correlogram),它仅仅考察具有相同颜色的像素间的空间关系,因此空间复杂度降到O(Nd)
纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。
与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。在模式匹配中,这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。
作为一种统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。但是,纹理特征也有其缺点,一个很明显的缺点是当图像的分辨率变化的时候,所计算出来的纹理可能会有较大偏差。另外,由于有可能受到光照、反射情况的影响,从2-D图像中反映出来的纹理不一定是3-D物体表面真实的纹理。
例如,水中的倒影,光滑的金属面互相反射造成的影响等都会导致纹理的变化。由于这些不是物体本身的特性,因而将纹理信息应用于检索时,有时这些虚假的纹理会对检索造成“误导”。
引入纹理语义分层分析。在检索具有粗细、疏密等方面较大差别的纹理图像时,利用纹理特征是一种有效的方法。但当纹理之间的粗细、疏密等易于分辨的信息之间相差不大的时候,通常的纹理特征很难准确地反映出人的视觉感觉不同的纹理之间的差别。
纹理特征描述方法有:统计方法、几何方法、模型法、信号处理法。
统计方法的典型代表是一种称为灰度共生矩阵(GLCM)的纹理特征分析方。灰度共生矩阵有四个关键特征:能量、惯量、熵和相关性。
统计方法中另一种典型方法,则是从图像的自相关函数(即图像的能量谱函数)提取纹理特征,即通过对图像的能量谱函数的计算,提取纹理的粗细度及方向性等特征参数。
所谓几何法,是建立在纹理基元(基本的纹理元素)理论基础上的一种纹理特征分析方法。纹理基元理论认为,复杂的纹理可以由若干简单的纹理基元以一定的有规律的形式重复排列构成。
在几何法中,比较有影响的算法有两种:Voronio 棋盘格特征法和结构法。
模型法以图像的构造模型为基础,采用模型的参数作为纹理特征。典型的方法是随机场CRF模型法,如马尔可夫(Markov)随机场(MRF)模型法和 Gibbs 随机场模型法。
如:小波变换。
灰度共生矩阵特征提取与匹配主要依赖于能量、惯量、熵和相关性四个参数。Tamura 纹理特征基于人类对纹理的视觉感知心理学研究,提出6种属性,即:粗糙度、对比度、方向度、线像度、规整度和粗略度。自回归纹理模型(simultaneous auto-regressive, SAR)是马尔可夫随机场(MRF)模型的一种应用实例。
许多形状特征仅描述了目标局部的性质,要全面描述目标常对计算时间和存储量有较高的要求;许多形状特征所反映的目标形状信息与人的直观感觉不完全一致,或者说,特征空间的相似性与人视觉系统感受到的相似性有差别。另外,从 2-D 图像中表现的 3-D 物体实际上只是物体在空间某一平面的投影,从 2-D 图像中反映出来的形状常不是 3-D 物体真实的形状,由于视点的变化,可能会产生各种失真。同时,如果目标有变形时检索结果往往不太可靠;
通常情况下,形状特征有两类表示方法,一类是轮廓特征,另一类是区域特征。图像的轮廓特征主要针对物体的外边界,而图像的区域特征则关系到整个形状区域。典型的形状特征描述方法有:边界特征法、傅里叶形状描述符法、几何参数法、形状不变矩法等待
该方法通过对边界特征的描述来获取图像的形状参数。其中Hough 变换检测平行直线方法和边界方向直方图方法是经典方法。Hough 变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法,其基本思想是点—线的对偶性;边界方向直方图法首先微分图像求得图像边缘,然后,做出关于边缘大小和方向的直方图,通常的方法是构造图像灰度梯度方向矩阵。
傅里叶形状描述符(Fourier shape deors)基本思想是用物体边界的傅里叶变换作为形状描述,利用区域边界的封闭性和周期性,将二维问题转化为一维问题。
由边界点导出三种形状表达,分别是曲率函数、质心距离、复坐标函数。
形状的表达和匹配采用更为简单的区域特征描述方法,例如采用有关形状定量测度(如矩、面积、周长等)的形状参数法(shape factor)。在 QBIC 系统中,便是利用圆度、偏心率、主轴方向和代数不变矩等几何参数,进行基于形状特征的图像检索。
需要说明的是,形状参数的提取,必须以图像处理及图像分割为前提,参数的准确性必然受到分割效果的影响,对分割效果很差的图像,形状参数甚至无法提取。
利用目标所占区域的矩作为形状描述参数。
所谓空间关系,是指图像中分割出来的多个目标之间的相互的空间位置或相对方向关系,这些关系也可分为连接/邻接关系、交叠/重叠关系和包含/包容关系等。通常空间位置信息可以分为两类:相对空间位置信息和绝对空间位置信息。前一种关系强调的是目标之间的相对情况,如上下左右关系等,后一种关系强调的是目标之间的距离大小以及方位。显而易见,由绝对空间位置可推出相对空间位置,但表达相对空间位置信息常比较简单。
空间关系特征的使用可加强对图像内容的描述区分能力,但空间关系特征常对图像或目标的旋转、反转、尺度变化等比较敏感。另外,实际应用中,仅仅利用空间信息往往是不够的,不能有效准确地表达场景信息。为了检索,除使用空间关系特征外,还需要其它特征来配合。
提取图像空间关系特征可以有两种方法:一种方法是首先对图像进行自动分割,划分出图像中所包含的对象或颜色区域,然后根据这些区域提取图像特征,并建立索引;另一种方法则简单地将图像均匀地划分为若干规则子块,然后对每个图像子块提取特征,并建立索引。
姿态估计问题:确定某一三维目标物体的方位指向问题。姿态估计在机器人视觉、动作跟踪和单照相机定标等很多领域都有应用。
基于视觉的姿态估计根据使用的摄像机数目又可分为单目视觉姿态估计和多目视觉姿态估计。根据算法的不同又可分为基于模型的姿态估计和基于学习的姿态估计。
基于模型的方法通常利用物体的几何关系或者物体的特征点来估计。其基本思想是利用某种几何模型或结构来表示物体的结构和形状,并通过提取某些物体特征,在模型和图像之间建立起对应关系,然后通过几何或者其它方法实现物体空间姿态的估计。这里所使用的模型既可能是简单的几何形体,如平面、圆柱,也可能是某种几何结构,也可能是通过激光扫描或其它方法获得的三维模型。
基于模型的姿态估计方法是通过比对真实图像和合成图像,进行相似度计算更新物体姿态。目前基于模型的方法为了避免在全局状态空间中进行优化搜索,一般都将优化问题先降解成多个局部特征的匹配问题,非常依赖于局部特征的准确检测。当噪声较大无法提取准确的局部特征的时候,该方法的鲁棒性受到很大影响。
基于学习的方法借助于机器学习(machine learning)方法,从事先获取的不同姿态下的训练样本中学习二维观测与三维姿态之间的对应关系,并将学习得到的决策规则或回归函数应用于样本,所得结果作为对样本的姿态估计。基于学习的方法一般采用全局观测特征,不需检测或识别物体的局部特征,具有较好的鲁棒性。其缺点是由于无法获取在高维空间中进行连续估计所需要的密集采样,因此无法保证姿态估计的精度与连续性。
基于学习的方法一般采用全局观测特征,可以保证算法具有较好的鲁棒性。然而这一类方法的姿态估计精度很大程度依赖于训练的充分程度。要想比较精确地得到二维观测与三维姿态之间的对应关系,就必须获取足够密集的样本来学习决策规则和回归函数。而一般来说所需要样本的数量是随状态空间的维度指数级增加的,对于高维状态空间,事实上不可能获取进行精确估计所需要的密集采样。因此,无法得到密集采样而难以保证估计的精度与连续性,是基于学习的姿态估计方法无法克服的根本困难。
cv2.calcHist(image,channels,mask,histSize,ranges)
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])
当图像中的颜色值不能取遍所有可能的颜色值时,一般颜色直方图中就会出现一些零值。这些零值的出现会影响相似性的度量,进而会使计算出的相似度不能准确反映图像之间的颜色分布差异。
为了弥合一般颜色直方图法的上述缺陷,在一般直方图方法的基础之上,通过对直方图元素进行累加,消除零值影响,形成全局累加直方图,即:
λ ( x i ) = ∑ j ≤ i h ( x j ) \lambda(x_i) = \sum_{j \leq i}h(x_j) λ(xi)=j≤i∑h(xj)
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,其一阶颜色矩的定义为:
μ i = 1 N ∑ j = 1 N P i j \mu_i = \frac{1}{N} \sum_{j=1}^N P_{ij} μi=N1j=1∑NPij
其中 P i j P_{ij} Pij表示数字图像P的第i个图像通道的第j个像素的像素值,N表示图像中像素的个数。
二阶颜色矩的定义为:
σ i = [ 1 N ∑ j = 1 N ( P i j − μ i ) 2 ] 1 2 \sigma_i =[\frac{1}{N} \sum_{j=1}^N(P_{ij} - \mu_i)^2]^{\frac{1}{2}} σi=[N1j=1∑N(Pij−μi)2]21
三阶颜色矩的定义为:
s i = [ 1 N ∑ j = 1 N ( P i j − μ i ) 3 ] 1 3 s_i =[\frac{1}{N} \sum_{j=1}^N(P_{ij} - \mu_i)^3]^{\frac{1}{3}} si=[N1j=1∑N(Pij−μi)3]31
其中一阶矩可以表征该颜色通道的平均响应强度,二阶矩可以表示该颜色通道的响应方差,三阶矩可以表征该颜色通道数据分布的偏移度。针对彩色图像,图像的颜色矩一共有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))
颜色相关图是图像颜色分布的另外一种表达方式。颜色相关图不仅可以显示像素在图像中的占比,也可以反映不同颜色对间的空间位置的相关性。颜色相关图利用颜色对间的相对距离分布来描述空间位置信息。
颜色相关图是一张用颜色对索引的表,其中的第k个分量表示颜色为c(i)的像素和颜色为c(j)的像素之间的距离等于k的概率。设I表示整张图像的全部像素,Ic(i)表示颜色为c(i)的所有像素,则图像的颜色相关图可以表达为:
|p1-p2|表示像素p1和p2之间的距离
def is_vaild(X,Y,point): #判断像素分布点是否超出图像范围,超出返回False
if point[0] < 0 or point[0] >= X:
return False
if point[1] < 0 or point[1] >= Y:
return False
return True
def 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 Cn
def corrlogram(img,dist):
xx,yy,tt = img.shape
cgram = 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()
对LBP特征向量进行提取的步骤如下:
首先将检测窗口划分为16×16的小区域(cell),对于每个cell中的一个像素,将其环形邻域内的8个点(也可以是环形邻域多个点,如图 3‑4. 应用LBP算法的三个邻域示例所示)进行顺时针或逆时针的比较,如果中心像素值比该邻点大,则将邻点赋值为1,否则赋值为0,这样每个点都会获得一个8位二进制数(通常转换为十进制数)。然后计算每个cell的直方图,即每个数字(假定是十进制数)出现的频率(也就是一个关于每一个像素点是否比邻域内点大的一个二进制序列进行统计),然后对该直方图进行归一化处理。最后将得到的每个cell的统计直方图进行连接,就得到了整幅图的LBP纹理特征,然后便可利用SVM或者其他机器学习算法进行分类了。
灰度共生矩阵(GLCM)是另一种纹理特征提取方法,首先对于一幅图像定义一个方向(orientation)和一个以pixel为单位的步长(step),灰度共生矩阵T(N×N),则定义M(i,j)为灰度级为i和j的像素同时出现在一个点和沿所定义的方向跨度步长的点上的频率。其中N是灰度级划分数目。由于共生矩阵有方向和步长的组合定义,而决定频率的一个因素是对矩阵有贡献的像素数目,而这个数目要比总共数目少,且随着步长的增加而减少。因此所得到的共生矩阵是一个稀疏矩阵,所以灰度级划分N常常减少到8级。如在水平方向上计算左右方向上像素的共生矩阵,则为对称共生矩阵。类似的,如果仅考虑当前像素单方向(左或右)上的像素,则称为非对称共生矩阵。
形状特征的表达必须以对图像中物体或区域的分割为基础。
两种经典的算法是SIFT和HOG。Sift是先找特征点,而hog是对图片进行分割。
边缘检测通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域。在一维空间中,类似的操作被称作步长检测(step detection)。边缘是一幅图像中不同屈原之间的边界线,通常一个边缘图像是一个二值图像。边缘检测的目的是捕捉亮度急剧变化的区域。
在一幅图像中两度不连续的区域通常是以下几项之一:
检测方法:
特征提取之颜色特征提取
图像特征提取
常用的图像特征描述