增强现实 - 图像大小变换

时间:2012-07-08 23:24:00

标签: java android image-processing augmented-reality

我目前正在开发一款可在相机视图上显示图像的应用程序(基本上是增强现实版),但却发现图像看起来并不“真实”。造成这种情况的原因是因为我的图像大小不会像现实生活中那样改变。

我拥有的数据是:图像原始尺寸(高度,宽度),图像位置(纬度,长度,高度),手机位置以及手机与图像之间的距离。

例如,假设我在lat = 43,long = -70,alt = 0的情况下将图像放在增强现实中。如果我用手机开始走近这一点,我们应该会看到图像越来越大越来越近,但截至目前,尺寸的增加是线性的。然而,当我们开始走近现实生活中的形象时,我们会发现它根据特定的功能变得越来越大。

关于该功能可能有什么想法?

2 个答案:

答案 0 :(得分:3)

免责声明:这是我认为的全部内容,而且我没有确切的功能。

第1步:视口假设

您需要考虑的是视口。走路时,你有一个视野。让我们通过考虑在观察时,普通人不使用他们的周边视觉来简化这种情况(为简单起见,显然现实生活中并非如此)。考虑到向前看,你可以看到180度 - 而且没有外围设备,让我们假设左右两侧都有45度被移除。这将呈现90度宽的视口,在其底部,观察者将看到与左侧成45度并且向右成45度的直角三角形。请注意,这些都不是衡量的,也不是纯粹科学的,但是为了实现增强现实,某些假设可以使处理变得更加容易。

第2步:视口的好处

现在,基于视口的先前定义 - 考虑该视图的哪个部分来自大距离的对象将占据。这实际上可以开始生成真正的数学:)!当你靠近时,对象会变得更大,因为它占据了视图的更大部分。对象占用的视图部分将是对象大小和视图大小之间的关系。在这种情况下,视图的大小是视口的arclength!

第3步:某些数学

让我们再做一个假设来简化这个过程。让我们假设我们不是查看真实的弧,而是查看视口的斜边。从远处看 d ,视角为90度时,视口的斜边将是

hypotenuse = 2.83 * d
//Note: 2.83 is approx. 2 * sqr. root of 2

第4步:结论与应用

因此,如果你站在离物体100英尺的地方,那么你的视口将是283英尺。如果物体(例如汽车前部)占用6英尺,则只有6/283 =全视图的2%。

但是,如果你站在离同一辆车50英尺的地方,则关系将是6/141 =全视图的4%。

你可以看到这显然是一种线性关系。如果您知道对象的大小(让我们称之为 s ),那么应该采取的视图百分比将是

view % = s / 2.83d

此处显示的是,确定对象的大小非常重要,很难从单个.jpg图像中推断出来。我可以拍一张5尺寸足球的照片,尺寸为2500px×2500px。这是否意味着它是巨大的?不,但如果其大小的唯一假设来自总像素数,那么它看起来会很大。沿着同样的路线,我可以得到100px乘100px的地球图片,但我希望它不会显得那么小。

求解对象的大小将产生允许用户接近增强现实中的对象的结果。了解如何在用户接近时缩放图像非常简单。

答案 1 :(得分:1)

来自a photography forum

假设你知道焦点距离,并且所讨论的物体是被聚焦的物体 - 你必须知道视野的角度(你知道,知道使用哪个镜头 - exif可能甚至告诉你角度)

一旦你知道了这一点,你就必须弄清楚对象占了多少。

知道这一点,你可以绘制一个等腰三角形。你会知道所有三个角的角度,以及它的高度。从那里,您可以绘制一个知道一侧和所有角度的直角三角形。知道了,你可以弄清楚其他两方的长度。

短边的长度,即时间2,将是对象的宽度。

您需要启动一个维度。这可能是相机到主体的距离,相关物体附近的另一个物体的尺寸等等...知道视野的角度,你可能会想出相机有多远,取决于什么否则就在框架中。