人脸识别之人脸矫正

一般来说,使用 mtcnn 网络检测到人脸后,都需要进行矫正。而对于人脸矫正,最简单的可以通过使用仿射变换来实现。

阅读全文

TensorFlow 的多卡 GPU 训练机制

武汉疫情还没过去,这几天窝在家里琢磨了下 TensorFlow 的多卡 GPU 分布式训练的机制。本文将使用流行的 MNIST 数据集上训练一个 MobileNetV2 模型,并利用 tf.distribute.Strategy 函数实现多卡 GPU 对训练方式。 详细代码见 TensorFlow2.0-Example

阅读全文

说说图像的仿射变换

仿射变换(Affine Transformation)是图像处理中很常见的操作,它在数学上可以表述为乘以一个矩阵 (线性变换) 接着再加上一个向量 (平移)。

其中:

阅读全文

能不能用梯度下降法求解平方根 ?

2020 年春节将至,大部分同事已经回家。回顾下自己的 2019,似乎收获颇丰:不仅顺利毕业,还找了份谋生的工作。这期间看了很多复杂的算法,有监督 or 无监督,目标检测 or 深度估计。而人一旦徜徉在其中,就会渐渐忘记一些基础的东西。是时候回顾一下梯度下降法了….

问题:请尝试使用梯度下降法求解 sqrt{2020} 的值,并精确到小数点后 4 位。

阅读全文

手写双目立体匹配 SGM 算法(下)

上节的内容主要对 SGM 算法的匹配代价体 (Cost Volume) 进行了详细介绍,发现如果只寻找逐个像素匹配代价的最优解会使得视差图对噪声特别敏感。因此在能量方程中考虑使用该点像素的邻域视差数据来构造惩罚函数以增加平滑性约束, 这个求解过程也称为代价聚合 (Cost Aggregation) 的过程。

1. 能量方程

SGM 算法建立了能量方程,并引入了视差约束条件,以对此进行优化:

阅读全文

手写双目立体匹配 SGM 算法(上)

SGM(Semi-Global Matching)是一个基于双目视觉的半全局立体匹配算法,专门用于计算图像的视差。在 SGM 算法中,匹配代价计算是双目立体匹配的第一步,本文将使用 Census Transform 方法对此进行介绍。

1. 读取图片

首先使用 OpenCV 将左图和右图读取进来,并需要将它们转成单通道的灰度图输出。

import cv2
import numpy as np

left_image = cv2.imread("./left.png", 0)
right_image = cv2.imread("./right.png", 0)

阅读全文

双目测距和三维重建

双目相机通过同步采集左右相机的图像,计算图像间视差,来估计每一个像素的深度。一旦我们获取了物体在图像上的每个像素深度,我们便能重构出一些它的三维信息。

双目相机一般由左眼和右眼两个水平放置的相机组成,其距离称为双目相机的基线(Baseline, 记作 b),是双目的重要参数。由于左右两个相机之间有一定距离,因此同一个物体在左右图上的横坐标会有一些差异,称为视差(Disparity)

阅读全文

什么是相机的位姿 ?

在视觉 slam 领域里,相机的位姿是一个特别重要的概念。简单来说,相机的位姿(pose)就是相机的位置和姿态的合称,它描述了世界坐标系与相机坐标系之间的转换关系。

阅读全文

相机的内参和外参

相机的内参和外参是立体视觉的基础,今天做个笔记记录下。

1. 相机模型

照片的本质是真实的 3D 场景在相机的成像平面上留下的一个投影,最早的相机是在小孔成像的基础上发展起来的,下面这幅图简单地解释了相机的成像过程。

阅读全文

基于卷积神经网络的 2D-to-3D 视频转换

目前制作 3D 电影的方法有两种:一种是直接用昂贵的立体相机设备进行拍摄,这种制作成本非常庞大。另一种则是通过图像处理技术将 2D 电影转化成 3D 格式,这种转换处理通常依赖于“深度艺术家”,他们手工地为每一帧创造深度图,然后利用标准的基于深度图像的渲染算法将与原始图像相结合,得到一个立体的图像对,这需要大量的人力成本。现在来说,每年只有 20 左右部新的 3D 电影发行。

Deep3D 网络

阅读全文