Fenrier Lab

人脸姿态估计 (1)

人脸姿态估计指的是根据一幅2维的人脸图像,计算出这个人在实际3维空间中的面部朝向。问题的输入条件就是一张人脸图片,输出自然就是可以表示方位的三个旋转角度 (pitch, yaw, roll),其中 pitch 表示俯仰角(关于x轴的旋转角度),yaw 表示偏航角(关于y轴的旋转角度),roll 表示翻滚角(关于z轴的旋转角度),分别如下面 3 图所示:(说句题外话,如果我们把下面图中的物体看作是一架向我们飞来的飞机,就可以理解为何这三个角要如此命名了) 算法的思路很简单,可以考虑这样一种场景,假设我们有一张标准的3d人脸模型,如果投影和输入图片的人脸大致重合,那么此时 3d 模型的方位就可以看作是图片中人脸在实际空间中的方位了。如果投影和图像的差异很大,那我们再对 3d 模型...
点我阅读更多...

为何要对数据归一化或标准化

对数据进行归一化或者标准化是一种常用的数据预处理步骤,一般给出的解释是消除数据量纲差异对模型训练的影响,为了搞清楚会产生何种影响,我们尝试使用自造的数据集来一次模拟分析。 现在给一个3维空间中的平面 \[z(x, y) = 100 x + 20 y\] 在此平面附近随机生成样本集合 \(S = {(x_i, y_i, z_i)\mid i=1…n, 0\le x \le 10, 0 \le y \le 50}\),然后利用这个样本集来做回归学习,将模型定义为 \[\hat{z}(x, y) = \theta_1 x + \theta_2 y\] 其中 \(\theta_1 , \theta_2\) 便是要训练的系数。 下面我们生成训练数据,方法是在上述平面上取点,并添加随机...
点我阅读更多...

OpenCV 图像处理——描边

实现效果 关键函数 /** * Imgproc.java * @param src 原图 @param dst 目标图 @param kernel 膨胀参数 */ public static void dilate(Mat src, Mat dst, Mat kernel) 实现思路 分离出 alpha 通道; Core.split(img, channels); Mat alpha = channels.get(3); 应用 dilate 函数膨胀; Mat kernel = Mat.ones(thick, thick, CvType.CV_32S) dilate(alpha, alpha, kernel) 为原始图...
点我阅读更多...

OpenCV 图像处理——旋转

实现效果 保持原图内容不发生缩放; 旋转后空缺的区域为透明色; 关键函数 /** * Imgproc.java * 计算旋转矩阵 */ public static Mat getRotationMatrix2D(Point center, double angle, double scale) /** * Imgproc.java * 应用仿射变换 */ public static void warpAffine(Mat src, Mat dst, Mat M, Size dsize, int flags, int borderMode, Scalar borderValue) 实现思路 首先尝试一下最简单的实现 Mat src = ......
点我阅读更多...

用于高效相似搜索的局部敏感哈希算法

问题背景 最近的项目遇到一个问题,我们的程序要不停的处理第三方源源不断发送过来的图片,出于某种需要,如果收到的图片和前面的图片有重复或者相似,那么就不再处理了。由于数据量很大,不可能每收到一张图片就暴力的对比前面的所有图片,所以就需要一种能够快速进行相似搜索的算法。当然类似的问题已经有很多成熟的方案了,这里就记录一下我所理解的局部敏感哈希算法原理。 问题分解 相似搜索大致可以分为下面几个子问题: 对我们要搜索的对象做编码,将需要占据大量内存的图片、文本或者其他什么玩意儿映射成一个字符串或者整数,此编码在这里又被称为签名向量; 选择距离度量函数,确保相似的签名在度量空间中有较近的距离; 建立签名向量的数据结构,使得相似签名可以很高效的搜索出来。 第一个问题我们采用...
点我阅读更多...