4、RGB静默活体检测原理:基于纹理分析、颜色空间与频域分析
各位同学,欢迎来到第四章。前面我们聊了活体检测的整体框架和攻击类型,今天要深入技术内核了。
RGB静默活体检测,说白了就是只用普通摄像头拍一张照片,不依赖红外、结构光这些额外硬件,来判断面前的是真人还是假体。听起来很神奇对吧?其实核心就三招:看纹理、看颜色、看频率。我一个个拆开讲。
4.1 基于纹理分析:LBP与LPQ
先说说纹理分析。你想想看,真人的皮肤和打印纸、屏幕的纹理能一样吗?当然不一样。真人皮肤有毛孔、有细微的凹凸,而打印纸有网点,屏幕有像素栅格。纹理分析就是抓住这些差异。
4.1.1 LBP(局部二值模式)
LBP是我个人非常喜欢的一个特征。它简单、高效,而且对光照变化有一定鲁棒性。原理其实不复杂:
- 把图像分成一个个小窗口(比如3×3像素)
- 拿中心像素的灰度值跟周围8个邻居比
- 邻居比中心大就记1,小就记0
- 把这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值后,我们统计直方图,这就是纹理特征向量。
4.1.2 LPQ(局部相位量化)
LPQ是LBP的升级版。它不是在空间域直接比灰度,而是先做短时傅里叶变换,提取相位信息。为什么要这么做?
我遇到过这种情况:一张照片被模糊处理过,LBP的纹理细节全没了,但LPQ还能扛住。因为相位信息对模糊不敏感。
LPQ的核心步骤:
- 对每个像素的邻域做4×4的短时傅里叶变换
- 提取4个频率点的相位值
- 量化成0/1,拼成二进制码
- 统计直方图作为特征
| 维度 | LBP | LPQ |
|---|---|---|
| 计算速度 | 快(纯比较运算) | 慢(需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通道的纹理出现了明显的块状伪影——那是打印机的半色调网点造成的。
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 知识体系总览
下面这张图把本章的核心逻辑串起来了。我建议你多看几遍,理解三种方法是怎么互补的。
4.5 实战建议
讲完原理,我给大家几条实战建议:
- 别只用一种方法:单一方法容易被针对性攻击绕过。我见过一个案例,攻击者用磨砂膜贴在屏幕上,LBP和频域都失效了,但颜色空间特征还能扛住
- 特征融合要讲究:不是简单拼接就行。我习惯用串行融合(特征向量直接拼接)配合PCA降维,或者用并行融合(多个分类器投票)
- 注意实时性:LBP+HSV组合在嵌入式设备上能跑到30fps,但加上FFT就掉到15fps了。根据你的硬件选方案
- 数据增强很重要:训练时多模拟不同光照、不同角度、不同攻击介质,模型才能泛化