基于Gabor-小波滤波深度图表面法线的特征提取算法【通过正常Gabor-小波的直方图进行2D或3D特征提取】研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

文献来源:

通过一种新的五步算法彻底研究了鼻腔区域表达强大的3D面部识别的潜力。首先,粗略检测鼻尖位置,将面部分割、对齐并裁剪鼻部区域。然后,一种非常准确和一致的鼻部地标算法检测鼻部区域的七个关键点。第三步,利用基于Gabor-小波滤波深度图表面法线的特征提取算法,在鼻部区域定位一组球形斑块和曲线,提供特征描述符。最后一步应用基于遗传算法的特征选择器来检测不同面部表情上最稳定的斑块和曲线。该算法在FRGC,博斯普鲁斯海峡和BU-3DFE数据集上提供了最高的基于鼻区域的识别排名。结果与许多使用整个面部域的最先进的3D面部识别算法相当,并且在许多情况下更好。所提出的方法不依赖于复杂的对齐或去噪步骤,当画廊中每个受试者仅使用一个样本时非常稳健,并且不需要地标算法的训练步骤。

原文摘要:

Abstract:

The potential of the nasal region for expression robust 3D face recognition is thoroughly investigated by a novel five-step algorithm. First, the nose tip location is coarsely detected and the face is segmented, aligned and the nasal region cropped. Then, a very accurate and consistent nasal landmarking algorithm detects seven keypoints on the nasal region. In the third step, a feature extraction algorithm based on the surface normals of Gabor-wavelet filtered depth maps is utilised and, then, a set of spherical patches and curves are localised over the nasal region to provide the feature descriptors. The last step applies a genetic algorithm-based feature selector to detect the most stable patches and curves over different facial expressions. The algorithm provides the highest reported nasal region-based recognition ranks on the FRGC, Bosphorus and BU-3DFE datasets. The results are comparable with, and in many cases better than, many state-of-the-art 3D face recognition algorithms, which use the whole facial domain. The proposed method does not rely on sophisticated alignment or denoising steps, is very robust when only one sample per subject is used in the gallery, and does not require a training step for the landmarking algorithm.

虽然之前关于表情不变3D人脸识别的许多研究都集中在表情建模和 检测表情不敏感的面部部位,评估 鼻腔区域用于解决此问题。尽管如此,鼻子仍有许多显着特征使其适合 用于表达稳健识别。由于其判别曲率和凸性[1],它很容易被检测到,很难隐藏而不引起怀疑[2],[3],相对稳定 各种面部表情([1],[4],[5],[6],[7],[8],[9]),很少受到头发和头发引起的意外遮挡的影响 围巾。尽管据报道,鼻子的2D图像具有太少的判别特征,无法用作 人类识别的可靠区域[10],其3D表面有很多 未被发现的潜力。本文进一步研究了用于人类身份认证的三维鼻区和 验证目的,并提出了一种新颖的算法,该算法提供非常高的判别强度,可与 最近的3D人脸识别算法,它使用整个面部域。

所提出的方法基于非常一致和准确的地标算法,克服了 鼻腔区域的强力分割。该算法首先找到鼻尖的大致位置,然后 微调其位置,同时准确确定鼻根的位置并检测对称性 脸的平面。接下来,找到三组地标的位置:鼻下,眼角和鼻翼 槽。这些地标用于通过将多分辨率 Gabor 小波应用于 深度贴图的表面法线。使用两种类型的特征描述符:球形斑块和鼻曲线。 然后使用启发式遗传算法(GA)执行特征选择,最后使用表达式鲁棒 特征描述符适用于著名且广泛使用的3D人脸识别大挑战赛(FRGC)[11],博斯普鲁斯海峡[12]和宾厄姆顿 大学3D面部表情(BU-3DFE)[13]数据集。

结果表明,该算法具有识别鼻腔区域的巨大潜力,从而识别不同部位的面部。 表达式,每个主题的库样本很少。最高一级识别率(R1RR) 实现的是:1) a R1RR 为 97.9 FRGC v2.4 和接收器操作员特征 (ROC) III 的误码率 (EER) 为 2.0% 分别进行实验;2) a R1RR 分别为 98.45% 和 98.5% FRGC的中性与中性样品以及中性样品与非中性样品;3) a R1当每个受试者一个画廊样本用于 FRGC 数据集时,RR 为 96.2% (482个画廊样本(受试者)与4,330个探针样本);4) a R1 RR 博斯普鲁斯海峡数据集的 95.35%,当 2 个受试者的 797,105 次扫描用作探针和 105 个样本集时 中性扫描(每个受试者一个)。

