图像特征总结(持续更

传统图像特征

颜色特征

众所周知,一幅图像可定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,而在任何一对空间坐标(x,y)处的值一般成为图像在该点的像素值。而图像最简单的特征就是图像的像素值或者灰度化后的灰度值。

灰度值

灰度图像
灰度图像灰度值拉成一列

颜色空间

颜色空间
利用颜色空间的不同颜色通道,比灰度图增加了颜色信息

颜色直方图

分块颜色直方图
图像分块进行特征提取,每块提取颜色直方图

纹理特征

局部二值模式(Local Binary Patterns,LBP)
原始LBP

以中心灰度点作为参考点,周围点大于该值置为1,小于该值置为0
原始LBP

圆形LBP

可在半径R的区域内采样P个算子,采样点的坐标未必是整数,可通过插值的方式获得采样点的像素值
圆形LBP
采样后的点坐标未必是整数,坐标点计算为 :
在这里插入图片描述在这里插入图片描述
其像素值可以使用双线性插值方法进行计算,然后在进行LBP编码 :
在这里插入图片描述

旋转不变LBP

在上述的基础上,为了使得特征保持旋转不变性,使用旋转不变LBP即对于LBP编码后的01序列循环右移,得到能量最低(值最小)的编码作为最终编码。
旋转不变LBP

等价LBP

原始的圆形LBP,对于一个半径为R的圆形区域,采样点为P时,LBP算子可能产生2p种模式,随着采样点的增加,LBP的取值数量呈指数级别增长。为了对LBP特征进行降维,减少数据量并且更好的表达图像的信息,提出了等价模式的LBP特征表示。通俗的讲,通过LBP特征编码中的0,1跳变的次数进行等价分类。将LBP模式数由2p种变为p(p-1)+2+1种,其中多于两次跳变的都归为一类称为混合模式(1种),只有0次跳变的模式有两种(全0、全1),有两次跳变的情况有p(p-1)种。在此基础上和旋转不变一起使用,可进一步减少模式数据量。
例如,采样点为8时,其等价模式LBP共有如下59种。兼之旋转不变性后,可减少到9种。从第2行到倒数第2行,每行都可以看作一种模式。
等价LBP例子

多尺度LBP

LBP的对象不再是单点像素,而是一个个cell(cell种像素平均或者求和)
多尺度LBP例子

python可视化图像LBP特征
from skimage.transform import rotate
from skimage.feature import local_binary_pattern
from skimage import data, io,data_dir,filters, feature
from skimage.color import label2rgb
import skimage
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import cv2

radius = 3  # LBP算法中范围半径的取值
n_points = 8 * radius # 领域像素点数

image = cv2.imread('img/demo.jpg')
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.subplot(131)
plt.imshow(image1) # 原图
plt.axis('off')
image = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
plt.subplot(132)
plt.imshow(image, plt.cm.gray) # 灰度图
plt.axis('off')
lbp = local_binary_pattern(image, n_points, radius)
plt.subplot(133)
plt.imshow(lbp, plt.cm.gray) # LBP特征图
plt.axis('off')

灰度特征

Haar特征

haar特征采用在人脸检测算法中,在此特征提出之前,一般基于图像像素来来作为特征计算,计算量大实时性差。而haar特征反应了图像局部灰度变化的情况,现有的haar特征模板主要如下所示:
Haar特征模板
在计算Haar特征值时,用白色区域像素值的和减去黑色区域像素值的和。Haar特征模板可用于图像中的任一位置,而且大小也可任意变化。因此一个图像区域可以产生大量的haar特征,为了快速的计算出haar特征就提出了使用积分图的方式。具体地,图像起始像素点到每一个像素点之间所形成的矩形区域的像素值的和,作为一个元素保存下来,也就是将原始图像转换为积分图(或者求和图),这样在求某一矩形区域的像素和时,只需索引矩形区域4个角点在积分图中的取值,进行普通的加减运算,即可求得Haar特征值。在进行人脸检测时,haar特征经常与AdaBoost分类器结合一起。
积分图计算示例

积分图计算示例

opencv-python人脸检测
注:如果要使用opencv内置的训练好的模型文件,需要找到opencv的路径,在Linux系统下,使用查找搜索。

sudo find / -iname "*opencv*" 

示例代码

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('/usr/share/opencv/haarcascades/haarcascade_eye.xml')

img = cv2.imread('img/demo.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(111)
plt.imshow(img)
plt.axis('off')

人脸检测示例

参考

https://senitco.github.io/2017/06/12/image-feature-lbp/

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值