👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
摘要 — 通过一种新颖的五步算法,对鼻部区域用于鲁棒三维人脸识别的潜力进行了深入研究。首先,粗略检测鼻尖位置并对面部进行分割、对齐并裁剪出鼻部区域。然后,一种非常精确且一致的鼻部标记算法检测出鼻部区域的七个关键点。在第三步中,利用基于 Gabor 小波滤波深度图表面法线的特征提取算法,并在鼻部区域定位一组球形块和曲线以提供特征描述符。最后一步应用基于遗传算法的特征选择器,以检测在不同面部表情下最稳定的块和曲线。该算法在 FRGC、博斯普鲁斯海峡和 BU-3DFE 数据集上提供了基于鼻部区域的最高报告识别排名。结果与许多使用整个面部领域的最新三维人脸识别算法相当,甚至在许多情况下更好。该方法不依赖于复杂的对齐或去噪步骤,当在画廊中仅使用每个受试者的一个样本时非常鲁棒,并且不需要为标记算法进行训练步骤。
关键词— 人脸识别,面部标记,鼻部区域,特征选择,Gabor 小波,表面法线
1 引言
尽管以往关于表情不变三维人脸识别的研究大多集中在建模表情和检测表情不敏感的面部部位上,但评估鼻部区域用于解决这一问题的潜力的研究相对较少。尽管如此,鼻子具有一些显著特征,使其适合用于表情鲁棒识别。由于其独特的曲率和凸性,鼻子可以很容易地被检测到[1],并且在不引起怀疑的情况下很难被隐藏[2]、[3]。此外,鼻子在各种面部表情下相对稳定([1]、[4]、[5]、[6]、[7]、[8]、[9]),并且很少受到头发和围巾等意外遮挡的影响。尽管有报道称,二维鼻子图像的特征太少,无法作为人类识别的可靠区域[10],但其三维表面具有很大的未被发现的潜力。本文进一步研究了三维鼻部区域用于人类身份认证和验证的目的,并提出了一种新算法,该算法提供了非常高的区分强度,与使用整个面部领域的最新三维人脸识别算法相当。
本文提出的方法基于一种非常一致且准确的标记算法,解决了鼻部区域鲁棒分割的问题。该算法首先找到鼻尖的大致位置,然后微调其位置,同时准确确定鼻根的位置并检测面部的对称平面。接下来,找到三组标记的位置:鼻下点、眼角和鼻翼沟。这些标记被用于通过将多分辨率 Gabor 小波应用于深度图的表面法线而创建的特征图。使用了两种类型的特征描述符:球形块和鼻部曲线。然后使用启发式遗传算法(GA)进行特征选择,最后,将表情鲁棒的特征描述符应用于广为人知且广泛使用的三维人脸识别挑战赛(FRGC)[11]、博斯普鲁斯海峡[12]和宾汉姆顿大学三维面部表情(BU-3DFE)[13]数据集。
结果显示该算法在识别不同表情下的鼻部区域(因此也是面部)方面具有很高的潜力,即使每个受试者的画廊样本很少。实现的最高排名识别率(R1RR)如下:1)对于 FRGC v2.0 和接收者操作特征(ROC)III 实验,R1RR 为 97.9%,等错误率(EER)为 2.4%;2)对于 FRGC 的中性与中性样本以及中性与非中性样本,R1RR 分别为 98.45% 和 98.5%;3)当在 FRGC 数据集中每个受试者使用一个画廊样本时,R1RR 为 96.2%(482 个画廊样本(受试者)与 4330 个探针样本);4)对于博斯普鲁斯海峡数据集,当使用 105 个受试者的 2797 次扫描作为探针,而将 105 个中性扫描(每个受试者一个)作为画廊时,R1RR 为 95.35%。
本文的其余部分安排如下。在第 2 节提供的文献综述之后,第 3 节详细介绍了对齐和鼻部区域裁剪步骤,随后是鼻部区域标记。第 4 节描述了特征提取算法,第 5 节解释了使用的特征描述符。第 6 节详细介绍了特征选择算法,第 7 节提供了实验结果,包括与以往工作的全面比较。最后,第 8 节给出了结论。
1.1 科学贡献与与以往工作的比较
本文的主要贡献是一种新颖的基于表面法线的识别算法,对三维鼻部区域的识别潜力进行了全面评估。取得的结果不仅优于以往的三维鼻部识别算法,而且高于许多使用整个面部的识别算法。该算法采用了一种新颖的、无训练的、高度一致且准确的鼻部区域标记算法,并引入了一个基于 Gabor 小波对表面法向量响应的鲁棒特征空间。为了在鼻子上定位表情鲁棒区域,将启发式遗传算法特征选择应用于两种不同的几何特征描述符。由于 Gabor 小波的平滑效应,无需复杂的去噪算法。实际上,即使对于像 FRGC 2003 年春季文件夹这样的嘈杂数据集,表面法线也只需要简单的中值滤波。该方法的另一个优点是,可以使用快速的基于主成分分析(PCA)的自依赖方法进行面部姿态校正。这消除了对复杂姿态校正算法或参考面部进行对齐微调的需求。
与我们在之前的工作 [4] 相比,本文的方法显著扩展了该工作,其中鼻部标记和识别是在深度图上进行的。本文增加了标记的数量及其检测精度,并提出了新的特征提取和选择算法。该工作受到最近关于在三维中利用面部法向量 [14] 和区域法向量 [15] 的算法的启发。为了将新算法与使用类似方法的以往方法进行比较,将计算的鼻部表面法线应用于识别以及验证场景。通过使用多分辨率 Gabor 小波,该算法处理嘈杂样本的能力得到了增强,提供了比李等人 [15] 的方法更高的 R1RR,后者排除了嘈杂的 FRGC 2003 年春季样本。这项工作还将伯雷蒂等人([16] 和 [17])引入的面部曲线作为特征描述符的应用扩展到鼻部球形块,使 R1RR 增加了 >2%,并显示出球形块对于三维人脸识别的类别可分性高于曲线。
2 最近文献综述
在三维人脸识别中,对由面部表情引起的变形的鲁棒性一直是热门研究课题。面部是一个非刚性物体,因此用于刚性物体的三维匹配技术(如迭代最近点(ICP)算法 [18])可能会陷入局部最小值,无法提供准确的匹配分数。一种处理表情变化的经验方法是为每个受试者捕获一系列面部表情,并将它们存储在画廊中 [19]。然后,可以将每个测试受试者的面部生物特征与所有存储的表情进行比较,并据此判断受试者的身份。这种方法存在许多缺点:为每个受试者捕获一系列面部表情并不总是简单的,并且需要每个受试者占用大量的存储空间。此外,面部表情并不一定保持不变,可能在测试和画廊捕获之间有所不同 [19]。
解决这一问题的一种方法是使用计算机图形算法人为地为每个面部捕获创建不同的表情。在 [20] 中,使用 PCA 特征向量学习表情,然后在探针样本上重新生成表情。尽管这种方法不需要在画廊中为每个受试者提供多个样本,但它仍然容易受到用于建模面部表情的训练样本数量的影响。此外,目前还没有找到适用于所有受试者的通用面部表情定义 [19],并且在人脸识别之前对表情类型进行分类会增加计算复杂性。
另一种方法是采用基于区域的方法,在这些方法中,通过面部分割 [1]、[6]、[21]、[22] 检测不同表情下变化最小的面部部分,或者利用它们的表情不变能力 [5]、[14]、[15]、[23] 提取这些部分。斯普鲁沃斯提出了一种基于 PCA-线性判别分析(LDA)特征提取方法的多区域方法 [21]。在区域识别中,来自鼻子、脸颊、额头、下巴和嘴巴等不同掩模的分数被融合以最终确定决策。
阿利乌兹等人采用区域配准算法,结合 LDA 分类器,提出了一种表情鲁棒的三维人脸识别方法 [6]。他们还证明了鼻部区域具有很高的区分能力。奎罗洛等人 [22] 专注于整合多个区域,其中将四个区域(上部面部图像、整个面部和两个鼻部区域)分割并存储用于画廊
📚2 运行结果
主函数代码:
clc
close all
clear all
warning off
%%%%%%%%%%%%% Loading the 2.5 depth map
load Sample_Nose.mat
input_data = rotated_nose;
figure, surf(input_data(:, :, 1), input_data(:, :, 2), input_data(:, :, 3), 'linestyle', 'none')
view(0, 90), camlight left, title('Input data')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% Setting up the landmarks over the depth map
Using_uniform_landmarks = false;
if Using_uniform_landmarks
my_x_res = 5;
my_y_res = 6.5;
my_landmarks = create_uniform_landmarks(input_data, my_x_res, my_y_res);
else
vertical_div = 5;
horiz_div = 5;
my_landmarks = create_landmarks(input_data, L1, L2, E1, E2, N, TIP, SADDLE, vertical_div, horiz_div);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% Plotting the landmarks
figure(1)
hold on,
plot3(my_landmarks(:, 1), my_landmarks(:, 2), my_landmarks(:, 3), 'r.')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% Computing the Gabor-wavelets
max_ori = 4;
max_scale = 4;
all_layers = Gabor_wavelet_computer(input_data, max_ori, max_scale);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% Plotting the Gabor-wavelet output
figure('Name', 'Maximal Gabor-wavelet outputs per orientation', 'NumberTitle','off');
subplot(2, 2, 1),
imagesc(all_layers(:, :, 1))
subplot(2, 2, 2),
imagesc(all_layers(:, :, 2))
subplot(2, 2, 3),
imagesc(all_layers(:, :, 3))
subplot(2, 2, 4),
imagesc(all_layers(:, :, 4))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% Computing the normal vectors
all_normal_maps = Normal_vector_computer(input_data(:, :, 1), input_data(:, :, 2), all_layers);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%% Plotting the normal maps
figure('Name', 'Normal maps plot', 'NumberTitle','off')
for map_cnt = 1: length(all_normal_maps)
curr_map = all_normal_maps{map_cnt};
subplot(2, 2, map_cnt),
imagesc(curr_map)
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% Computing the feature space as the histogram of the spherical patches
R = 11;
hist_bins = [-1: 0.1: 1];
toDisplay = 1;
all_feat = feature_extraction_spheres(input_data(:, :, 1), input_data(:, :, 2), input_data(:, :, 3), my_landmarks, all_normal_maps, R, hist_bins, toDisplay);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%% Plotting the feature space
figure, plot(all_feat), ylim([0, 1.5]), title('Extracted feature vector')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。