
# 基于傅里叶特征的深度数据行人检测

维克托·塞布 $^{\circledR}$，吉多·施密特、米夏埃尔·库森巴赫、迪特里希·保卢斯

德国科布伦茨-兰道大学主动视觉研究组（AGAS），大学街1号，56070 科布伦茨

{vseib,guidoschmidt,mkusenbach,paulus}@uni-koblenz.de <http://agas.uni-koblenz.de>

摘要：稳健可靠的行人检测对诸多应用而言都至关重要。在本文关注的服务机器人领域，获知行人位置是实现任何有意义人机交互的核心要求。本文提出一种人体检测算法，可利用Kinect类相机获取的RGB-D数据完成检测。我们从数据中提取出两个表征人体几何特性的特征，通过离散傅里叶变换（DFT）将这些特征变换到频域，之后用于训练支持向量机（SVM）进行分类。此外，本文还提出一种基于提取得到的人体轮廓的手部检测算法。我们在康奈尔活动数据集和本文实验室构建的真实数据集上对所提方法进行了评估。

关键词：人体检测 · 轮廓检测 · 手部检测 · 傅里叶特征 · 服务机器人

## 1 引言

服务机器人能否正确响应用户发出的指令，很大程度上取决于机器人能否可靠检测出交互对象的位置。除了行人本身的位置之外，行人双手的位置对自然交互而言也十分重要，这是因为人们在交互中习惯使用手势。服务机器人在日常运行中需要识别的重要手势包括：指向感兴趣的位置或物体、举手吸引注意、挥手召唤机器人等。

随着低成本RGB-D相机的普及，行人检测问题可以结合RGB相机数据与基于深度数据的几何信息解决（图1）。本文提出的方法通过计算两个全新特征来利用这些信息。第一步，对输入数据进行基于模型的搜索，筛选出可能的行人候选区域。对每个候选区域计算两个特征：正面特征和宽度特征。为得到低维特征向量，计算得到的特征会通过离散傅里叶变换变换到频域。

---

![Image](images/b58317529a6a43abceff32b16da703101f92e848879d5eec3af9e5ce3031766d.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/81a99cdc6e380c45a973e90e0b55dbf028501f90c4ca65c54eac38a742d10203.jpg)

<div style="text-align: center;">(b)</div>

<div style="text-align: center;">Fig. 1. Example RGB image (a) and the corresponding depth image (b) taken from the Cornell Activity Dataset [^14].</div>

（DFT），随后基于得到的傅里叶系数训练支持向量机（SVM）。本文提出的方法可以检测处于不同姿态、不同朝向相机的站立和坐姿行人。此外，对于正面朝向的行人，该方法可结合从人脸提取的肤色信息与已检测得到的人体轮廓上各候选手部区域之间的距离完成手部检测。该方法已成功应用于本文实验室的服务机器人Lisa上。

下文第2节将简要回顾行人检测尤其是深度数据行人检测领域的相关工作。第3节和第4节将详细描述本文提出的方法，介绍所设计的特征。最后，第5节给出在康奈尔活动数据集 [^14] 和本文实验室采集的数据集上得到的评估结果，并对结果进行讨论。本文在第6节进行总结，对未来工作进行了展望。

## 2 相关工作

过去几年，已有多种利用深度数据开展人体检测与跟踪的方法被提出。然而，采集这些数据的实际设备一直在发展更新。几年前，行业普遍使用激光传感器或成本高昂的立体相机系统。例如，Bertozzi等人[^1]采用了RGB立体装置结合红外立体相机的组合方案，提取方向梯度直方图（HOG）用于分类。HOG特征并非仅用于RGB数据，Dalal和Triggs[^5]的研究就是典型案例。该特征也被适配到深度数据领域，得到了Spinello和Arras[^13]提出的方向深度直方图（HOD）检测器。HOG和HOD的组合也得到了应用，相关案例可见[^7]中的展示。

机器学习方法也被应用于形状匹配，例如Xia等人[^11]所描述的方法。Xia等人利用倒角距离匹配寻找人体位置的候选区域，再利用一个三

---

![Image](images/ae3d4826cad72e10ef892d0753345210355cf7a6db923e32f3e9a41890ac2639.jpg)

<div style="text-align: center;">Fig. 2. The resulting depth histogram and the corresponding extracted depth slices are represented as binary images.</div>

