4、RGB静默活体检测原理:基于纹理分析、颜色空间与频域分析

各位同学,欢迎来到第四章。前面我们聊了活体检测的整体框架和攻击类型,今天要深入技术内核了。

RGB静默活体检测,说白了就是只用普通摄像头拍一张照片,不依赖红外、结构光这些额外硬件,来判断面前的是真人还是假体。听起来很神奇对吧?其实核心就三招:看纹理、看颜色、看频率。我一个个拆开讲。

4.1 基于纹理分析:LBP与LPQ

先说说纹理分析。你想想看,真人的皮肤和打印纸、屏幕的纹理能一样吗?当然不一样。真人皮肤有毛孔、有细微的凹凸,而打印纸有网点,屏幕有像素栅格。纹理分析就是抓住这些差异。

4.1.1 LBP(局部二值模式)

LBP是我个人非常喜欢的一个特征。它简单、高效,而且对光照变化有一定鲁棒性。原理其实不复杂:

  1. 把图像分成一个个小窗口(比如3×3像素)
  2. 拿中心像素的灰度值跟周围8个邻居比
  3. 邻居比中心大就记1,小就记0
  4. 把这8个二进制数拼起来,就是一个LBP值

举个例子:

原始灰度值(3×3窗口):
[120, 130, 125]
[110, 100, 105]
[ 95,  90,  98]

中心像素 = 100

比较结果(大于100为1,否则为0):
[1, 1, 1]
[1, 0, 1]
[0, 0, 0]

二进制序列(顺时针):11101000 → 十进制232

整张图算完所有LBP值后,我们统计直方图,这就是纹理特征向量。

我的经验:LBP对打印攻击效果很好,但对屏幕翻拍有时会翻车。为什么?因为屏幕本身也有纹理,跟打印纸的网点不一样。我建议用均匀模式LBP(Uniform LBP),只保留跳变次数≤2的模式,能大幅降维且效果不降。

4.1.2 LPQ(局部相位量化)

LPQ是LBP的升级版。它不是在空间域直接比灰度,而是先做短时傅里叶变换,提取相位信息。为什么要这么做?

我遇到过这种情况:一张照片被模糊处理过,LBP的纹理细节全没了,但LPQ还能扛住。因为相位信息对模糊不敏感。

LPQ的核心步骤:

  • 对每个像素的邻域做4×4的短时傅里叶变换
  • 提取4个频率点的相位值
  • 量化成0/1,拼成二进制码
  • 统计直方图作为特征
LBP vs LPQ 对比:
维度LBPLPQ
计算速度快(纯比较运算)慢(需FFT)
抗模糊弱强
抗光照中等较好
特征维度59维(均匀模式)256维
适用攻击打印、纸张屏幕翻拍、模糊攻击

4.2 基于颜色空间分析:HSV与YCbCr

纹理分析看的是结构,颜色分析看的是光谱。真人皮肤和假体在颜色分布上有什么不同?我告诉你,差别大了去了。

打印纸有油墨吸收光谱,屏幕有RGB像素发光,这些都会改变颜色分布。但直接在RGB空间做效果不好,因为RGB三个通道相关性太强。我们需要换到更合适的颜色空间。

4.2.1 HSV空间

HSV把颜色拆成色调(H)、饱和度(S)、明度(V)。我习惯用S和V通道做分析:

  • S通道(饱和度):真人皮肤的饱和度分布比较集中,而打印纸因为油墨扩散,饱和度会偏低且分散
  • V通道(明度):屏幕翻拍会有明显的像素栅格,导致明度分布出现周期性波动

具体做法:把RGB转成HSV,然后提取S和V通道的统计特征(均值、方差、偏度、峰度),或者直接算直方图距离。

4.2.2 YCbCr空间

YCbCr是视频编码常用的颜色空间。Y是亮度,Cb和Cr是色度。这个空间有个好处:亮度和色度分开了。

我在项目中遇到过一种攻击:攻击者用高精度打印机在相纸上打印人脸,RGB空间看几乎一模一样。但转到YCbCr后,Cb和Cr通道的纹理出现了明显的块状伪影——那是打印机的半色调网点造成的。

避坑指南:我曾经只用了HSV一个颜色空间做特征,结果被一种特殊相纸攻破了。后来我把HSV和YCbCr的特征拼接在一起,效果才稳定下来。单一颜色空间的信息量不够,多空间融合才是王道。

4.3 基于频域分析:傅里叶变换

前面说的纹理和颜色都是在空间域看问题。频域分析换个角度——把图像看成不同频率信号的叠加。

真人脸是自然图像,能量主要集中在低频(平滑区域)。而打印纸有周期性网点,屏幕有像素栅格,这些都会在频域产生高频分量。傅里叶变换就是把这些频率成分拆开来看。

4.3.1 二维离散傅里叶变换

公式我就不写了,大家记住核心思想:

  • 低频在频谱中心,高频在四周
  • 真人脸的频谱:能量集中在中心,向外衰减平滑
  • 打印攻击的频谱:会出现十字亮线(网点周期)
  • 屏幕翻拍的频谱:会出现规则的点阵(像素栅格)

我常用的做法:

1. 对灰度图做FFT,得到频谱图
2. 取对数压缩动态范围(方便观察)
3. 提取环形特征:从中心向外画同心圆,统计每个圆环内的能量
4. 提取角度特征:从中心向外画扇形,统计每个扇区内的能量
5. 把环形+角度特征拼成向量,送入分类器

4.3.2 频域特征的实战技巧

说实话,纯频域特征现在用得少了,因为计算量大且对图像尺寸敏感。但我有个折中方案:

  • 不整图做FFT,而是对人脸关键区域(比如额头、脸颊)做局部FFT
  • 或者用DCT(离散余弦变换)代替FFT,计算更快
  • 频域特征跟纹理特征做融合,效果1+1>2
三种方法的核心差异:
方法检测原理优势劣势
纹理分析(LBP/LPQ)局部微结构差异计算快,对打印攻击敏感对模糊和光照敏感
颜色空间(HSV/YCbCr)光谱反射差异对屏幕翻拍敏感受环境光影响大
频域分析(FFT)周期性伪影检测对规则纹理敏感计算量大,对尺寸敏感

4.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。我建议你多看几遍,理解三种方法是怎么互补的。

RGB静默活体检测原理总览 RGB静默活体检测三大技术路线 RGB输入图像 纹理分析 LBP / LPQ 局部微结构差异 颜色空间分析 HSV / YCbCr 光谱反射差异 频域分析 傅里叶变换 周期性伪影检测 多特征融合 活体 / 攻击判定

4.5 实战建议

讲完原理,我给大家几条实战建议:

  • 别只用一种方法:单一方法容易被针对性攻击绕过。我见过一个案例,攻击者用磨砂膜贴在屏幕上,LBP和频域都失效了,但颜色空间特征还能扛住
  • 特征融合要讲究:不是简单拼接就行。我习惯用串行融合(特征向量直接拼接)配合PCA降维,或者用并行融合(多个分类器投票)
  • 注意实时性:LBP+HSV组合在嵌入式设备上能跑到30fps,但加上FFT就掉到15fps了。根据你的硬件选方案
  • 数据增强很重要:训练时多模拟不同光照、不同角度、不同攻击介质,模型才能泛化
我的小技巧:在实际部署时,我会用LBP做第一道快速筛查,通过率高的样本再送颜色+频域做精细判断。这样既保证了速度,又保证了精度。说白了就是级联架构,工业界很常用。