特征提取是提取出物体(如图片)的特征,用数学的向量、矩阵等对物体的特征做描述,做刻画。然后描述或刻画物体特征的这些信息就可以用来代表这类物体,之后应用到物体识别、分类等任务中。
所谓“特征”是物体具备的基本属性,我们通过某类物体的特征可以使得其区别于其它种类的物体。更进一步,如果我们获取到物体更细节的特征,就可以使得该物体区别于同类的其它物体。基于对“特征”基本概念的理解,我们结合图像处理,引入图像特征。图像特征被广泛应用于图像分类、人脸识别、目标跟踪等多种领域。
图像特征主要有图像的颜色特征、纹理特征、形状特征和空间关系特征。
图像特征的分类形式是多样的,如分类成全局特征和局部特征。
颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。
纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。
图像的特征主要可以分为点、线(边缘)、区域(面)等特征,也可以分为局部特征和全局特征。
区域(面)特征提取比较麻烦,耗时,因此主要用点特征和边缘特征。
点特征提取方法包括:SIFT、SURF 、BRIEF、 FREAK 、 ORB 、 FAST 等。
边缘特征方法包括:LoG算子、Robert算子、Sobel算子、Prewitt算子、Canny算子等。
所谓关键点特征提取方法,是找到图像中具有旋转、平移、缩放等不变形特征的像素点,这些点被成为关键点。
根据图像中的具有不变性特征的关键点,就可以对图像做识别,匹配,分类等任务了。
代码中,有不懂的地方参考opencv官方文档,官方文档是最好的老师。
https://docs.opencv.org/4.5.2/
import numpy as np
import cv2
from matplotlib import pyplot as plt
#读入lena图形
imgname1 = './lena.png'
img1 = cv2.imread(imgname1)
#gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) #灰度处理图像
#使用opencv中封装的sift方法
sift = cv2.xfeatures2d.SIFT_create()
keyPoint, des = sift.detectAndCompute(img1,None) #keyPoint是关键点的信息,des是关键点对应的描述信息
#把提取到的关键点,在原图中标出
img3 = cv2.drawKeypoints(img1,keyPoint,img1,color=(255,0,255)) #画出特征点,并显示为红色圆圈
#显示
cv2.imshow("SIFT", img3)
cv2.waitKey(0)
代码中:keyPoint是关键点的信息,des是关键点对应的描述信息
debug中,看到关键点 keyPoint 如下图,从0开始排序
描述符 descriptor 就是如下所示的向量(每个sift关键点是一个128维的行向量),当然也可以说矩阵(多个关键点就构成矩阵)
下图没有显示全。
keyPoint所包含的信息有:
angle:角度,表示关键点的方向,通过Lowe大神的论文可以知道,为了保证方向不变形,SIFT算法通过对关键点周围邻域进行梯度运算,求得该点方向。-1为初值。
class_id:当要对图片进行分类时,我们可以用class_id对每个特征点进行区分,未设定时为-1,需要靠自己设定
octave:代表是从金字塔哪一层提取的得到的数据。
pt:关键点点的坐标
response:响应程度,代表该点强壮大小,更确切的说,是该点角点的程度。
size:该点直径的大小,特征点领域直径
import numpy as np
import cv2
from matplotlib import pyplot as plt
imgname = './lena.png'
src = cv2.imread(imgname)
surf = cv2.xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(src, None) # des是描述子
img = cv2.drawKeypoints(src, kp, src, color=(0, 0, 255))
#显示
cv2.imshow("SURF", img) #拼接显示为gray
cv2.waitKey(0)
#保存图像
save_path = 'F:\\xiangmu\\a.jpg'
cv2.imwrite(save_path, img)