java - 增强现实 - 图像大小变换

标签 java android image-processing augmented-reality

我目前正在开发一款可在相机 View (基本上是增强现实)上显示图像的应用程序,但我发现这些图像看起来并不“真实”。这是因为我的图像大小不会像现实生活中的事物那样发生变化。

我拥有的数据是:图像原始大小(高度、宽度)、图像位置(lat、long、alt)、手机位置以及手机与图像之间的距离。

例如,假设我在增强现实中放置了一张图像,纬度 = 43,经度 = -70,alt = 0。如果我开始用手机靠近这一点,我们应该会看到图像随着我们的移动而变大越来越近,但截至目前,尺寸的增加是线性的。然而,当我们开始接近现实生活中的图像时,我们会看到它根据特定功能变大。

关于该功能可能是什么的任何想法?

最佳答案

免责声明:这都是我的看法,我没有确切的功能。

第 1 步:视口(viewport)假设

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

第 2 步:视口(viewport)的好处

现在,根据之前的视口(viewport)定义 - 考虑远距离物体将占据该 View 的哪一部分。这实际上可以开始生成真正的数学 :)!当你靠近时,物体会变大,因为它占据了更大的视野。对象占据的 View 部分与对象大小和 View 大小之间的关系有关。在这种情况下, View 的大小就是视口(viewport)的弧长!

第 3 步:一些数学运算

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

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

第四步:结论与应用

因此,如果您站在距离某个物体 100 英尺的地方,那么您的视口(viewport)将为 283 英尺。如果物体(例如汽车的前部)占 6 英尺,那么这将仅为整个 View 的 6/283 = 2%。

但是,如果您站在距离同一辆车 50 英尺的地方,则该关系将为全 View 的 6/141 = 4%。

你可以看到这显然是一个线性关系。如果您知道对象的大小(我们称其为 s),那么应该占据的 View 百分比将是

view % = s / 2.83d

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

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

关于java - 增强现实 - 图像大小变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387535/

相关文章:

android - 向现有用户提供免费的应用内购买

android - 如何在Android中使用ImageJ?

java - 如何获取黑白图像的像素值?

java - 从 ListSelectionModel 获取 JList 的方法

java - 如何创建滑动面板

JavaDB 不会在应用程序启动时启动,给我一个 java.sql.SQLNonTransientConnectionException :

java - 如何从 Firebase 实时数据库中获取某个键的所有值?

java - 命名 CDI bean 的默认范围是什么?

android - frida - 如何翻译 native 回溯以与 addr2line 工具一起使用

python - 计算图像中矩形的数量