维头部模型对这些候选区域进行检验。其他方法使用距离变换，提取检测到的人体的联合表示，这正如Lee等人在[^10]中展示的那样。

Paisitkriangkrai等人[^12]提出在一组协方差描述子上进行空间池化来提取特征。Choi等人[^4]提出了一种基于蒙特卡洛的粒子滤波方法。该方法所用的描述子以HOG为基础，同时结合从人体候选区域上半身提取得到的形状向量，能够处理动态场景。

和Choi等人的方法类似，我们的算法同样基于肩部区域和头部的形状提取。但我们使用了2种专门为从深度数据中检测轮廓设计的特征。按照Hordern和Kirchner [^8]提出的方案，我们同样在将特征用于SVM训练和分类之前，用DFT对特征进行变换。

## 3 人体检测

本节我们将介绍本文提出的轮廓检测算法。在后文描述中，我们采用右手坐标系，其中x轴指向正前方，y轴指向左侧，z轴指向上方。

### 3.1 候选区域检测

为了找到人体检测的候选区域，我们首先沿深度轴（即x轴）计算点直方图，随后开展基于模型的搜索。输入点云沿深度轴被划分为厚度均匀的切片。在我们的实验中，每个切片的厚度为$a = 0.1m$。每个切片对应直方图的一个区间，存储该切片内的点数量。这种直方图的设计思路是：潜在物体会在场景中形成局部点簇。我们通过寻找直方图内的局部极小值来定位这些物体，目标物体被认为位于提取出的这些局部极小值之间。

下一步，我们沿直方图极小值对应的位置对点云重新切片，如图2所示。针对每个深度切片，仅通过考虑位于对应

---

![Image](images/48b5dac7bda83cba7c5a12b3fd60997aa865d7a5b236c0ccbec6a0c0f7d71736.jpg)

<div style="text-align: center;">Fig. 3. The RGB data of a person's silhouette (a) and the corresponding binary image (b and c) is shown. The head model assumptions are illustrated in (b), whereas the occupancy of test regions is shown in (c).</div>

切片内的点生成二值图像I。我们在这组二值图像$I_{0}\ldots I_{n}$上开展基于模型的搜索，以寻找人体候选区域。

首先，我们提取每个二值图像$I_i(v_h, w_h)$中纵轴上的局部最大值$I_i$。这些位置是候选的头部位置，需要根据我们的模型假设进行验证。由于二值图像由点云生成，每个有效（即“白色”）像素$I_i(v, w)$都对应一个已知的三维点。这使得我们可以在度量空间而非像素空间中定义模型参数。下文将使用函数$\mathcal{P}(I(v, w))$，从二值图像中的某个像素$p = (x, y, z)^T$得到对应的三维点$I(v, w)$。此外，我们使用逆函数$\mathcal{Q}(p)$，从有序点云中的三维点p得到其在二值图像中对应的像素。彩色像素到深度像素的实际映射（反之亦然）取决于数据集（参见第5节）。

我们的模型假设包含典型的头部宽度$\theta_{w}$和高度$\theta_{h}$（给定了最小和最大有效尺寸范围），并包含对可能头部尺寸的近似计算，如图3所示。要将局部最大值$I_{i}(v_{h}, w_{h})$选为候选，必须满足以下条件：首先，需要存在一个有效的像素$I(v_{m}, w_{m})$（中点），定义为

 $$ I(v_{m},w_{m})=\mathcal{Q}(p_{v_{m},w_{m}})=\mathcal{Q}(p_{v_{h},w_{h}}-(0,0,\frac{\theta_{h}}{2})^{T}). $$

它位于二值图像中，对应最大值下方的点$\frac{\theta_{h}}{2}$。公式1要求头部至少上半部分必须可见。

另外两个点，即头部的左边界点$I(v_l, w_l)$和右边界点$I(v_r, w_r)$，需要在二值图像中设置在与中点$I(v_m, w_m)$相同的高度处，满足约束条件

 $$ \theta_{h,m i n}<||\mathcal{P}(I(v_{l},w_{l}))-\mathcal{P}(I(v_{r},w_{r}))||<\theta_{h,m a x}. $$

得到的值 $\theta_w = ||\mathcal{P}(I(v_l, w_l)) - \mathcal{P}(I(v_r, w_r))||$ 就是假设的头部宽度。按照这种基于模型的搜索处理完所有二值图像后，我们得到了一组具有类人头部

