专栏首页深度学习和计算机视觉使用相机暗箱公式和透镜方程估计人脸距离

使用相机暗箱公式和透镜方程估计人脸距离

本文的目的是了解相机设备的工作原理,并利用它结合人脸检测算法计算给定一幅图片中人脸的距离。

针孔相机

“光是由上帝第一次创造,也是大自然给人类最重要的礼物之一...”

定义

作为一个开始,我们首先给出一个光的定义:光是一种可以由正常人类眼睛感知到的物质。

也许这不是一个深刻的定义,但它让我们开始探索光,测试光的存在。我们能看到一个物体,那是因为光进入了眼睛。如果一个物体发出光,那么我们说它是光源。自身可以发出光的物体称为发光源。其他物体被称为照明源,只有当发光源的光照在它们身上时才会发出光(就像月亮一样)。

相机暗箱,类似于没有携带镜头和胶片的现代相机;该设备将倒置的图像投射到墙上或画布上。它是最简单的光学设备,允许在屏幕上获得物体的图像,也被称为针孔相机。

历史

中国人最早在公元前5世纪发现,如果一个人在一个昏暗的房间的墙上做了一个小孔,就会通过针孔投影到小孔对面的墙上形成一个倒置的图像。无论对面的墙有多远,图像都会投影到墙上。缩短或延长距离会改变投影图像的大小。

阿拉伯学者Abu Ali al-Hassan ibn al-Haytham(公元10世纪),在他的著作(光学书籍)中描述了相机暗箱,强调了孔径大小与图像清晰度之间关系的重要性。

第一个用于创作艺术绘画的光学设备是由生活在1452-1519年的大师达芬奇创造的。它的描述可以在“绘画论著”中看到,作者在其中谈到了光学器件的工作原理。

大约1519年,达芬奇(1452-1519)写道:“当被照亮的物体的图像...透过一个小洞进入一个非常黑暗的房间...你会看到[在对面的墙上]这些物体的适当形式和颜色,尺寸缩小...由于光线的交叉在一个相反的位置”。

原理

示例1:针孔相机

现在,我们的目标是找到焦距(f)与物体高度(HI=KJ)、图像大小(LM=EF)和物体与摄像机(d)的距离之间的关系。此外,如果我们能找到它(至少我们可以尝试),就可以估计物体与针孔(相机)的距离,知道图像的大小(ML=EF),物体的大小(HI=KJ=18cm;人脸的平均高度约为18cm),焦距未知。

焦距

为了计算焦距,可以在相机前放一张30厘米的纸,这样它就完全适合屏幕,并测量相机和纸间的距离(这里以19cm为例),然后通过应用下面的类比来找出相机图像的高度与其焦距的比率:

得到这个比率需要了解一些基本的数学知识,知道三角形ABC和三角形CDE相似,可以得到:

它们是相似的,因为三个角度都是相等的。由此公式可以得出:

所以

根据这个公式

可以看出如果CG增加一个确定的因子N,那么AB(图像高度)将减少N倍,因为f和DE(物体高度:一张纸或脸等)是常数。

此外,这在逻辑上是正确的,因为如果物体远离相机,那么屏幕上的图像就会很小。

现在我们需要找出当物体在相机前面移动时物体高度和图像高度之间的比率,就像下面的情况一样:

物体从HI移动到KJ,图像高度将从CD下降到EF。我们知道LM=EF,所以我们可以简化图像如下:

这两个角度GLM和GJK是相同的,所以将会得出:

所以

根据方程(1)可以得到

所以,最后我们可以得出

证明

这个方程在逻辑上似乎是正确的,因为如果远离相机,图像在图片中会很小。

示例2:单镜头相机:

我们知道两个三角形DFE和FBA是相似的,所以我们可以推断:

FG = f + distance from camera lens (f is the focal distance)

DE = height of the image on screen

AB = height of the piece of paper = 30 cm

FF = di –f

所以

证明:

如果f=0将获得相同的公式对于针孔相机:

di与针孔相机中额焦距相同,对(2)进行简化后,我们可以推断:

相机的标准焦距在35毫米到70毫米之间,我们取50毫米。(5厘米=189像素)

由上图可知,将物体从(A)移动到(B)会使图像大小从[C]减小到(D)。使用与前面讨论相同的类比(Distance = d)

代码

程序源码:https://github.com/Harmouch101/Face-Detection

写出前两个关于带有镜头的针孔和照相机的方程,我们可以像下面这样在给定的图片中找到某个人的距离。

在这里我们可以看到摄影师离这位女演员大约1.5米远。

我认为1.5米不是真正有效的,因为摄影师可以放大图片,他也可以在编辑时裁剪图像,这是我们没有考虑的因素。

结论

针孔相机是现代相机设备的基石,无论它多么简单,它都可以被认为是人类历史上最重要的发现之一。

本文分享自微信公众号 - 小白学视觉(NoobCV),作者:花生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【从零学习OpenCV 4】极坐标变换

    经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社...

    小白学视觉
  • 机器视觉中的3D成像技术

    近年来,机器视觉技术变得越来越复杂,工业领域的图像处理更多的专注于3D传感器,而且越来越多的技术已经完善并且投入到实际应用中,包括焊缝的检测,以及在生产过程中对...

    小白学视觉
  • 【从零学习OpenCV 4】了解OpenCV的模块架构

    经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社...

    小白学视觉
  • Python 刷题笔记:贪心算法专题三

    今天仍旧是贪心算法的题目,加上之前两篇的四道题,对贪心算法的应用也大致有些印象了,明天换个其它类型题目来继续刷。

    TTTEED
  • 京东用区块链技术溯源商品,从此电商“打假” so easy!

    想必大家生活中,也经常用到淘宝,京东等电商平台网购,假货问题一直是电商行业的痛点,而对于跨境电商的“假货”问题更是备受诟病。利用区块链技术,让跨境贸易变得更“可...

    区块链领域
  • linux 非常用命令总结

    如何删除ppa(我们在安装软件的时候,教程一般都会让添加ppa源,但是几乎没有教程会告诉你怎么删除) # 添加ppa源 sudo add-apt-reposit...

    ke1th
  • 【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串

    比如s="cebea",k=2,那么输出结果就是3,因为此时"ebe"满足条件:至多包含两个不同字符,且子串最长

    绝命生
  • Python 计算一年有多少秒

    py3study
  • 一图读懂产业互联时代的政企智能安全管理

    产业互联网高速发展,在各行各业深化数字化转型的关键节点,政企机构的网络安全建设面临着更高要求:

    腾讯安全
  • 生物信息学技能面试题(第4题)-多个同样的行列式文件合并起来

    相信用过htseq-count的朋友都知道,它是分开对每个样本计算所有的基因表达量,所以会生成一个个独立的文件,我用perl脚本模仿它的结果如下: $ head...

    生信技能树

扫码关注云+社区

领取腾讯云代金券