OuterCircle背后的想法-在iOS上进行360度图像捕获是为了创建汽车的360度视图。 类似的媒体概念被描述为观察者所代表的具有固定中心的球体。
我们有3个兴趣轴:
- 沥青;
- 滚;
- 偏航。
根据设备的方向,将考虑2个轴的调整,并提供一个角度。 对于“风景右”,偏航将提供角度,而俯仰和横滚将被视为偏差,并且对于最佳位置应尽可能接近0。
设备将存储记录的起点,以确定:
- 俯仰和横滚偏差;
- 基于偏航,角度的进度。


我们假设CoreMotion数据是实时提供的。 还监视加速度,以避免可能引起图像模糊的位置。
收到帧缓冲区后,应用程序会在记录时检查位置。
如果出现以下情况,该缓冲区将被丢弃:
- 没有定位数据;
- 该位置已被填充,并且新图像的质量低于前一个图像的质量。
角度确定位置是否已被图像填充。 如果将360度图像捕获设置为由72张图像组成,则每5度应有一个图像。
此记录的缓冲区质量由下式给出:
- 侧倾偏差
- 音高偏差;
- 加速
- 角度-需要尽可能平衡;
该值是4D中的几何距离,将添加权重以改善结果。 调整需要反复试验。


如果该值小于指定的阈值,则将直接丢弃缓冲区。
每个360度图像捕获都包含以下元数据:
- uid —唯一标识符;
- 日期— unixtime;
- 半径–两张图片之间的最佳距离(上一示例中为5度);
- 元素列表,每个元素都是图像的数据:
- 图片;
- 角度;
- 时间-相对于球的起点;
- 偏差间距;
- 偏差辊;
- 加速。
图像存储在磁盘上,并且仅名称用作标识符。
整个结构导出为2个组件:
- json文件;
- 一系列图像。
在导出过程中,图像会根据角度而不是时间进行重新排序,因为人类的自然运动涉及向前和向后的瞬间。 如果图像中有间隙,则可能会重新排序。 此过程对于不完整的记录至关重要。
例如:如果角度为1,7,355,10,19,14-> 355,1,7,10,14,19
图像是根据顺序而不是角度从磁盘加载的。
每个图像都包含一个当前用户角度。 如果缺少角度,则根据其角度显示最近的图像。
有几项细微调整需要考虑:
- 防止CoreMotion洪水;
- 在单独的线程上处理数据;
- 校准缓冲液值;
- 调整记录角度。
无法进行调整以补偿设备的垂直运动。 如果用户保持设备稳定旋转并垂直/水平移动,则拍摄的图像将具有相同的值。 作为建议,使用Kimball设备可能有助于记录静止物体的更好360度图像。
360图像记录可在演示产品中用于电子商务和M-Commerce,包括大型对象,如汽车,房屋,家用电器等。另一种应用是在社交媒体和旅游业中。 也可以将应用程序包含在游戏中。
任何包含媒体的应用程序都可以从原型中受益。
HyperSense还使用类似但不完全相同的算法为Android开发了360度图像捕获原型。
如有任何疑问或意见,请与我们联系。
最初于 2018年3月8日 发布在 hypersense-software.com 上。