---

![Image](images/69a1127acf58ea9cf50d3afd255d90f30e004c572baea852903bf1594de15864.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/c4a10e4b0575d7c9e830ac27dedaa804dbb49285bda602d192217603c57e19cc.jpg)

<div style="text-align: center;">(b)</div>

![Image](images/2340f19f7765b41aefda85cc0d369e8c7bbd91dcea0c772ce20d0ce453cbe759.jpg)

<div style="text-align: center;">(c)</div>

<div style="text-align: center;">Fig. 4. The image section R used to extract the frontal feature is shown in (a). The contained part of the silhouette is shown in (b). Image (c) shows the frontal silhouette from the side. The horizontal line in (c) is the mean distance value in region R.</div>

![Image](images/948ec93b854503cb9f088b048dcdcf47e794acfc8e9f62567fd560f35a1afcab.jpg)

<div style="text-align: center;">Fig. 5. The extracted values  $d_w$ and  $r_w$ for the frontal features are shown. This figure corresponds to figure 4(c) rotated by  $90^\circ$ to the left. The axes are labeled according to the same coordinate system used for feature extraction. The resulting curve is the input data for the DFT.</div>

特征的目标假设，其特征体现在最高位置处。请注意，这种基于模型的头部近似计算，比在二值图像的局部最大值周围拟合圆的计算速度更快。

我们通过计算检测到的假设头部周围四个测试区域内二值图像的填充像素占比，进一步优化这组假设。第一个区域是头部最高点上方、高度为$\frac{\theta_h}{2}$、宽度为$\theta_w$的区域。接下来，我们检测两个大小相等的区域，一个位于头部左侧，另一个位于头部右侧。第四个也是最后一个区域位于头部下方，一直延伸到对应二值图像的底部。我们对每个区域计算二值图像中的填充像素占比。理想情况下，头部上方、左侧和右侧的区域都应该是空的。而头部下方的区域则应该完全被填充，代表假设的人体躯干和腿部。由于躯干前方可能存在物体遮挡，在计算底部区域的填充像素占比时，我们也会考虑检测到的候选前方深度切片中的像素。应用这些基于模型的规则后，

---

可能人员的搜索空间就从整个输入点云缩小到了一组人员候选。

### 3.2 特征

为了进一步分类，我们提议为每个候选提取两个特征：正面特征（Frontal Feature）和宽度特征（Width Feature）。这两个特征都非常适合区分人员和物体，下文将对其进行描述。

正面特征。我们设计正面特征的目的是编码一个人面部和上半身的正面深度轮廓。该特征利用预先提取的头部和躯干二值图像以及对应的点云计算得到。因此，头部的位置、宽度和高度都是已知的。我们提取一个图像区域R，其在水平方向以头部为中心。垂直方向上，R以最高点$I_i(v_h, w_h)$为起点，由参数b确定区域的高度（图4）。我们的实验中，当$b = 0.5m$时我们得到了最佳结果。最终得到的区域覆盖了候选者的头部和上半身。对于二值图像区域R内的每个像素行w，我们计算该行所有点的平均深度值$r_w$，公式如下：

 $$ r_{w}=\frac{\sum_{v=0}^{V}\mathcal{P}_{x}(R(v,w))}{V} $$

式中V是R的像素宽度，$R(v, w)$是R内的一个像素，$\mathcal{P}_x(R(v, w))$是一个函数，返回像素$R(v, w)$对应点的x值（即前向轴上的值。这种计算方式能够对头部旋转、侧向移动以及传感器噪声都具有一定的稳定性。此外，我们计算每一行w到最高点$d_w$的距离$I(v_h, w_h)$，公式如下：

 $$ d_{w}=\frac{\sum_{v=0}^{V}\mathcal{P}_{z}(R(v,w))}{V}-\mathcal{P}_{z}(I(v_{h},w_{h})) $$

式中$\mathcal{P}_z$的定义与$\mathcal{P}_x$类似，但它返回z值（即垂直坐标）。至此，我们已经得到每一行对应的平均深度值$r_w$，以及该行到最高点的垂直距离$d_w$。对于面向摄像头的人物，得到的正面轮廓可视化结果如图4所示。从R中计算得到的$r_w$和$d_w$如图5所示。根据人物相对于摄像头的朝向不同，该特征会生成不同的轮廓。