本文的主要贡献是一种新颖的基于表面法线的识别算法,该算法提供了一种彻底的 评估3D鼻部区域的识别潜力。取得的成果不仅比以前更好 3D鼻子识别算法也高于许多采用整个面部的识别算法。这 算法采用新颖、免训练、高度一致和准确的鼻区地标算法 并介绍了基于Gabor小波对表面法向量的响应的鲁棒特征空间。自 定位鼻子上的表达稳健区域 将启发式 GA 特征选择应用于两种不同的 几何特征描述符。由于Gabor小波的平滑效果,因此不需要 复杂的去噪算法。实际上,表面法线只需要简单的中值滤波,甚至 使用嘈杂的数据集,例如 FRGC Spring 2003 文件夹。所提议的方法的另一个优点是 基于快速主成分分析(PCA)的自依赖方法可用于面部姿势矫正。这 无需复杂的姿势校正算法或参考面来微调对齐。

所提出的方法大大扩展了我们之前的工作[4] 在深度图上进行了鼻部地标和识别。本文增加了 地标及其检测精度,并提出了新的特征提取和选择算法。这项工作是 灵感来自最近在 3D [14] 和区域法线向量 [15] 中使用面部法线向量的算法。将新算法与以前的算法进行比较 使用类似方法的方法,在鼻表面计算法线的应用,用于 识别以及验证方案。通过使用多分辨率Gabor小波的能力 处理更多噪声样本的算法得到增强,提供更高的R1 RR 比Li等人的方法[15],该方法排除了嘈杂的FRGC 2003年春季样品。这项工作还扩展了面部曲线的应用,由 Berretti等人([16]和[17]),对鼻球形斑块,产生R 1RR 增加>2%,并显示更高的类 球形贴片的可分离性比3D人脸识别曲线的可分离性。

📚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 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]M. Emambakhsh and A. Evans, "Nasal Patches and Curves for Expression-Robust 3D Face Recognition," in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 39, no. 5, pp. 995-1007, 1 May 2017, doi: 10.1109/TPAMI.2016.2565473.

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2D-FFT的Gabor滤波是一种常用的图像处理方法,可以用于提取掌纹等生物特征。以下是使用 Python 实现 2D-FFT的Gabor滤波提取掌纹特征的示例代码: ```python import cv2 import numpy as np from scipy import fftpack # 读取图像 img = cv2.imread('input.jpg', 0) # 定义Gabor滤波器的参数 ksize = 31 theta = np.pi / 4 sigma = 2 * np.pi gamma = 0.5 psi = 0 # 生成Gabor滤波器的实部和虚部 kernel_real = cv2.getGaborKernel((ksize, ksize), sigma, theta, gamma, 1, psi, ktype=cv2.CV_32F) kernel_imag = cv2.getGaborKernel((ksize, ksize), sigma, theta, gamma, 1, psi + np.pi/2, ktype=cv2.CV_32F) # 对图像进行2D-FFT img_fft = fftpack.fft2(img) # 将滤波器转换为频率域 kernel_real_fft = fftpack.fft2(kernel_real, s=img.shape) kernel_imag_fft = fftpack.fft2(kernel_imag, s=img.shape) # 将滤波器应用于频率域图像 filtered_real = np.real(fftpack.ifft2(img_fft * kernel_real_fft)) filtered_imag = np.real(fftpack.ifft2(img_fft * kernel_imag_fft)) # 计算Gabor滤波器响应的幅值 gabor_response = np.sqrt(filtered_real ** 2 + filtered_imag ** 2) # 显示结果 cv2.imshow('input', img) cv2.imshow('gabor_response', gabor_response) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们首先使用 OpenCV 库中的 `cv2.imread()` 函数读取输入图像,并将其转换为灰度图像。然后,我们定义 Gabor 滤波器的参数,包括滤波器大小、方向、尺度、宽度和相位偏移等。 接下来,我们使用 OpenCV 库中的 `cv2.getGaborKernel()` 函数生成 Gabor 滤波器的实部和虚部。然后,我们使用 SciPy 库中的 `fftpack.fft2()` 函数对输入图像进行二维快速傅里叶变换,将其转换为频率域图像。 接下来,我们将 Gabor 滤波器转换为频率域,并使用 `fftpack.ifft2()` 函数将其应用于频率域图像。然后,我们计算 Gabor 滤波器响应的幅值,并使用 `cv2.imshow()` 函数显示输入图像和 Gabor 滤波器响应,并使用 `cv2.waitKey()` 和 `cv2.destroyAllWindows()` 函数等待用户按下键盘上的任意键以关闭窗口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值