- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在录制用户眼睛的视频,然后使用计算机视觉来跟踪他们的眼睛以试图估计他们的注视,但是我能够记录用户的角度不是正对的,并且表示需要显示数据,就好像用户正在直视一样。
为了进一步解释我自己,请考虑以下描述我目前所拥有的以及我正在努力实现的图像:
我认为实现这一点的最好方法可能是转换视角,但由于对此不是很精通,我不知道从哪里开始。
我愿意接受任何关于实现预期结果的最佳方法的建议,但请记住我的矩阵数学相当生疏,所以如果你使用任何众所周知的方法,请迎合我的无知并解释一切尽你所能。
数据当前存储为 X/Y 点的 NumPy 数组
最佳答案
我的矩阵数学比“相当生疏”还糟糕,但我有一些可能有用的想法。
总体而言,与变换离散点相比,变换图像的信息要多得多。您可能想要考虑变换图像的眼睛部分而不是变换瞳孔点。
无论如何,这是我的想法:
This answer描述了如何在 Python 图像库中执行透视变换,使用 numpy
计算变换系数。
将其调整为对点而不是图像进行操作可能很容易(谷歌建议 scipy
具有一些类似于 PIL.Image.transform` 的功能,这可能更适用)。如果做不到这一点,您可以将您的点渲染到二进制图像上,作为黑色背景上的白色像素,然后转换该图像并读回这些点。
但是,对于透视变换,您仍然需要一种方法来确定 pa
的坐标,即您要变换的平面。只需在眼睛周围放置一个矩形,您就可能获得合理的结果。为此,我可能会旋转你的图形,使其与 X 轴平行,方法是在眼睛的末端之间构建一条线,然后从 0° 旋转该线的角度。然后我会记录边界框,然后将它们都旋转回来。你的飞机看起来像这样:
此时,您或许可以提取眼睛主要轮廓的角度,并相应地捏合和挤压边界矩形。不过,简单的透视变换可能会被证明是不可靠的。
给定一组起点和一组终点,几乎肯定有一种方法可以从中计算透视变换系数,即使数字大于 4。您可以跳过边界框并假设将每个点转换为它在理想形状上的对应物,然后据此计算系数。不要问我怎么做,不过,我不知道:P
如果您的“目标形状”与您要转换的形状具有相同数量的点,则您可以模拟许多图像编辑程序的拉伸(stretch)功能。 Photoshop 有一些工具可以让你在形状上拉点来移动它们,拉伸(stretch)里面的内容。如果您可以重现此行为,则只需将起始形状上的每个点移动到目标形状上的对应点,拉伸(stretch)图像。这可能是最可靠的方法,只需拉伸(stretch)您的图像以适应目标形状,然后从该新图像中拉出瞳孔。
所有这些方法的问题在于,正常的透视变换永远不会非常准确,因为眼睛是弯曲的,而不是平坦的。您不能真正用平面近似眼睛的表面并期望完全准确。即使拉伸(stretch)(方法 3)也会受到照片角度的影响;它将有利于眼睛的可见侧,并使它看起来好像眼睛向左(他们的右)看得比实际多得多。 如果照片的角度是固定的且已知,您或许可以自行校正。否则,我看不到解决此障碍的简单方法。
我对高等数学知之甚少,但希望我的想法对您有所帮助。
FWIW,眼动追踪得到了很好的研究,并且有几篇透彻的论文,例如 this one
关于python - 平移/旋转 2D 点以改变视角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38802990/
我想知道哪个插件在 eclipse 中提供 Java 视角?相同的插件是否有助于创建新的 Java 项目?如果不是哪个插件贡献了它? 最佳答案 org.eclipse.jdt.ui插件提供java视角
每当我在 Eclipse 中打开 Java 透视图时,它就会如图所示。Java EE 的观点完全没问题。有人遇到同样的问题并解决了吗? 最佳答案 尝试重新调整你的观点。已选择 Java 透视图后,转到
我在基于社区服务器的平台上有一个博客,我想将其移至 Wordpress。由于这是一个我已经加入的社区,我不想失去该社区的固定读者,所以我计划交叉发布我在社区服务器平台上发布的每一个新帖子。我将发布博客
我正在尝试从旧的 Android 相机 API 切换到新的 CameraX API。我正在为增强现实应用程序使用预览模式,我需要获取一些信息,例如预览使用的相机的视角和大小。 到目前为止,这是我的代码
我们有一个快捷键可以从调用方法的任何地方跳转到方法定义,即通过在方法名称上使用 Ctrl+左键单击。但是,如果我当前位于方法定义上并且我想要转到调用或使用该方法的位置,该怎么办?这有什么捷径吗? 我已
我试图改变我的图的一个子图中的角度,它是一个 3d 图。我愿意: import matplotlib.pyplot as plt f1 = plt.figure() ax1 = f1.add_subp
可以使用 -perspective idPerspective 启动 eclipse 那么我怎样才能得到这个 idPerspective 呢? 最佳答案 如果您正在使用 PDE(插件开发环境)运行 E
我有标准版的 eclipse Galileo。现在我想在上面开发企业应用程序。知道如何获得 Java EE 视角吗?标准版如何安装Java EE工具? 最佳答案 我也遇到了同样的问题。我首先使用 Ub
我创建了一个简单的 Eclipse 插件,它只是从菜单中的命令打开一个新 View 。我正在使用 Eclipse RCP 2018,当我将插件作为应用程序运行时,一切看起来与添加了菜单选项的 java
我使用 C# 和 .NET 已经有一段时间了,尽管我之前一直使用 OOP 语言(更准确地说是 Java),但在处理 .NET 应用程序时,我发现接口(interface)使用的比我在 java 见过。
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
当我调试 Android 应用程序时,它会从 Java 角度激活“调试”角度;但当我使用红色终止按钮终止应用程序时,它不会切换回 Java 视角。 最佳答案 可能的重复:In Eclipse, how
如果使用 Eclipse EE,是否有任何理由使用 Java Perspective 而不是 Java EE Perspective?换句话说,对于 Eclipse EE,Java Perspecti
我是一名优秀的程序员,十分优秀!