宽度特征。该特征利用了面向传感器的人物肩部宽度大于头部宽度这一特性。我们同样将感兴趣区域R的高度设置为b=0.5m，R的宽度等于二值图像的宽度。我们在二值图像的每一行中提取最左侧$\mathcal{P}(R(v_l, w_l))$和最右侧$\mathcal{P}(R(v_r, w_r))$的有效点，通过下式得到行宽$b_w$：

 $$ b_{w}=||\mathcal{P}_{y}(I(v_{l},w_{l}))-\mathcal{P}_{y}(I(v_{r},w_{r}))||, $$

---

式中$\mathcal{P}_{y}$返回水平轴上的值。此外，我们同样会使用每一行到头部最高点$d_{w}$的垂直距离$I(v_{h}, w_{h})$。

### 3.3 傅里叶特征向量

这两种特征都可以看作是关于候选头部最高点的距离$d_{w}$的函数。对于正面特征，函数值是平均深度值$r_{w}$；对于宽度特征，函数值是候选轮廓的宽度$b_{w}$。我们为每个候选计算这两个特征，再通过傅里叶变换将其转换到频域。由于我们得到的是离散函数（经二值图像的行离散化），因此使用离散傅里叶变换（DFT）。实际的特征向量由计算得到的傅里叶系数构成。我们可以通过舍弃高频傅里叶系数来调整特征向量的长度。原始计算得到的特征长度为50，傅里叶变换后我们仅保留前6个系数。图7展示了与第一个傅里叶系数对应的多条正弦曲线。与Hordern等人的研究[^8]不同，该研究中将特征向量除以常数分量，因此得到的特征是尺度不变的，我们

![Image](images/b2402da7c23b382bd1b66fff08ac71963a2b84eeebd714ba9da8f6a2a8e73b32.jpg)

<div style="text-align: center;">Fig. 6. Omitting the constant component of the Fourier Transform results in a distance independent feature vector sinusoid (shown in red), in contrast to the distance dependent sinusoid with the constant component (shown in green).</div>

![Image](images/f139bf7081e2070a3a2389db00b48790f3ab1213aa1281ce4db9e45ef43e582c.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/8825d0713b03ae7cd5f84458b4e315469dd7b3008d3bd52b282bb254ad7db383.jpg)

<div style="text-align: center;">(b)</div>

<div style="text-align: center;">Fig. 7. The sinusoids corresponding to the first Fourier coefficient of several human silhouettes are depicted in (a). The outliers stem from partially visible silhouettes at image borders. Image (b) shows the first sinusoids of different objects.</div>

---

在不进行除法运算的前提下从特征向量中剔除常量分量。在我们的研究场景中，这会让特征向量对行人与传感器之间的距离保持不变性（图6）。我们的特征基于度量数据，尺度是行人检测过程中的重要因素。因此我们不需要尺度不变特征，这样就能避免把轮廓相似但尺寸不同的物体（比如玩偶这类玩具）误检测为人。最终得到的特征向量用于训练带有径向基函数核（RBF）的支持向量机（SVM）。

## 4 手部检测

由于我们的研究目标是实现与人的交互，因此我们重点检测抬起伸展的手臂的手部。这类动作是寻求注意的信号，因此应当被服务机器人识别出来。

![Image](images/2fe4f66f90d37fd9b667b1f120a970b5b4c41fa1860298efbc6d86e0118f5f26.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/b91b5eb56f7c0ea82222cf004f023e83da131431bc0a9d63eefc73c92654b83c.jpg)

<div style="text-align: center;">(b)</div>

![Image](images/24a80231dc43b514e16f8f5e80959a60fc8a1b6651e88959fec5aa9a95e607c9.jpg)

<div style="text-align: center;">(c)</div>

<div style="text-align: center;">Fig. 8. Illustration of the geometric model to determine the distance between any silhouette point  $\mathcal{P}(M(v,w))$ and the centroid s. Image (a) shows the RGB data of the silhouette, while (b) shows the binary image. In image (c) the distance matrix D is depicted.</div>

从已检测到的行人已知的最高像素$I(v_h, w_h)$出发，我们在二值图像上执行区域增长。区域增长采用4邻域规则。对于两个相邻像素$I(v_a, w_a)$和$I(v_b, w_b)$，其中$I(v_a, w_a)$已经属于当前区域，$I(v_b, w_b)$需要满足两个条件才能被加入区域。首先，它对应的三维点$\mathcal{P}(I(v_b, w_b))$与区域内某点的三维点$\mathcal{P}(I(v_a, w_a))$之间的距离不能大于阈值$c_1$：

 $$ |\mathcal{P}(I(v_{a},w_{a}))-\mathcal{P}(I(v_{b},w_{b}))||<c_{1}. $$

