如何根据一张照片判断出女孩住在几层楼?
【如何根据一张照片判断出女孩住在几层楼?】
2018年08月02日 00:00:00
阅读数:955
来源:王小龙(知乎)
转自:超级数学建模
ID:supermodeling
作者:王小龙
如何根据一张A楼照B楼的照片判断出这张照片是A楼的几层?
已知条件:B楼共 14 层,本人住 7 层。女孩住 A楼,两楼间距约 40 米,楼层高度应该是 3 米。
和同小区一个女孩聊天,她给了我这张照片,说如果猜出她住在几楼、哪个窗户,我就可以……
平行直线是图片测量的基础,无论是45度仰视拍摄还是两栋楼朝向不平行,都可以完美解决这一问题。
然而,也并不是画几条平行线那么简单,下面介绍这种方法的原理。
首先在图像上找两组水平平行线。
对于真实世界中的一组平行直线,可以认为它们不相交,也可以认为相交在无穷远处。因为摄像机把直线映射为直线的性质,对于真实世界中的一组平行直线,可以认为它们不相交,也可以认为相交在无穷远处。因为摄像机把直线映射为直线的性质,在图像上这一交点称为消影点或者灭点,通过延长平行直线的像得出(蓝色圆点)。当平行线段有很多时,其延长线不唯一,这时就需要使用比如最小二乘法,得到一个离所有平行直线都比较接近的点:
两组水平平行线可以得到两个消影点(其位置有可能出了图像边框),把这两个消影点连起来,就得到了地平线(上图亮蓝色)。地平线上每一个点都是某一组水平平行直线的交点的像,所有水平平行线的交点都在地平线上。图像上所有比地平线高的点,在真实世界中都比摄像头高;所有比地平线低的点,在真实世界中都比摄像头低。摄像头朝向是否水平不影响这些关系的成立。
假设两个楼朝向相同,对应层高度也相同,下面可以使用多种途径解决题主的问题。
方法1:找到对面楼层某些窗台,使得窗台上沿比地平线高(因此在真实世界中比摄像头高),窗台下沿比地平线低(因此在真实世界中比摄像头低),这一层与摄像头同层。当相机没有旋转时,地平线与图像边缘平行,因此找到一个消影点就找了地平线,但是大多数情况下相机都有一定旋转,因此只有找出两组水平平行线,得到两个消影点,才能准确定位地平线。
方法2: 因为拍摄者所在的半个窗户下沿和对面楼某层上所有半个窗户下沿是水平平行的,把这两个半窗户下沿连起来,应该得到一个近似梯形(对应三维空间中水平的平行四边形):
平行四边形两条横跨两栋楼房的边相互水平平行,因此二者延长线的交点应该处在无穷远处,因此在图像上也应该在地平线上。
在本图中,只有正中的那一层窗户延长线离地平线很近,稍微往高一层或者往低一层,交点与地平线的距离就变得很大:
因此对面等高楼层就是水平平行直线的交点离地平线最接近的那一层。
方法3: 首先在地平线上随便找一个点(蓝色圆点),把这一点和摄像者所在窗台下沿的两边连起来。然后把左边的消影点(在图像外面)和这一图形相连,得到一系列黄色小棒,因为从左边消影点发出的所有直线都相互水平平行,而任一消影点发出的直线也水平平行,所以这些小棒棒也全都水平平行,长度相等(因为相邻小棒棒之间的四边形在真实世界中对边水平平行,是平行四边形)。在这些黄色小棒棒里,只有最上面的小棒棒的长度恰好和那一层的半个窗户长度近似。其他黄色小棒棒并不与对应楼层半个窗户吻合,说明它们其实是悬浮在两楼之间的半空中,而不是贴在对面楼面上。
因此对面等高楼层就是黄色小棒长度和所在楼层半个窗户吻合的那一层。
上述方法不仅可以估计图像中的等高楼层,还可以定量测量出其他很多长度、角度的大小,在图像测量中均有十分广泛的应用。
如何根据一张照片判断出女孩住在几层楼?相关推荐
- 判断出栈顺序的合法性(面试题)
判断出栈顺序的合法性 "栈"是一种限制性线性表,是将线性表的插入.删除操作限制为仅在表的一端进行,一般将能够插入.删除的一端称为栈顶,表的另一端称为栈底.当栈中没有元素时称为空栈. ...
- 不能上网--只要四步判断出故障所在
如果你的电脑不能上网或者突然不能上网了怎么办?请专业人员来维修还是自己瞎急一通呢,下面给大家介绍如何准确地判断电脑不能上网问题出在哪里?又如何能快捷地解决这故障?希望下文的一些小技巧能帮到大家,这也 ...
- 一个程序设计试题:读取2维字符数组,判断出表示的数字
有这样的字符矩阵,它可以表示1,2,3,4,5,6,7,8,9,0任意一个数字. 如下所示: 1:. . . . . | . . | 2: . _ . . _ | | ...
- 用Javascript滚动到页面底部,并能正确判断出页面已到底部的方法
现在的页面大部分都是通过Js渲染来显示页面的,也就是如果不滚动到页面底部就无法获取整个页面的HTML源码,如果通过CURL等抓取网页那么基本上抓取到都是一堆javascript代码. 所以就有了web ...
- 给定入栈序列,判断出栈序列是否合法
题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法.如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的. 思路: 判断出栈序列是否合法 ...
- 有 50 家人家,每家一条狗。有一天警察通知, 50 条狗当中有病狗,行为和正常狗不一样。每人只能通过观察别 人家的狗来判断自己家的狗是否生病,而不能看自己家的狗,如果判断出自己家的狗病了,就必须当天
文章目录 题目 一.题目获得的条件 二.假设法解决题目 1.举例子 2.深入理解 总结 题目 有 50 家人家,每家一条狗.有一天警察通知, 50 条狗当中有病狗,行为和正常狗不一样.每人只能通过观察 ...
- 学java能打开大脑思维_脑科学:一句“去你的吧”,就可以判断出你是左脑型思维还是右脑型思维!...
原标题:脑科学:一句"去你的吧",就可以判断出你是左脑型思维还是右脑型思维! 喜欢我,关注我☝ 本图跟本文无关,来自网络 先给个句子,大家读一读:去你的吧! 这个短句子,在现实生活 ...
- 有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况。 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况. 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的. 有 ...
- C++语言学习之判断出三角形的类型
C++语言学习-----判断三角形类型 输入3个float类型的值为三角形的三个边的长,判断出三角形的类型:直角三角形.等边三角形,等腰三角形.钝角三角形 #include <iostream& ...
- 判断出栈序列合法性(c语言)
判断出栈序列合法性 描述 格式 样例 题解及注释 描述 有1.2.3.4.5.6.7这7个数字依次全部入栈后再出栈,在入栈的过程中栈中的数据也可以随时出栈,一直到整个栈为空.将出栈得到的数字依次排列, ...
最新文章
- python sys.argv是什么?
- ubuntu 中安装tomcat
- iOS设计模式四部曲(三):行为型模式 内附Demo
- java 头像 微信群_仿微信群头像九宫格控件 LQRNineGridImageView
- oracle按用户采集信息,oracle 11g 手动收集用户统计信息
- DB2 一个汉字的Byte数,太操蛋了
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_7 响应json数据之发送ajax的请求...
- Bootstrap 时间控件 datetimepicker
- 电商工具箱之阿里巴巴获取商品
- 弹性系数和线径的计算公式_压缩弹簧弹力、刚度计算公式
- android webview 下载图片,Android使用webView长按保存下载网络图片
- 海门中学2021高考成绩查询入口,海门中学举行2020—2021学年度第一学期优秀学生表彰大会,附名单...
- 微信支付服务器请求错误,windows系统下微信支付调用出错 msxml3.dll
- 20155220 吴思其 《网络攻防》 Exp1 PC平台逆向破解(5)M
- Linux 服务器设置成支持中文
- Linux系统调用七、与文件权限有关的系统API串讲
- #4306. 贪玩蓝月
- 嵌入式软件调试之软件断点
- CGTrader年度压轴大赛——“CG游戏角色竞赛”赛果揭晓!!!
- dede列表命名规则
热门文章
- Vulkan Samples 阅读 -- Basics(五): Input Attachments Sub Passes Offscreen Renderings
- 张量分解在无线通信和MIMO雷达中的概述
- 获取棋盘格与标准模板在扫描仪上不同位置图片
- lenovo微型计算机如何拆t410,联想thinkpad T410S全面拆解
- php 递归函数 示例,php 递归函数用法示例
- android c callstack,[MTK] 如何在android native code 打callstack
- 计算机汉字五笔输入法,《计算机汉字输入五笔字型打字速成》.pdf
- Telerik Reporting.NET,Internet或桌面程序提供交互式报告
- Linux 上部署 Seafile 9.0.x 专业版(Seafile Server端)——踩一路坑,溅一身水
- 医咖会免费SPSS教程学习笔记—组内相关系数ICC