此外，该点与头顶最高点对应三维点$c_2$之间的距离必须在范围$\mathcal{P}(I(v_h, w_h))$内：

 $$ ||\mathcal{P}(I(v_{h},w_{h}))-\mathcal{P}(I(v_{b},w_{b}))||<c_{2}. $$

---

与初始二值图像I相比，最终得到的二值图像M仅包含行人的轮廓（不包含可能的背景杂波）。接下来我们使用两个线索检测手部：分别考虑手部相对于身体的距离，以及利用肤色信息。

### 4.1 距离线索

为了利用距离线索，我们将轮廓二值图像M中检测到的人体简化为一条穿过轮廓质心的竖直线。质心由轮廓的所有三维点计算得到，使用点p表示为

 $$ p=\begin{cases}{\mathcal{P}(M(v,w))}&{\mathrm{i f~}M(v,w)=1}\\ {(0,0,0)^{T}}&{\mathrm{e l s e}}\\ \end{cases}. $$

质心s即为所有点的平均值

 $$ s=\frac{\sum_{v=0}^{V}\sum_{w=0}^{W}\mathcal{P}(M(v,w))}{\sum_{v=0}^{V}\sum_{w=0}^{W}M(v,w)} $$

其中V和W分别代表图像的宽度和高度。请注意，由于二值图像M中的所有像素值仅为1或0，因此公式9分母计算的是轮廓二值图像M中有效像素的数量。我们用一个平行于参考坐标系纵轴的方向向量$\boldsymbol{a} = (0, 0, 1)^T$表示穿过点s的轮廓质心线。现在我们可以计算从轮廓图像中任意点$\boldsymbol{b}_{v,w}$指向质心s的方向向量$\mathcal{P}(M(v,w))$为

 $$ \boldsymbol{b}_{v,w}=s-\mathcal{P}(M(v,w)). $$

如图8(b)所示，给定点$M(v, w)$的距离d可以通过叉积计算得到

 $$ d_{vw}=\left\|a\times b_{v,w}\right\| $$

并据此生成距离矩阵D

 $$ D(v,w)=\begin{cases}{d_{v w}}&{\mathrm{i f}\mathcal{P}(M(v,w))=1}\\ {0}&{\mathrm{e l s e}}\\ \end{cases}. $$

### 4.2 肤色

我们将肤色作为手部检测的第二个线索。采用检测到的行人面部颜色作为参考颜色。请注意，此时行人的轮廓已经完成分割，因此肤色检测不会受到环境中杂波的影响。

为了提取具有代表性的肤色，我们将面部区域的RGB数据转换到HSV空间，然后生成颜色直方图。HSV颜色空间具有

---

<div style="text-align: center;">Table 1. Dataset samples from the Cornell Activity Dataset [^14] used to evaluate the people detection algorithm</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td colspan="4">Person 1</td><td colspan="4">Person 2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>subset</td><td style='text-align: center; word-wrap: break-word;'>action</td><td style='text-align: center; word-wrap: break-word;'>pose</td><td style='text-align: center; word-wrap: break-word;'># images</td><td style='text-align: center; word-wrap: break-word;'>subset</td><td style='text-align: center; word-wrap: break-word;'>action</td><td style='text-align: center; word-wrap: break-word;'>pose</td><td style='text-align: center; word-wrap: break-word;'># images</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(A)</td><td style='text-align: center; word-wrap: break-word;'>brushing teeth</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>1351</td><td style='text-align: center; word-wrap: break-word;'>(A)</td><td style='text-align: center; word-wrap: break-word;'>still</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>482</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(B)</td><td style='text-align: center; word-wrap: break-word;'>drinking water</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>1746</td><td style='text-align: center; word-wrap: break-word;'>(C)</td><td style='text-align: center; word-wrap: break-word;'>drinking water</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>508</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(C)</td><td style='text-align: center; word-wrap: break-word;'>wearing contact lenses</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>440</td><td style='text-align: center; word-wrap: break-word;'>(F)</td><td style='text-align: center; word-wrap: break-word;'>opening pill container</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>210</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(E)</td><td style='text-align: center; word-wrap: break-word;'>working on laptop</td><td style='text-align: center; word-wrap: break-word;'>sitting</td><td style='text-align: center; word-wrap: break-word;'>1265</td><td style='text-align: center; word-wrap: break-word;'>(I)</td><td style='text-align: center; word-wrap: break-word;'>cooking (stirring)</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>442</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(H)</td><td style='text-align: center; word-wrap: break-word;'>talking on the phone</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>1442</td><td style='text-align: center; word-wrap: break-word;'>(L)</td><td style='text-align: center; word-wrap: break-word;'>writing on white board</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>609</td></tr><tr><td colspan="4">Person 3</td><td colspan="4">Person 4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>subset</td><td style='text-align: center; word-wrap: break-word;'>action</td><td style='text-align: center; word-wrap: break-word;'>pose</td><td style='text-align: center; word-wrap: break-word;'># images</td><td style='text-align: center; word-wrap: break-word;'>subset</td><td style='text-align: center; word-wrap: break-word;'>action</td><td style='text-align: center; word-wrap: break-word;'>pose</td><td style='text-align: center; word-wrap: break-word;'># images</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(A)</td><td style='text-align: center; word-wrap: break-word;'>still</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>374</td><td style='text-align: center; word-wrap: break-word;'>(A)</td><td style='text-align: center; word-wrap: break-word;'>still</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>276</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(D)</td><td style='text-align: center; word-wrap: break-word;'>still</td><td style='text-align: center; word-wrap: break-word;'>sitting</td><td style='text-align: center; word-wrap: break-word;'>474</td><td style='text-align: center; word-wrap: break-word;'>(F)</td><td style='text-align: center; word-wrap: break-word;'>opening pill container</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>215</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(H)</td><td style='text-align: center; word-wrap: break-word;'>opening pill container</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>245</td><td style='text-align: center; word-wrap: break-word;'>(G)</td><td style='text-align: center; word-wrap: break-word;'>opening pill container</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>346</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(M)</td><td style='text-align: center; word-wrap: break-word;'>walk around</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>511</td><td style='text-align: center; word-wrap: break-word;'>(J)</td><td style='text-align: center; word-wrap: break-word;'>cooking (choping)</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>390</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>(Q)</td><td style='text-align: center; word-wrap: break-word;'>wearing contact lenses</td><td style='text-align: center; word-wrap: break-word;'>standing</td><td style='text-align: center; word-wrap: break-word;'>447</td><td style='text-align: center; word-wrap: break-word;'>(K)</td><td style='text-align: center; word-wrap: break-word;'>working on computer</td><td style='text-align: center; word-wrap: break-word;'>sitting</td><td style='text-align: center; word-wrap: break-word;'>411</td></tr></table>

已被证明是用于皮肤和手部检测的可靠色彩空间[^9]、[^3]、[^6]。不过，色彩空间的具体选择并不关键，因为我们实际上并不是在检测肤色，而是将人脸颜色与分割后轮廓上的可能手部位置进行对比。

生成的直方图会呈现肤色的聚类特征。为了剔除直方图中来自头发、眉毛、眼睛或嘴唇的颜色，我们仅使用直方图中数值较高的类别。从数值最高的类别开始，逐步添加其他高值类别，直到有效类别中的像素数量超过预先设定的阈值。检测过程中，任何颜色属于直方图有效类别的像素都会被判定为肤色。得到的肤色结果和对应像素会存储在独立的二值图像S中。两种线索结合得到手部置信度图M，如下式所示：

 $$ M_{h a n d}(v,w)=\alpha\cdot D(v,w)+\beta\cdot\frac{S(v,w)}{m a x(S)} $$

其中$\alpha$和$\beta$为两个权重，$max(S)$为基于直方图最大值的归一化值。需要注意的是，距离值不需要单独进行归一化，因为它已经处于度量空间中。为了验证候选手部，我们计算$M_{hand}$内部的最大值。排除第一个最大值本身及其邻域区域后，使用剩余值计算第二个最大值，由此即可得到一个人的两只手。

## 5 评估与结果

我们使用来自康奈尔活动数据集[^14]的样本集对人体检测算法进行了评估。该数据集由微软Kinect采集，提供的RGB图像和深度图像已经对齐，因此手动对齐并不

---

<div style="text-align: center;">Table 2. Person detection results with different features applied</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td colspan="5">Frontal Feature</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Person 1</td><td style='text-align: center; word-wrap: break-word;'>Person 2</td><td style='text-align: center; word-wrap: break-word;'>Person 3</td><td style='text-align: center; word-wrap: break-word;'>Person 4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>0.679</td><td style='text-align: center; word-wrap: break-word;'>0.958</td><td style='text-align: center; word-wrap: break-word;'>0.606</td><td style='text-align: center; word-wrap: break-word;'>0.887</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>0.999</td><td style='text-align: center; word-wrap: break-word;'>0.904</td><td style='text-align: center; word-wrap: break-word;'>0.940</td><td style='text-align: center; word-wrap: break-word;'>0.960</td></tr><tr><td colspan="5">Width Feature</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Person 1</td><td style='text-align: center; word-wrap: break-word;'>Person 2</td><td style='text-align: center; word-wrap: break-word;'>Person 3</td><td style='text-align: center; word-wrap: break-word;'>Person 4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>0.684</td><td style='text-align: center; word-wrap: break-word;'>0.887</td><td style='text-align: center; word-wrap: break-word;'>0.468</td><td style='text-align: center; word-wrap: break-word;'>0.973</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>0.976</td><td style='text-align: center; word-wrap: break-word;'>0.904</td><td style='text-align: center; word-wrap: break-word;'>0.996</td><td style='text-align: center; word-wrap: break-word;'>0.955</td></tr><tr><td colspan="5">Frontal &amp; Width Feature</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Person 1</td><td style='text-align: center; word-wrap: break-word;'>Person 2</td><td style='text-align: center; word-wrap: break-word;'>Person 3</td><td style='text-align: center; word-wrap: break-word;'>Person 4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>0.684</td><td style='text-align: center; word-wrap: break-word;'>0.983</td><td style='text-align: center; word-wrap: break-word;'>0.575</td><td style='text-align: center; word-wrap: break-word;'>0.973</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>0.977</td><td style='text-align: center; word-wrap: break-word;'>0.860</td><td style='text-align: center; word-wrap: break-word;'>0.885</td><td style='text-align: center; word-wrap: break-word;'>0.964</td></tr></table>

![Image](images/1d96cde9132a098ed4556871aeb4941d464a08d00f6a4d0ceea532a7e8d499a1.jpg)

![Image](images/b2e788dcc2820cbb99091e8b7b0880be3e1a1ca4520239f9d9d98cc84be38a71.jpg)

![Image](images/92edf1a32bd4864dff12497ec2376dbef505ccbb275a96935c6442fff1b17f11.jpg)

<div style="text-align: center;">Fig. 9. Precision and recall results on the three different configurations</div>

必要。我们使用了CAD-60子集，该子集原本包含60段RGB-D视频，由4名受试者（2名男性、2名女性）记录了不同的居家活动。评估时，我们按照表1所示，使用了数据集中每名受试者的5个子集。由于该测试数据集原本是用于评估动作识别的，因此我们必须手动为各图像标注人物的正确位置。该数据集仅用于评估人体检测，因为它没有提供足够的手势信息。我们将60%的图像用于训练，剩余40%用于测试。共进行了三次评估：仅使用正面特征、仅使用宽度特征，最后同时使用两种特征。结果展示在表2和图9中。

从表2可以看出，正面特征和宽度特征的召回率在所有情况下均高于90%。但根据结果无法明确判断哪一种特征效果最佳。另一方面，两种特征结合使用时召回率反而下降，这说明仅使用其中一种提出的特征更优。总体来看，所有情况下准确率都低于召回率，这说明我们的算法更倾向于漏检人物，而非在没有人物的区域误检人物。这种特性很大程度上源于第3节所述的候选检测步骤的参数设置，可以通过调整参数进行修改。尽管如此，我们的算法仍然无法检测某些姿势，主要是靠近高物体站立或弯腰

---

物体的识别率较低。此外，当头部被遮挡时会出现检测问题。

为评估手部检测性能，我们使用自制数据集开展测试，该数据集包含457张测试图像。为构建该数据集，我们采用成熟技术对传感器进行校准 [^15], [^2]，以实现RGB图像与深度图像的精准对齐。本次手部检测的召回率为73%，精确率为79%。检测出现的主要问题来源于复杂光照场景：这类场景下手部与面部肤色存在差异，因此无法正确检测出手部。

## 6 结论与展望

本文提出了一种基于RGB-D数据的人体检测系统。该系统从输入点云提取候选人体区域，在候选轮廓上计算两种新型傅里叶特征，并将其用于分类。实验结果表明，单次仅使用其中一种特征获得的效果优于同时结合两种特征的方案。当仅使用一种特征时，所有场景下的召回率均高于90%；精确率虽有所降低，但仍维持在较高水平。本文提出的手部检测算法召回率与精确率均超过70%。这些优异的结果验证了本文所提轮廓与手部检测方法的有效性。

在当前版本中，我们的算法面临弯腰人体的检测挑战，因为这类姿态不符合我们“头部位于躯干正上方”的人体模型假设。未来工作将重点优化算法，调整我们的几何人体模型。我们会扩展检测范围：除了检查头部下方的检测区域，还将增加对角线方向的检测，从而实现对弯腰人体的检测。

## 参考文献

[^1]: Bertozzi, M., Broggi, A., Del Rose, M., Felisa, M., Rakotomamonjy, A., Suard, F.: A pedestrian detector using histograms of oriented gradients and a support vector machine classifier. In: Intelligent Transportation Systems Conference, ITSC 2007, pp. 143–148. IEEE (2007)

[^2]: Brown, L.G.: A survey of image registration techniques. ACM Computing Surveys (CSUR) 24(4), 325–376 (1992)

[^3]: Cerlinca, T.L., Pentiuc, S.G., Vatavu, R.D., Cerlinca, M.C.: Hand posture recognition for human-robot interaction. In: Proceedings of the 2007 Workshop on Multimodal Interfaces in Semantic Interaction, pp. 47–50. ACM (2007)

[^4]: Choi, W., Pantofaru, C., Savarese, S.: Detecting and tracking people using an rgb-d camera via multiple detector fusion. In: 2011 IEEE International Conference on Computer Vision Workshops (ICCV Workshops), pp. 1076–1083. IEEE (2011)

[^5]: Dalal, N., Triggs, B.: Histograms of oriented gradients for human detection. In: IEEE Computer Society Conference on Computer Vision and Pattern Recognition, CVPR 2005, vol. 1, pp. 886–893 (June 2005)


## [^6]: Ghosh, S., Zheng, J., Chen, W., Zhang, J., Cai, Y.: Real-time 3d markerless multiple hand detection and tracking for human computer interaction applications. In: Proceedings of the 9th ACM SIGGRAPH Conference on Virtual-Reality Continuum and its Applications in Industry, pp. 323–330. ACM (2010)


---

[^7]: González, D.I.R., Hayet, J.-B.: Fast Human Detection in RGB-D Images with Progressive SVM-Classification. In: Klette, R., Rivera, M., Satoh, S. (eds.) PSIVT 2013. LNCS, vol. 8333, pp. 337–348. Springer, Heidelberg (2014)

[^8]: Hordern, D., Kirchner, N.: Robust and efficient people detection with 3-d range data using shape matching. In: Australasian Conference on Robotics and Automation (2010)

[^9]: Kakumanu, P., Makrogiannis, S., Bourbakis, N.: A survey of skin-color modeling and detection methods. Pattern Recognition 40(3), 1106–1122 (2007)

[^10]: Lee, S.J., Nguyen, D.D., Jeon, J.W.: Design and Implementation of Depth Image Based Real-Time Human Detection. Journal of Semiconductor Technology and Science 14(2), 212–226 (2014)

[^11]: Xia, L., Chen, C.-C., Aggarwal, J.K.: Human Detection Using Depth Information by Kinect. In: International Workshop on Human Activity Understanding from 3D Data in Conjunction with CVPR (HAU3D) (2011)

[^12]: Paisitkriangkrai, S., Shen, C., van den Hengel, A.: Strengthening the Effectiveness of Pedestrian Detection with Spatially Pooled Features. CoRR, abs/1407.0786 (2014)

[^13]: Spinello, L., Arras, K.O.: People detection in RGB-D data. In: IEEE/RSJ Int. Conf. on (2011)

[^14]: Sung, J., Ponce, C., Selman, B., Saxena, A.: Human activity detection from rgbd images. plan, activity, and intent recognition, 64 (2011)

[^15]: Zhang, Z.: A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence 22(11), 1330–1334 (2000)
