Patent Publication Number: US-2017363949-A1

Title: Multi-tier camera rig for stereoscopic image capture

Description:
RELATED APPLICATIONS 
     This application claims priority to and the benefit of U.S. Provisional Application No. 62/376,140, filed Aug. 17, 2016, entitled, “Multi-Tier Camera Rig for Stereoscopic Image Capture”, which is incorporated herein by reference in its entirety. 
    
    
     This application is a Continuation-In-Part of U.S. Non-provisional patent application Ser. No. 14/723,151, filed May 27, 2015, entitled, “Capture and Render of Panoramic Virtual Reality Content” and is a Continuation-In-Part of U.S. Non-provisional patent application Ser. No. 14/723,178, filed May 27, 2015, entitled, “Omnistereo Capture and Render of Panoramic Virtual Reality Content”, all of which are incorporated herein by reference in their entireties. 
     TECHNICAL FIELD 
     This description generally relates to a camera rig. In particular, the description relates to generating stereoscopic panoramas from captured images for display in virtual reality (VR) and/or augmented reality (AR) environment. 
     BACKGROUND 
     Panoramic photography techniques can be used on images and video to provide a wide view of a scene. Conventionally, panoramic photography techniques and imaging techniques can be used to obtain panoramic images from a number of adjoining photographs taken with a conventional camera. The photographs can be mounted together in alignment to obtain a panoramic image. 
     SUMMARY 
     A system of one or more computers, camera rigs, and image capture devices housed upon the camera rigs can be configured to perform particular operations or actions by virtue of having software, firmware, hardware, or a combination of them installed on the system that in operation causes or cause the system to perform the actions. 
     In one general aspect, a camera rig includes a first tier having a first plurality of image sensors. The first plurality of image sensors can be arranged in a circular shape and oriented such that their fields of view axes are perpendicular to a tangent of the circular shape in which they are arranged. The camera rig also includes a second tier comprising a second plurality of image sensors. The second plurality of image sensors can be oriented such that their fields of view axes are non-parallel to the fields of view axes of the first plurality of image sensors. The second tier can be positioned above the first tier in the camera rig. 
     Implementations can include one or more of the following features, alone or in combination with one or more other features. For example, in any or all of the above implementations a radius of a circular camera rig housing in which the first plurality of image sensors is defined such that a first field of view of a first of the first plurality image sensors intersects a second field of view of a second of the first plurality of image sensors and a third field of view of a third of the first plurality of image sensors. In any or all of the above implementations, the first of the first plurality image sensors, the second of the first plurality image sensors, and the third of the first plurality image sensors are disposed within a plane. 
     In another aspect, a camera rig includes a camera housing. The camera housing includes a lower circular perimeter an upper multi-faced cap. The lower circular perimeter is located below the multi-faced cap. The camera rig can also include a first plurality of cameras arranged in a circular shape and disposed along the lower circular perimeter of the camera housing such that each of the first plurality of cameras have an outward projection normal to the lower circular perimeter. The camera rig can also include a second plurality of cameras. The second plurality of cameras can each be disposed on respective faces of the upper multi-faced cap such that each of the second plurality of cameras have an outward projection non-parallel to the normal of the lower circular perimeter. 
     In another aspect, a method includes defining a first set of images for a first tier of a multi-tier camera rig, the first set of images obtained from a first plurality of cameras arranged in a circular shape such the each of the first plurality of cameras have an outward projection normal to the circular shape. The method can also include calculating a first optical flow in the first set of images and stitching together the first set of images based on the first optical flow to create a first stitched image. The method also includes defining a second set of images for a second tier of a multi-tier camera rig. The second set of images can be obtained from a second plurality of cameras arranged such that each of the plurality of cameras have an outward projection non-parallel to the normal of the circular shape of the first plurality of cameras. The method can also include calculating a second optical flow in the second set of images, and stitching together the second set of images based on the second optical flow to create a second stitched image. The method generates an omnistereo panoramic image by stitching together the first stitched image and the second stitched image. 
     Other embodiments of this aspect include corresponding computer systems, apparatus, and computer programs recorded on one or more computer storage devices, each configured to perform the actions of the methods. 
     The details of one or more implementations are set forth in the accompanying drawings and the description below. Other features will be apparent from the description and drawings, and from the claims. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram of an example system for capturing and rendering stereoscopic panoramas in a 3D virtual reality (VR) environment. 
         FIG. 2  is a diagram depicting an example camera rig configured to capture images of a scene for use in generating stereoscopic panoramas. 
         FIG. 3  is a diagram depicting another example camera rig configured to capture images of a scene for use in generating stereoscopic panoramas. 
         FIGS. 4A through 4D  are diagrams depicting an example of a multi-tier camera rig and associated components. 
         FIG. 5  is a diagram showing field of view axes for cameras in a lower circular perimeter of a camera housing of a multi-tier camera rig. 
         FIG. 6  is a diagram showing field of view axes for cameras in an upper multi-faced cap of a camera housing of a multi-tier camera rig. 
         FIG. 7  is a diagram that illustrates an example VR device. 
         FIG. 8  is an example graph that illustrates a number of cameras and neighbors as a function of a camera field of view. 
         FIG. 9  is an example graph that illustrates an interpolated field of view as a function of a camera field of view. 
         FIG. 10  is an example graph that illustrates selection of a configuration for a camera rig. 
         FIG. 11  is a graph that illustrates an example relationship that can be used to determine a minimum number of cameras according to a predefined rig diameter. 
         FIGS. 12A-B  are line drawing examples of distortion that can occur during image capture. 
         FIGS. 13A-B  depict examples of rays captured during collection of a panoramic image. 
         FIGS. 14A-B  illustrates the use of approximating planar perspective projection, as described in  FIGS. 13A-B . 
         FIGS. 15A-C  illustrate examples of approximated planar perspective projection applied to planes of an image. 
         FIGS. 16A-B  illustrate examples of introducing vertical parallax. 
         FIGS. 17A-B  depict example points of a coordinate system that can be used to illustrate points in a 3D panorama. 
         FIG. 18  represents a projected view of the point depicted in  FIGS. 17A-17B . 
         FIG. 19  illustrates rays captured in an omnidirectional stereo image using the panoramic imaging techniques described in this disclosure. 
         FIG. 20  is a graph that illustrates a maximum vertical parallax caused by points in 3D space. 
         FIG. 21  is a flow chart diagramming one embodiment of a process to produce a stereo panoramic image. 
         FIG. 22  is a flow chart diagramming one embodiment of a process to capture a stereo panoramic image. 
         FIG. 23  is a flow chart diagramming one embodiment of a process to render panoramic images in a head mounted display. 
         FIG. 24  is a flow chart diagramming one embodiment of a process to determine image boundaries. 
         FIG. 25  is a flow chart diagramming one embodiment of a process to generate video content. 
         FIG. 26  shows an example of a computer device and a mobile computer device that can be used to implement the techniques described here. 
     
    
    
     Like reference symbols in the various drawings indicate like elements. 
     DETAILED DESCRIPTION 
     Creating panoramic images generally includes capturing images or video of a surrounding, three-dimensional (3D) scene using a single camera or a number of cameras in a camera rig, for example. When using a camera rig that houses several cameras, each camera can be synchronized and configured to capture images at a particular point in time. For example, the first frame captured by each camera can be captured at approximately the same time as the second, third, and fourth cameras capture corresponding first frames. The image capture can continue in a simultaneous manner until some or all of the scene is captured. Although many of the implementations are described in terms of a camera, the implementations can instead be described in terms of image sensors or in terms of camera housings (which can include image sensors). 
     Camera rigs that house multiple cameras may be configured to capture particular angles of the scene. For example, cameras housed on the camera rig may be directed at a specific angle and all (or at least a portion of) content captured from that angle may be processed to generate a full panorama of a particular scene. 
     In some implementations, each of the cameras can be directed at different angles to capture different angles of the scene. In the event that only a portion of the scene is captured or some or all of the scene includes distortion, a number of processes can be performed to interpolate or configure any missing, corrupted, or distorted content from the panorama. 
     The following disclosure describes a number of apparatus and methods to capture, process, correct, and render 3D panoramic content for purposes of displaying such content in a head-mounted display (HMD) device in a 3D virtual reality (VR) environment. Reference to virtual reality can also include or can be augmented reality. In some implementations, the camera rig can include multiple tiers of cameras to reduce or eliminate missing portions of a scene and reduce interpolation. For example, in some implementations, the camera rig may include a lower level of sixteen cameras and upper level of six cameras. In some implementations, the ratio of lower level (or tier) cameras to upper level (or tier) cameras is greater than 2:1 but less than 3:1 (e.g., 2.67:1). The cameras may be directed at different angles so that each captures different content that can be processed to generate a full panorama of a particular scene. The ratio in cameras can be important to capture 360° video with proper depth, focus, etc. while reducing or minimizing, the number of cameras and amount of image processing. 
       FIG. 1  is a block diagram of an example system  100  for capturing and rendering stereoscopic panoramas in a 3D virtual reality (VR) environment. In the example system  100 , a camera rig  102  can capture, locally store (e.g., in permanent or removable storage), and/or provide images over a network  104 , or alternatively, can provide the images directly to an image processing system  106  for analysis and processing. In some implementations of system  100 , a mobile device  108  can function as the camera rig  102  to provide images throughout network  104 . Once the images are captured, the image processing system  106  can perform a number of calculations and processes on the images and provide the processed images to a head mounted display (HMD) device  110  for rendering over network  104 , for example. In some implementations, the image processing system  106  can be included in the camera rig  102  and/or the HMD device  110 . In some implementations, the image processing system  106  can also provide the processed images to mobile device  108  and/or to computing device  112  for rendering, storage, or further processing. 
     The HMD device  110  may represent a virtual reality headset, glasses, eyepiece, or other wearable device capable of displaying virtual reality content. In operation, the HMD device  110  can execute a VR application (not shown) which can playback received and/or processed images to a user. In some implementations, the VR application can be hosted by one or more of the devices  106 ,  108 , or  112 , shown in  FIG. 1 . In one example, the HMD device  110  can provide a video playback of a scene captured by camera rig  102 . In another example, the HMD device  110  can provide playback of still images stitched into a single panoramic scene. 
     The camera rig  102  can be configured for use as a camera (also can be referred to as a capture device) and/or processing device to gather image data for rendering content in a VR environment. Although camera rig  102  is shown as a block diagram described with particular functionality herein, the camera rig  102  can take the form of any of the implementations shown in  FIGS. 2-6  and additionally may have functionality described for the camera rigs throughout this disclosure. For example, for simplicity in describing the functionality of system  100 ,  FIG. 1  shows the camera rig  102  without cameras disposed around the rig to capture images. Other implementations of camera rig  102  can include any number of cameras, arranged in multiple tiers, that can be disposed around the circumference of a circular camera rig, such as rig  102 . 
     As shown in  FIG. 1 , the camera rig  102  includes a number of cameras  139  and a communication system  132 . The cameras  139  can include a single still camera or single video camera. In some implementations, the cameras  139  can include multiple still cameras or multiple video cameras disposed (e.g., seated) side-by-side along the outer periphery (e.g., ring) of the rig  102 , in one or more tiers according to some embodiments. The cameras  139  may be a video camera, an image sensor, a stereoscopic camera, an infrared camera, and/or a mobile device. The communication system  132  can be used to upload and download images, instructions, and/or other camera related content. The communication may be wired or wireless and can interface over a private or public network. 
     The camera rig  102  can be configured to function as stationary rig or a rotational rig. Each camera on the rig can be disposed (e.g., placed) offset from a center of rotation for the rig. The camera rig  102  can be configured to rotate around 360 degrees to sweep and capture all or a portion of a 360-degree view of a scene, for example. In some implementations, the rig  102  can be configured to operate in a stationary position and in such a configuration, additional cameras can be added to the rig to capture additional outward angles of view for a scene. 
     In some implementations, the camera rig  102  includes multiple digital video cameras that are disposed in a side-to-side or back-to-back fashion (e.g., shown in  FIG. 3 ) such that their lenses each point in a radially outward direction to view a different portion of the surrounding scene or environment. In some implementations, the multiple digital video cameras are disposed in a tangential configuration with a viewing direction tangent to the circular camera rig  102  For example, the camera rig  102  can include multiple digital video cameras that are disposed such that their lenses each point in a radially outward direction while being arranged tangentially to a base of the rig. The digital video cameras can be pointed to capture content in different directions to view different angled portions of the surrounding scene. 
     In some implementations, the camera rig  102  can include multiple tiers of digital video cameras. For example, the camera rig may include a lower tier where the digital video cameras are disposed in a side-to-side or back-to-back fashion, and also include an upper tier with additional cameras disposed above the cameras with respect to the cameras of the lower tier. In some implementations, the cameras of the upper tier point outwardly from the camera rig  102  on a plane different than the cameras of the lower tier. For example, the cameras of the upper tier may be disposed on a plane perpendicular to, or close to perpendicular to, the cameras of the lower tier, and each may point outwardly from the center of the lower tier. In some implementations, the number of cameras in the upper tier can be different than the number of cameras on the lower tier. 
     In some implementations, images from the cameras on the lower tier can be processed in neighboring pairs on the camera rig  102 . In such a configuration, each first camera in each set of neighboring cameras is disposed (e.g., placed) tangentially to a circular path of the camera rig base and aligned (e.g., with the camera lens pointing) in a leftward direction. Each second camera in each set of neighboring cameras is disposed (e.g., placed) tangentially to the circular path of the camera rig base and aligned (e.g., with the camera lens) pointing in a rightward direction. Cameras on the upper tier can also be similarly disposed with respect to each other. In some implementations, cameras that are neighboring are neighbors (e.g., adjacent) on the same level or tier. 
     Example settings for the cameras used on the camera rig  102  can include a progressive scan mode at about 60 frames per second (i.e., a mode in which each raster line is sampled to produce each frame of the video, rather than every other line as is the standard recording mode of most video cameras). In addition, each of the cameras can be configured with identical (or similar) settings. Configuring each camera to identical (or similar) settings can provide the advantage of capturing images that can be stitched together in a desirable fashion after capture. Example settings can include setting one or more of the cameras to the same zoom, focus, exposure, and shutter speed, as well as setting the cameras to be white balanced with stabilization features either correlated or turned off. 
     In some implementations, the camera rig  102  can be calibrated prior to being used to capture one or more images or video. For example, each camera on the camera rig  102  can be calibrated and/or configured to take a panoramic video. The settings may include configuring the rig to operate at a particular rotational speed around a 360-degree sweep, with a wide field of view, and in a clockwise or counterclockwise direction, for example. In some implementations, the cameras on rig  102  can be configured to capture, for example, one frame per degree of a 360-degree sweep of a capture path around a scene. In some implementations, the cameras on rig  102  can be configured to capture, for example, multiple frames per degree of a 360-degree (or less) sweep of a capture path around a scene. In some implementations, the cameras on rig  102  can be configured to capture, for example, multiple frames around a sweep of a capture path around a scene without having to capture particularly measured frames per degree. 
     In some implementations, the cameras can be configured (e.g., set up) to function synchronously to capture video from the cameras on the camera rig at a specific point in time. In some implementations, the cameras can be configured to function synchronously to capture particular portions of video from one or more of the cameras over a time period. Another example of calibrating the camera rig can include configuring how incoming images are stored. For example, incoming images can be stored as individual frames or video (e.g., avi files, .mpg files) and such stored images can be uploaded to the Internet, another server or device, or stored locally with each camera on the camera rig  102 . In some implementations, incoming images can be stored as encoded video. 
     The image processing system  106  includes an interpolation module  114 , a capture correction module  116 , and a stitching module  118 . The interpolation module  116  represents algorithms that can be used to sample portions of digital images and video and determine a number of interpolated images that are likely to occur between adjacent images captured from the camera rig  102 , for example. In some implementations, the interpolation module  114  can be configured to determine interpolated image-fragments, image-portions, and/or vertical or horizontal image-strips between adjacent images. In some implementations, the interpolation module  114  can be configured to determine flow fields (and/or flow vectors) between related pixels in adjacent images. Flow fields can be used to compensate for both transformations that images have undergone and for processing images that have undergone transformations. For example, flow fields can be used to compensate for a transformation of a particular pixel grid of an obtained image. In some implementations, the interpolation module  114  can generate, by interpolation of surrounding images, one or more images that are not part of the captured images, and can interleave the generated images into the captured images to generate additional virtual reality content for a scene. 
     The capture correction module  116  can be configured to correct captured images by compensating for a non-ideal capture setup. Example capture setups can include, by way of non-limiting example, a circular camera trajectory, a parallel principal (camera) axis, a viewing-direction that is perpendicular to the camera trajectory, a viewing direction that is tangential to the camera trajectory and/or other capture conditions. In some implementations, the capture correction module  116  can be configured to compensate for one or both of a non-circular camera trajectory during image capture and/or a non-parallel principal axis during image capture. 
     The capture correction module  116  can be configured to adjust a particular set of images to compensate for content captured using multiple cameras in which camera separation is larger than about 30 degrees. For example, if the distance between cameras is 40 degrees, the capture correction module  116  can account for any missing content in a particular scene based on too little camera coverage by collecting content from additional cameras or by interpolating the missing content. 
     In some implementations, the capture correction module  116  can also be configured to adjust the set of images to compensate for camera misalignment due to camera pose errors and the like. For example, if camera pose errors (e.g. errors due to orientation and position of camera) occur during image capture, module  116  can blend two or more columns of pixels from several image frames to remove artifacts including artifacts due to poor exposure (or exposure changes from image frame to image frame) and/or due to misalignment of one or more cameras. The stitching module  118  can be configured to generate 3D stereoscopic images based on defined, obtained, and/or interpolated images. The stitching module  118  can be configured to blend/stitch pixels and/or image-strips from multiple image portions. Stitching can be based on flow fields as determined by the interpolation module  114 , for example. For example, the stitching module  118  can receive (from interpolation module  114 ) interpolated image frames that are not part of the set of images and interleave the image frames into the set of images. The interleaving can include the module  118  stitching together the image frames and the set of images based at least in part on the optical flow generated by the interpolation module  114 . 
     The stitched combination can be used to generate an omnistereo (e.g., omnidirectional stereo) panorama for display in a VR head mounted display. The image frames may be based on captured video streams collected from a number of neighboring pairs of cameras disposed on a particular rig. Such a rig may include about 12 to about 16 cameras in a first tier or level of the rig, and 4-8 cameras in a second tier or level of the rig, where the second tier is positioned above the first tier. In some implementations, an odd number of cameras can be included in each tier of a rig. In some implementations, the rig includes more than one or two sets of neighboring cameras. In some implementations, the rig may include as many sets of neighboring cameras that can be seated side-by-side on the rig. In some implementations, the stitching module  118  can use pose information associated, with at least one neighboring pair, to pre-stitch a portion of the set of images before performing the interleaving. Neighboring pairs on a camera rig are more explicitly shown and described below in connection with, for example,  FIG. 3 . 
     In some implementations, using optical flow techniques to stitch images together can include stitching together captured video content. Such optical flow techniques can be used to generate intermediate video content between particular video content that previously captured using the camera pairs and/or singular cameras. This technique can be used as a way to simulate a continuum of cameras on a circular stationary camera rig capturing images. The simulated cameras can capture content similar to a method of sweeping a single camera around in a circular shape (e.g., a circle, substantially a circle, a circular pattern) to capture 360 degrees of images, but in the above technique, fewer cameras are actually are placed on the rig and the rig may be stationary. The ability to simulate the continuum of cameras also provides an advantage of being able to capture content per frame in a video (e.g., 360 images at capture spacing of one image per degree). 
     The generated intermediate video content can be stitched to actual captured video content using optical flow by using a dense set of images (e.g., 360 images at one image per degree), when in actuality, the camera rig captured fewer than 360 images. For example, if the circular camera rig includes 8 pairs of cameras (i.e., 16 cameras) or 16 unpaired cameras, the captured image count may be as low as 16 images. The optical flow techniques can be used to simulate content between the 16 images to provide 360 degrees of video content. 
     In some implementations, using the optical flow techniques can improve interpolation efficiency. For example, instead of interpolating 360 images, optical flow can be computed between each consecutive pair of cameras (e.g., [1-2], [2-3], [3-4]). Given the captured 16 images and the optical flows, the interpolation module  114  and/or the capture correction module  116  can compute any pixel in any intermediate view without having to interpolate an entire image in one of the 16 images. 
     In some implementations, the stitching module  118  can be configured to stitch images collected from a rig with multiple tiers of cameras, where the multiple tiers are positioned above or below each other. The stitching module  118  may process video content captured from each tier of cameras to created a stitched image for each tier, and may then stitch together the stitched images associated with each tier to generate a 360-degree image. For example, a camera rig may include 16 cameras in a lower tier, and 6 cameras an in upper tier with the upper tier positioned above the lower tier on the rig. In such an example, the stitching module  118  may stitch together the images from the 16 cameras on the lower tier to generate a stitched image associated with the lower tier (e.g., a lower-tier stitched image). The stitching module  118  may also stitch together the images from the 6 cameras on the upper tier to generate a stitched image associated with the upper tier (e.g., an upper tier stitched image). To generate a 360-degree image, the stitching module may then stitch together the lower-tier stitched image with the upper-tier stitched image. In some implementations, cameras that are neighboring are neighbors (e.g., adjacent) on the same level or tier. 
     The image processing system  106  also includes a projection module  120  and an image correction module  122 . The projection module  120  can be configured to generate 3D stereoscopic images by projecting images into a planar perspective plane. For example, the projection module  120  can obtain a projection of particular set of images and can configure a re-projection of a portion of the set of images by converting some of the images from a planar perspective projection into a spherical (i.e., equirectangular) perspective projection. The conversions include projection modeling techniques. 
     Projection modeling can include defining a center of projection and a projection plane. In the examples described in this disclosure, the center of projection can represent an optical center at an origin (0,0,0) of a predefined xyz-coordinate system. The projection plane can be placed in front of the center of projection with a camera facing to capture images along a z-axis in the xyz-coordinate system. In general, a projection can be computed using the intersection of the planar perspective plane of a particular image ray from a coordinate (x, y, z) to the center of projection. Conversions of the projection can be made by manipulating the coordinate systems using matrix calculations, for example. 
     Projection modeling for stereoscopic panoramas can include using multi-perspective images that do not have a single center of projection. The multi-perspective is typically shown as a circular shape (e.g., spherical) (see  FIG. 13B ). When rendering content, the systems described herein can use a sphere as an approximation when converting from one coordinate system to another. 
     In general, a spherical (i.e., equirectangular) projection provides a plane that is sphere-shaped with the center of the sphere equally surrounding the center of projection. A perspective projection provides a view that provides images of 3D objects on a planar (e.g, 2D surface) perspective plane to approximate a user&#39;s actual visual perception. In general, images can be rendered on flat image planes (e.g., computer monitor, mobile device LCD screen), so the projection is shown in planar perspective in order to provide an undistorted view. However, planar projection may not allow for 360 degree fields of view, so captured images (e.g., video) can be stored in equirectangular (i.e., spherical) perspective and can be re-projected to planar perspective at render time. 
     After particular re-projections are completed, the projection module  120  can transmit re-projected portions of images for rendering in an HMD. For example, the projection module  120  can provide portions of a re-projection to a left eye display in HMD  110  and portions of the re-projections to a right eye display in HMD  110 . In some implementations, the projection module  120  can be configured to calculate and reduce vertical parallax by performing the above re-projections. 
     The image correction module  122  can be configured to generate 3D stereoscopic images by compensating for distortion, including, but not limited to, perspective distortion. In some implementations, the image correction module  122  can determine a particular distance in which optical flow is maintained for 3D stereo and can segment the images to show only portions of a scene in which such flow is maintained. For example, the image correction module  122  can determine that the optical flow of 3D stereo images is maintained between about one radial meter from an outward edge of circular camera rig  102 , for example, to about five radial meters from the outward edge of the camera rig  102 . Accordingly, the image correction module  122  can ensure that the swatch between one meter and five meters is selected for rendering in the HMD  110  in a projection that is free from distortion while also providing proper 3D stereo effects that have proper parallax for a user of the HMD  110 . 
     In some implementations, the image correction module  122  can estimate optical flow by adjusting particular images. The adjustments can include, for example, rectifying a portion of images, determining an estimated camera pose associated with the portion of images, and determining a flow between images in the portion. In a non-limiting example, the image correction module  122  can compensate for a difference in rotation between two particular images in which flow is being computed. This correction can function to remove the flow component caused by a rotation difference (i.e., rotation flow). Such correction results in flow caused by translation (e.g., parallax flow), which can reduce the complexity of flow estimation calculations while making the resulting images accurate and robust. In some implementations, processes in addition to image correction can be performed on the images before rendering. For example, stitching, blending, or additional corrective processes can be performed on the images before rendering is carried out. 
     In some implementations, the image correction module  122  can correct for projection distortion caused by image content captured with camera geometries that are not based on planar perspective projections. For example, corrections can be applied to the images by interpolating images from a number of different viewing angles and by conditioning viewing rays associated with the images as originating from a common origin. The interpolated images can be interleaved into captured images to produce virtual content that appears accurate to the human eye with a comfortable level of rotational parallax for the human eye. 
     In the example system  100 , the devices  106 ,  108 , and  112  may be a laptop computer, a desktop computer, a mobile computing device, or a gaming console. In some implementations, the devices  106 ,  108 , and  112  can be a mobile computing device that can be disposed (e.g., placed/located) within the HMD device  110 . The mobile computing device can include a display device that can be used as the screen for the HMD device  110 , for example. Devices  106 ,  108 , and  112  can include hardware and/or software for executing a VR application. In addition, devices  106 ,  108 , and  112  can include hardware and/or software that can recognize, monitor, and track 3D movement of the HMD device  110 , when these devices are placed in front of or held within a range of positions relative to the HMD device  110 . In some implementations, devices  106 ,  108 , and  112  can provide additional content to HMD device  110  over network  104 . In some implementations, devices  102 ,  106 ,  108 ,  110 , and  112  can be connected to/interfaced with one or more of each other either paired or connected through network  104 . The connection can be wired or wireless. The network  104  can be a public communications network or a private communications network. 
     The system  100  may include electronic storage. The electronic storage can be included in any of the devices (e.g., camera rig  102 , image processing system  106 , HMD device  110 , and/or so forth). The electronic storage can include non-transitory storage media that electronically stores information. The electronic storage may be configured to store captured images, obtained images, pre-processed images, post-processed images, etc. Images captured with any of the disclosed camera rigs can be processed and stored as one or more streams of video, or stored as individual frames. In some implementations, storage can occur during capture and rendering can occur directly after portions of capture to enable faster access to panoramic stereo content earlier than if capture and processing were not concurrent. 
       FIG. 2  is a diagram depicting an example camera rig  200  configured to capture images of a scene for use in generating stereoscopic panoramas. The camera rig  200  includes a first camera  202 A and a second camera  202 B affixed to a ring-shaped support base (not shown). As shown, cameras  202 A and  202 B are disposed in an annular location facing directly outward (toward images/scenes to be capture) and parallel to a center or axis of rotation (A 1 ) of the rig  200 . In some implementations, the diagram of  FIG. 2  may correspond to one tier of a multi-tier camera rig. 
     In the depicted example, the cameras  202 A and  202 B are disposed (e.g., placed) on a mount plate  208  at a distance apart (B 1 ). In some implementations, the distance (B 1 ) between each camera on the camera rig  200  may represent an average human interpupillary distance (IPD). Placing the cameras at IPD distance apart can approximate how human eyes would view images as they rotate (left or right as shown by arrow  204 ) to scan a scene around a capture path indicated by arrow  204 . Example average human IPD measurements can be about 5 centimeters to about 6.5 centimeters. In some implementations, each camera disposed at standard IPD distance apart can be part of a stereo pair of cameras. 
     In some implementations, the camera rig  200  can be configured to approximate a diameter of a standard human head. For example, the camera rig  200  can be designed with a diameter  206  of about 8 centimeters to about 10 centimeters. This diameter  206  can be selected for the rig  200  to approximate how a human head would rotate and view scene images with human eyes with respect to center of rotation A 1 . Other measurements are possible and the rig  200  or system  100  can adjust the capture techniques and the resulting images if, for example, a larger diameter were to be used. 
     In a non-limiting example, the camera rig  200  can have a diameter  206  of about 8 centimeters to about 10 centimeters and can house cameras placed at an IPD distance apart of about 6 centimeters. A number of rig arrangements will be described below. Each arrangement described in this disclosure can be configured with the aforementioned or other diameters and distances between cameras. 
     As shown in  FIG. 2 , two cameras  202 A,  202 B can be configured with a wide field of view. For example, the cameras can capture a field of view of about 150 degrees to about 180 degrees. The cameras  202 A,  202 B may have fish-eye lens to capture wider views. In some implementations, cameras  202 A,  202 B function as a stereo pair. 
     In operation, the rig  200  can be rotated 360 degrees around the center of rotation A 1  to capture a panoramic scene. Alternatively, the rig can remain stationary and additional cameras can be added to the camera rig  200  to capture additional portions of the 360-degree scene (as shown in  FIG. 3  and  FIG. 4A , for example). 
       FIG. 3  is a diagram depicting another example camera rig  300  configured to capture images of a scene for use in generating stereoscopic panoramas. The camera rig  300  includes a number of cameras  302 A- 302 H affixed to a ring-shaped support base (not shown). The first camera  302 A is shown as a solid line and the additional cameras  302 B- 302 H are shown with broken lines to indicate that they are optional. In contrast to the parallel mounted cameras shown in camera rig  200  (see cameras  202 A and  202 B), the cameras  302 A- 302 H are disposed tangentially to the outer circumference of the circular camera rig  300 . As shown in  FIG. 3 , camera  302 A has a neighboring camera  302 B and a neighboring camera  302 H. 
     In the depicted example, the cameras  202 A and  202 B are disposed at a specific distance apart (B 1 ), similar to the cameras in rig  200 . In this example, cameras  302 A and  302 B can function as a neighboring pair to capture angles off of a center camera lens to a leftward and rightward direction, respectively, as described in detail below. 
     In one example, the camera rig  300  is circular rig that includes a rotatable or fixed base (not shown) and a mount plate  306  (which can also be referred to a support) and the neighboring pair of cameras includes a first camera  302 A, placed on the mount plate  306 , and configured to point in a viewing direction that is tangential to an edge of the mount plate  306  and arranged to point toward a leftward direction, and a second camera  302 B, placed on the mount plate  306  in a side-by-side fashion to the first camera and placed at an interpupillary distance (or a different distance (e.g., less than IPD distance)) from the first camera  302 A, the second camera  302 B arranged to point in a viewing direction that is tangential to an edge of the mount plate  306  and arranged to point toward a rightward direction. Similarly, neighboring pairs can be made from cameras  302 C and  302 D, another pair from cameras  302 E and  302 F, and yet another pair from cameras  302 G and  302 H. In some implementations, each camera (e.g.,  302 A) can be paired with a camera that is not adjacent to itself, but is adjacent to its neighbor, such that each camera on the rig can be paired to another camera on the rig. In some implementations, each camera can be paired with its direct neighbor (on either side). 
     In some implementations, one or more stereo images can be generated by the interpolation module  114 . For example, in addition to the stereo cameras shown on camera rig  300 , additional stereo cameras can be generated as synthetic stereo image cameras. In particular, analyzing rays from captured images (e.g., ray tracing) can produce simulated frames of a 3D scene. The analysis can include tracing rays backward from a viewpoint through a particular image or image frame and into the scene. If a particular ray strikes an object in the scene, each image pixel through which it passes can be painted with a color to match the object. If the ray does not strike the object, the image pixel can be painted with a color matching a background or other feature in the scene. Using the viewpoints and ray tracing, the interpolation module  114  can generate additional scene content that appears to be from a simulated stereo camera. The additional content can include image effects, missing image content, background content, content for outside the field of view. 
     As shown in  FIG. 3 , the cameras  302 A- 302 H are disposed (e.g., placed) tangentially to the outer circumference of camera rig  300 , and as such, can capture up to a 180 degree view of a scene. That is, since the cameras are placed in a tangential manner, a fully un-occluded, 180-degree field of view can be captured in each camera on the rig. 
     In some implementations, the camera rig  300  includes a neighboring cameras. For example, the rig  300  can include neighboring cameras  302 A and  302 B. Camera  302 A can be configured with an associated lens directed in a viewing direction that is tangential to an edge of a mount plate  304  and arranged to point toward a leftward direction. Similarly, camera  302 B can be disposed on the mount plate  304  in a side-by-side fashion to camera  302 A and placed at approximate human interpupillary distance from camera  302 A and arranged to point in a viewing direction that is tangential to an edge of the mount plate  304  and arranged to point toward a rightward direction. 
     In some implementations, particular sensors on cameras  302 A-H (or on camera rig  300 ) may be disposed tangentially to the outer circumference of the cameras  302 A-H (or the rig  300 ), rather than the having the actual cameras  302 A-H disposed tangentially. In this manner, the cameras  302 A-H can be placed according to a user preference and the sensors can detect which camera or cameras  302 A-H can capture images based on rig  300  location, sweeping speed, or based on camera configurations and settings. 
     In some implementations, the neighbors can include camera  302 A and camera  302 E arranged in a back-to-back or side-by-side fashion. This arrangement can also be used to gather viewing angles to the left and right of an azimuth  308  formed by the respective camera lens and the mount plate  304 . In some implementations, the cameras are arranged at a tilted angle to the left and right of the azimuth  308  formed by the camera lens and the mount plate  304 , respectively. 
     In some implementations, cameras placed on camera rig  300  can be paired with any other neighboring camera during image interpolation and simply aligned around the circular rig in an outward facing direction. In some implementations, the rig  300  includes a single camera (e.g., camera  302 A). In the event that only camera  302 A is mounted to rig  300 , stereo panoramic images can be captured by rotating the camera rig  300  a full 360 degrees clockwise. 
     In some implementations, the diagram of  FIG. 3  may correspond to one tier of a multi-tier camera rig. For example, in such implementations, one tier of a multi-tier camera rig may include cameras  302 A- 302 H affixed to a ring-shaped support structure of the multi-tier camera rig. 
       FIGS. 4A through 4D  are diagrams that illustrate various views (a perspective view, a side view, a top view, and a bottom view, respectively) of a camera rig  400  (also can be referred to as a multi-tier camera rig) according to an implementation. As shown, the camera rig  400  includes a camera housing  420  with a lower circular perimeter  430  and an upper multi-face cap  440 . The lower circular perimeter  430  can include cameras  405 A through  405 C and  405 M. Although this implementation of the lower circular perimeter  430  includes more than four cameras, only four of the cameras are labeled for simplicity. In this implementation, the cameras (which can also be referred to as capture devices or image sensors) can be referred to collectively as cameras  405 . The upper multi-face cap  440  can include cameras  415 A through  415 C and  415 M. Although this implementation of the upper multi-face cap includes more than three cameras, only three of the cameras are labeled for simplicity. In this implementation, the cameras (which can also be referred to as capture devices or image sensors) can be referred to collectively as cameras  415 . 
     The cameras  415  (e.g.,  415 A, etc.) are included in a first tier of cameras (or image sensors), and the cameras  405  (e.g.,  405 A, etc.) are included in a second tier of cameras (or image sensors). The first tier of cameras can be referred to as primary tier of cameras. As shown in  FIG. 4B , a field of view (or center) of each of the image sensors in the first tier of cameras is disposed within, or intersects a plane PQ 1 , and a field of view (or center) of each of the image sensors in the second tier of cameras is disposed within, or intersects a plane PQ 2 . The plane PQ 1  is parallel to plane PQ 2 . 
     In this implementation, the camera rig  400  includes a first tier of sixteen cameras  415  and second tier of six cameras  405 . In some implementations, the ratio of lower level (or tier) cameras to upper level (or tier) cameras is greater than 2:1 but less than 3:1 (e.g., 2.67:1). 
     As shown, in this implementation, the camera rig  400  only includes two tiers of cameras. The camera rig  400  excludes a third tier of cameras and thus only has cameras on two planes. In this implementation, there is no corresponding level of cameras similar to the second tier of cameras below the first tier of cameras in the camera rig  400 . A lower level (or tier) of cameras can be excluded to reduce image processing, weight, expense, etc. without sacrificing image utility. 
     Although not shown, in some implementations, a camera rig can include three tiers of cameras. In such implementations, the third tier of cameras can have the same number (e.g., six cameras) or a different number (e.g., less, more) of cameras as the second tier of cameras. The first tier of cameras (e.g., sixteen) can be disposed between the second and third tier of cameras. 
     Similar to the other implementations described herein, the cameras  405  of the lower perimeter  430  of the camera rig  400  are outward facing (e.g., facing away from a center of the camera rig  400 ). In this implementation, each of the cameras  405  is oriented so that an axis along which a field of view of a lens system of the cameras  405  is centered is perpendicular to a tangent of a circular shape (e.g., a circle, substantially a circle) defined by the lower circular perimeter  430  of camera housing  420 , and by extension the circular shape defined by cameras  405 . Such an example is illustrated in at least  FIG. 5  with axes  510  and a tangent lines  520  associated with cameras  405 . 
     In this implementation, each of the cameras is configured so that an axis  510  (shown in  FIG. 5 ) may extend through one lens system (e.g., a center of one lens or capture sensor) on one side of the camera rig  400 , through the center  530  of the camera rig  400 , and through another lens system on another side of the camera rig  400 . The cameras  405  (or image sensors) are arranged in a circular shape around the lower circular perimeter  430  of the camera housing  420  such that each of the cameras  405  have an outward projection (or center of projection) that can be normal to the lower circular perimeter  430  and by extension to the circular shape defined by the camera rig  400 . In other words, the cameras  405  can have projections facing away from an inner portion of the camera rig  400 . 
     In some implementations, the lens systems of each of the cameras  405  are offset from the center of the body of each of the cameras  405 . This results in each of the cameras being disposed within camera housing  420  offset at an angle with respect to the other cameras  405  so that the field of view of each of the cameras can be perpendicularly oriented (e.g., facing perpendicular to a tangent of the circular shape defined by the lower perimeter  420 ) with respect to the camera rig  400 . 
     Although not shown, in some implementations, an odd number of cameras may be included in the camera housing as part of the lower circular perimeter  420 . In such implementations, the lens systems of the cameras may have a field of view centered about an axis perpendicular to a tangent of the camera rig (or a circular shape defined by the camera rig) without an axis disposed through multiple of the camera lens systems and the center of the camera rig. 
     In some implementations, a minimum or maximum geometry of the lower circular perimeter  430  can be defined based on the optics (e.g., field of view, pixel resolution) of one or more of the cameras  405 . For example, a minimum diameter and/or a maximum diameter of the lower circular perimeter  430  can be defined based on a field of view of at least one of the cameras  405 . In some implementations, a relatively large (or wide) field of view can result in a relatively small lower circular perimeter  430 . As shown in  FIGS. 4A through 4D , for example, each of the cameras  405  is arranged in a portrait mode (e.g., 4:3 aspect ratio mode) so that a horizontal dimension of images captured by the cameras  405  is less than a vertical dimension of the images captured by the cameras  405 . In some implementations, each of the cameras  405  can be arranged in any aspect ratio or orientation (e.g., a 16:9 or 9:16 aspect ratio, 3:4 aspect ratio). 
     In some implementations, the diameter (or radius (RA) (shown in  FIG. 4C ) of the lower perimeter  430  is defined so that the field of view of at least three adjacent cameras  405  overlaps (e.g., intersects, intersects at least at a point, area, and/or volume in space). The sensors within the cameras  405  are disposed within a plane (which is substantially parallel to a plane through the lower perimeter  430 ). In some implementations, an entire field of view (e.g., or substantially an entire field of view) of at least two adjacent cameras  405  can overlap with a field of view of a third one of the cameras  405  (adjacent to at least one of the two adjacent cameras  405 ). In some implementations, the field of view of any set of three adjacent cameras  405  can overlap so that any point (e.g., any point within a plane through the sensors of the cameras  405 ) around the lower perimeter  430  can be captured by at least three cameras  405 . The overlap of the three adjacent cameras  405  can be important in being able to capture 360° video with proper depth, focus, etc. 
     In some implementations, the cameras  415  of the upper multi-face cap  430  of the camera rig  400  are outward facing (e.g., facing away from a center of the camera rig  400 ). According to some implementations, each of the cameras  415  is oriented so that an axis along which a field of view of a lens system of the cameras  415  is non-parallel with the axes of a field of view of a lens system of the cameras  405 . For example, as shown in  FIG. 6 , the axes for the field of view  610  of cameras  415  forms an acute angle with the axes for the field of view  510  of cameras  405  for those cameras  415  disposed directly above cameras  405  on camera housing  420  (e.g., camera  415 A and camera  405 A). Also, the axes for the field of view  610  of cameras  415  forms an obtuse angle with the axes for the field of view  510  of cameras  405  for those cameras  415  disposed above cameras  405  on the opposite side of camera housing  420  (e.g., camera  415 A and camera  405 B). 
     In some implementation, each of the cameras is configured so that an axis  610  (shown in  FIG. 6 ) may extend through one lens system (e.g., a center of one lens or capture sensor) on one side of the camera rig  400 , through the center  630  of the lower circular perimeter. The cameras  415  (or image sensors) are arranged in a circular shape around the upper multi-face cap  440  of the camera housing  420  such that each of the cameras  415  have an outward projection (or center of projection) that is non-parallel to the normal of the lower perimeter  430 . 
     In some implementations, cameras  415  are disposed on respective faces  445  of the upper multi-face cap  440 . For example, as shown in  FIGS. 4A-4D , camera  415 A is disposed on face  445 A, camera  415 B is disposed on face  445 B, and camera  415 M is disposed on face  445 M. The faces  445  of the upper multi-face cap  440  may be oriented on a plane at an angle different from the angle of the plane of the lower circular perimeter  430 . In some implementations, while the cameras  405  of the lower circular perimeter  430  may face directly outward from the center of camera housing  420 , the faces  445  may direct the cameras  415  upward and outward from the center of camera housing  420 , as shown in  FIGS. 4A-4D . In other words, the cameras  415  can have projections facing away and upward from an inner portion of the camera rig  400 . Although not shown, in some implementations, an odd number of cameras  415  may be included in the camera housing  420  as part of the upper multi-face cap  440 . 
     In some implementations, a minimum or maximum geometry oft the upper multi-face cap  440  can be defined based on the optics (e.g., field of view, pixel resolution) of one or more of the cameras  415 . For example, a minimum diameter and/or a maximum diameter of the upper multi-face cap  440  can be defined based on a field of view of at least one of the cameras  415 . In some implementations, a relatively large (or wide) field of view of at least one of the cameras  415  (e.g., sensors of the at least one camera  415 ) can result in a relatively small upper multi-face cap  440 . As shown in  FIGS. 4A through 4D , for example, each of the cameras  415  is arranged in a landscape mode (e.g., 3:4 aspect ratio mode) so that a horizontal dimension of images captured by the cameras  415  is greater than a vertical dimension of the images captured by the cameras  415 . In some implementations, each of the cameras  415  can be arranged in any aspect ratio or orientation (e.g., a 16:9 or 9:16 aspect ratio, 4:3 aspect ratio). 
     In some implementations, the diameter (or radius) of the upper multi-face cap  440  is defined so that the field of view of at least three adjacent cameras  415  overlaps. In some implementations, an entire field of view (e.g., or substantially an entire field of view) of at least two adjacent cameras  415  can overlap with a field of view of a third one of the cameras  415  (adjacent to at least one of the two adjacent cameras  415 ). In some implementations, the field of view of any set of three adjacent cameras  415  can overlap so that any point (e.g., any point within a plane through the sensors of the cameras  415 ) around the upper multi-face cap  440  can be captured by at least three cameras  415 . 
     According to some implementations, faces  445  may be angled such that cameras  415  capture images that are out of the field of view of cameras  405 . For example, as cameras  405  can be disposed along the lower circular perimeter  430  of the camera housing  420  such that each of the first plurality of cameras have an outward projection normal to the lower circular perimeter  430 , cameras  405  may not be able to capture images directly above the camera housing  420 . Accordingly, faces  445  may be angled so that cameras  415  capture imaged directly above the camera housing  420 . 
     The camera rig  400  can include a stem housing  450 , according to some embodiments. The stem housing  450  can include one more air flow chambers that have been configured to direct heat away from cameras  405  and  415  and toward the bottom of camera rig  400 . According to some implementations, a fan  460  may be located at the bottom of stem housing  450  to facilitate air flow through camera rig  400  and remove heat from camera housing  420 . 
     In some implementations, the camera rig  400  can include a microphone (not shown) for recording audio associated with images (and video) captured by cameras  405  and cameras  410 . In some implementations, the camera rig  400  can include a microphone mount to which an external microphone may be attached and connected to the camera rig  400 . 
     In some implementations, the camera rig  400  can include a mechanism for mounting to another device such as a tripod, and the mounting mechanism may be attached to the stem housing  450 . In some implementations, one or more openings can be disposed (e.g., disposed on a bottom side of the camera rig  400 ) so that the camera rig  400  can be mounted to a tripod. In some implementations, the coupling mechanism for mounting the camera rig  400  to another device such as a tripod can be disposed on a side opposite the location for a microphone mount. In some implementations, the coupling mechanism for mounting the camera rig  400  to another device can be on a same side as the location for the microphone mount. 
     In some implementations, the camera rig  400  can be removably coupled to another device such as a vehicle (e.g., an aerial vehicle such as a quad copter). In some implementations, the camera rig  400  can be made of a material sufficiently light such that the camera rig  400  and associated cameras  405 ,  415  can be moved using an aerial vehicle such as a quad copter 
     In some implementations, the camera rigs described in this disclosure can include any number of cameras mounted on a circular housing. In some implementations, cameras can be mounted equidistant with neighboring cameras on each of four directions outward from the center of the circular rig. In this example, the cameras, configured as stereoscopic neighbors, for example, can be aimed outward along a circumference and disposed in a zero degree, ninety degree, one-hundred eighty degree, and two hundred seventy degree fashion so that each stereoscopic neighbor captures a separate quadrant of a 360-degree field of view. In general, the selectable field of view of the cameras determines the amount of overlap of camera view of a stereoscopic neighbor, as well as the size of any blind spots between cameras and between adjacent quadrants. One example camera rig can employ one or more stereoscopic camera neighbors configured to capture a field of about 120 degrees up to about 180 degrees. 
     In some implementations, the camera housings of the multi-tier camera rigs described in this disclosure can be configured with a diameter (e.g., diameter  206  in  FIG. 2 ) of about 5 centimeters to about 8 centimeters to mimic human interpupillary distances to capture what a user would see if, for example, the user were to turn her head or body in a quarter circular shape, half circular shape, full circular shape, or other portion of a circular shape. In some implementations, the diameter can refer to a distance across the rig or camera housing from camera lens to camera lens. In some implementations, the diameter can refer to a distance from one camera sensor across the rig to another camera sensor. 
     In some implementations, the camera rig is scaled up from about 8 centimeters to about 25 centimeters to, for example, house additional camera fixtures. In some implementations, fewer cameras can be used on a smaller diameter rig. In such an example, the systems described in this disclosure can ascertain or deduce views between the cameras on the rig and interleave such views with the actual captured views. 
     In some implementations, the camera rigs described in this disclosure can be used to capture a panoramic image by capturing an entire panorama in a single exposure by using a camera with a rotating lens, or a rotating camera, for example. The cameras and camera rigs described above can be used with the methods described in this disclosure. In particular, a method described with respect to one camera rig can be performed using any of the other camera rigs described herein. In some implementations, the camera rigs and subsequent captured content can be combined with other content, such as virtual content, rendered computer graphics (CG) content, and/or other obtained or generated images. 
     In general, images captured using at least three cameras (e.g.,  405 A,  405 B,  405 C) on the camera rig  400  can be used to calculate depth measurements for a particular scene. The depth measurements can be used to translate portions of the scene (or images from the scene) into 3D stereoscopic content. For example, the interpolation module  114  can use the depth measurements to produce 3D stereoscopic content that can be stitched into 360 degree stereo video imagery. 
     In some implementations, the camera rig  400  can capture all of the rays needed by the omnidirectional stereo (ODS) projection shown in, for example,  FIG. 19 , while maximizing image quality and minimizing image distortions. 
     The cameras (for each tier) along a circular shape of radius R which is greater than the radius of the ODS viewing circle r (not shown). An ODS ray which passes through a camera will do so at an angle sin −1  (r/R) to the normal of the circle on which the cameras lie. Two distinct camera layouts are possible: a tangential layout (not shown) and a radial one, as shown in, for example, each of the tiers of the camera rig  400  in  FIGS. 4A through 4D . 
     The tangential layout dedicates half of the cameras to capturing rays for the left image and the other half to capturing rays for the right image, and aligns each camera so that an ODS ray which passes through it does so along its optical axis. On the other hand, the radial layout of the camera rig  400  uses all of the cameras to collect rays for both the left and right images and so each camera faces directly outwards. 
     In some implementations, the advantage of the radial design of the camera rig  400  is that image interpolation occurs between adjacent cameras, while for the tangential design it must occur between every other camera, which doubles the baseline for the view interpolation problem and makes it more challenging. In some implementations, each camera of the camera rig  400  of the radial design must capture rays for the left and right image, the horizontal field of view required by each camera is increased by 2 sin −1  (r/R). In practice, this means that the radial design of the camera rig  400  can be better for larger rig radii and the tangential design can be better for smaller radii. 
     The cameras included in the camera rig  400  can be around, for example, 3 cm wide and therefore can limit how small the camera rig  400  can be made. Accordingly, in some implementations, the radial design can be more appropriate and further discussion is based on this layout. In some implementations, the camera rig  400  geometry can be described by 3 parameters (see  FIG. 4C ). The radius R of the rig, the horizontal field of view of the cameras γ, and the number of cameras n. The camera rig  400  described herein achieves at least the considerations noted below:
         Minimize rig diameter R, thereby reducing vertical distortion.   Minimize the distance between adjacent cameras, thereby reducing the baseline for view interpolation.   Have a sufficient horizontal field of view for each camera, so that content at least some distance d from the rig center can be stitched.   Maximize each camera&#39;s vertical field of view, which results in a large vertical field of view in the output video.   Maximize overall image quality, which generally requires using large cameras.       

     Between adjacent cameras in a ring (or tier) of the camera rig  400  views can be synthesized on a straight line lying between the two cameras and that these synthesized views may only include points observed by both cameras.  FIG. 4C  shows the volume to be observed by one camera in order to allow stitching for all points with distances from the camera rig  400  center of at least d. 
     Given a ring of radius R containing n cameras, the minimum required horizontal field of view for each camera can be derived as follows: 
     
       
         
           
             
               
                 
                   β 
                   = 
                   
                     
                       
                         2 
                          
                         π 
                       
                       n 
                     
                     + 
                     
                       
                         cos 
                         
                           - 
                           1 
                         
                       
                        
                       
                         r 
                         d 
                       
                     
                     - 
                     
                       
                         cos 
                         
                           - 
                           1 
                         
                       
                        
                       
                         r 
                         R 
                       
                     
                   
                 
               
               
                 
                   ( 
                   1 
                   ) 
                 
               
             
             
               
                 
                   
                     b 
                     2 
                   
                   = 
                   
                     
                       d 
                       2 
                     
                     + 
                     
                       R 
                       2 
                     
                     - 
                     
                       2 
                        
                       
                           
                       
                        
                       dR 
                        
                       
                           
                       
                        
                       cos 
                        
                       
                           
                       
                        
                       β 
                     
                   
                 
               
               
                 
                   ( 
                   2 
                   ) 
                 
               
             
             
               
                 
                   
                     π 
                     - 
                     
                       γ 
                       2 
                     
                   
                   = 
                   
                     
                       cos 
                       
                         - 
                         1 
                       
                     
                      
                     
                       ( 
                       
                         
                           
                             R 
                             2 
                           
                           + 
                           
                             b 
                             2 
                           
                           - 
                           
                             d 
                             2 
                           
                         
                         
                           2 
                            
                           
                               
                           
                            
                           Rb 
                         
                       
                       ) 
                     
                   
                 
               
               
                 
                   ( 
                   3 
                   ) 
                 
               
             
             
               
                 
                   γ 
                   = 
                   
                     2 
                      
                     
                         
                     
                      
                     
                       
                         cos 
                         
                           - 
                           1 
                         
                       
                        
                       
                         ( 
                         
                           
                             
                               d 
                                
                               
                                   
                               
                                
                               cos 
                                
                               
                                   
                               
                                
                               β 
                             
                             - 
                             R 
                           
                           
                             
                               
                                 d 
                                 2 
                               
                               + 
                               
                                 R 
                                 2 
                               
                               - 
                               
                                 2 
                                  
                                 
                                     
                                 
                                  
                                 dR 
                                  
                                 
                                     
                                 
                                  
                                 cos 
                                  
                                 
                                     
                                 
                                  
                                 β 
                               
                             
                           
                         
                         ) 
                       
                     
                   
                 
               
               
                 
                   ( 
                   4 
                   ) 
                 
               
             
           
         
       
     
     In some implementations, the panoramic images produced by each of the tiers included in a camera rig (e.g., the camera rig  400 ) can have at least 10 degrees of overlap at the desired minimum stitching distance (e.g., approximately 0.5 m). More details are disclosed in Anderson et al., “Jump: Virtual Reality Video”, ACM Transactions on Graphics (TOG), Proceedings of ACM SIGGRAPH Asia 2016, Vol. 35, Issue 6, Art. No. 198, November 2016, which is incorporated herein by reference in its entirety. 
       FIG. 7  is a diagram that illustrates an example VR device (VR headset)  702 . A user can put on the VR headset  702  by placing the headset  702  over her eyes similar to placing goggles, sunglasses, etc. In some implementations, referring to  FIG. 1 , the VR headset  702  can interface with/connect to a number of monitors of computing devices  106 ,  108 , or  112 , using one or more high-speed wired and/or wireless communications protocols (e.g., Wi-Fi, Bluetooth, Bluetooth LE, USB, etc.) or by using an HDMI interface. The connection can provide the virtual content to the VR headset  702  for display to the user on a screen (not shown) included in the VR headset  702 . In some implementations, the VR headset  702  can be a cast-enabled device. In these implementations, the user may choose to provide or “cast” (project) the content to the VR headset  702 . 
     In addition, the VR headset  702  can interface with/connect to the computing device  104  using one or more high-speed wired and/or wireless communications interfaces and protocols (e.g., Wi-Fi, Bluetooth, Bluetooth LE, Universal Serial Bus (USB), etc.). A computing device ( FIG. 1 ) can recognize the interface to the VR headset  702  and, in response, can execute a VR application that renders the user and the computing device in a computer-generated, 3D environment (a VR space) that includes virtual content. 
     In some implementations, the VR headset  702  can include a removable computing device that can execute a VR application. The removable computing device can be similar to computing devices  108  or  112 . The removable computing device can be incorporated within a casing or frame of a VR headset (e.g., the VR headset  702 ) that can then be put on by a user of the VR headset  702 . In these implementations, the removable computing device can provide a display or screen that the user views when interacting with the computer-generated, 3D environment (a VR space). As described above, the mobile computing device  104  can connect to the VR headset  702  using a wired or wireless interface protocol. The mobile computing device  104  can be a controller in the VR space, can appear as an object in the VR space, can provide input to the VR space, and can receive feedback/output from the VR space. 
     In some implementations, the mobile computing device  108  can execute a VR application and can provide data to the VR headset  702  for the creation of the VR space. In some implementations, the content for the VR space that is displayed to the user on a screen included in the VR headset  702  may also be displayed on a display device included in the mobile computing device  108 . This allows someone else to see what the user may be interacting with in the VR space. 
     The VR headset  702  can provide information and data indicative of a position and orientation of the mobile computing device  108 . The VR application can receive and use the position and orientation data as indicative of user interactions within the VR space. 
       FIG. 8  is an example graph  800  that illustrates a number of camera (and neighbors) as a function of a camera field of view for one tier of a multi-tier camera rig. The graph  800  represents an example graph that can be used to determine the number of cameras that may be disposed on one tier of a multi-tier camera rig for a predefined field of view for generating a stereoscopic panorama. The graph  800  can be used to calculate camera settings and camera placement to ensure a particular stereo panoramic outcome. One example setting can include the selection of a number of cameras to affix to a particular camera rig. Another setting can include determining algorithms that will be used during capture, pre- or post-processing steps. For example, for optical flow interpolation techniques, stitching a full 360-degree panorama may dictate that every optic ray direction should be seen by at least two cameras. This may constrain the minimum number of cameras to be used in order to cover the full 360 degrees as a function of the camera field of view, theta [θ]. Optical flow interpolation techniques can be performed and configured either by camera neighbors (or pairs) or by individual cameras. 
     As shown in  FIG. 8 , a graph is depicted that illustrates a function  802 . The function  802  represents a number of camera [n]  804  as a function of the camera field of view [θ]  806 . In this example, a camera field of view of about 95 degrees is shown by line  808 . The intersection  810  of line  808  and function  802  shows that using sixteen (16) cameras each with a field of view of 95 degrees would provide a desirable panoramic outcome. In such an example, the camera rig can be configured by interleaving neighboring cameras for each neighboring set of cameras to use any space that might occur when placing neighboring cameras on a rig. 
     In addition to interleaving the neighboring cameras, the optical flow requirement can dictate that the system  100  compute optical flow between cameras of the same type. That is, optical flow can be computed for a first camera and then for a second camera, rather than computing both simultaneously. In general, the flow at a pixel can be calculated as an orientation (e.g., direction and angle) and a magnitude (e.g., speed). 
       FIG. 9  is an example graph  900  that illustrates an interpolated field of view [θ 1 ]  902  as a function of a camera field of view [θ]  904 . The graph  900  can be used to determine what portion of the field of view of a camera is shared with its left or right neighbor. Here, at a camera field of view of about 95 degrees (shown by line  906 ), the interpolated field of view is shown as approximately 48 degrees, as shown by the intersection  908 . 
     Given that two consecutive cameras do not typically capture images of exactly the same field of view, the field of view of an interpolated camera will be represented by the intersection of the field of views of the camera neighbors. The interpolated field of view [θ 1 ] can then be a function of the camera field of view [θ] and the angle between camera neighbors. If the minimum number of cameras is selected for a given camera field of view (using the method shown in  FIG. 8 ), then [θ 1 ] can be computed as a function of [θ], as shown in  FIG. 9 . 
       FIG. 10  is an example graph  1000  that illustrates selection of a configuration for a camera rig. In particular, graph  1000  can be used to determine how large a particular camera rig can be designed. Graph  1000  depicts a plot of a stitching ratio [d/D]  1002  as a function of rig diameter [D in centimeters]  1004 . To produce a comfortable virtual reality panoramic viewing experience, an omnistereo stitching diameter [d] is selected, in the examples in this disclosure, to be about 5 centimeters to about 6.5 centimeters, which is typical of human IPD. In some implementations, omnistereo stitching can be performed using a capture diameter [D] that is about the same as the stitching diameter [d]. That is, maintaining a stitching ratio of about “1” can provide for easier stitching in post-processing of omnistereo images, for example. This particular configuration can minimize distortion since the optic rays used for stitching are the same as the actual camera-captured rays. Obtaining a stitching ratio of “1” can be difficult when the selected number of cameras is high (e.g., 12-18 cameras per rig). 
     To mitigate the issue of too many cameras on the rig, the rig size can be designed with a larger size to accommodate the additional cameras and allow the stitching ratio to remain the same (or substantially the same). To ensure that the stitching algorithm samples content in images taken near to the center of the lens during capture, the stitching ratio can be fixed to determine an angle [α] of the cameras with respect to the rig. For example,  FIG. 10  shows that sampling near the center of the lens improves image quality and minimizes geometric distortions. In particular, smaller angles [α] can help avoid rig occlusions (e.g., cameras imaging parts of the rig itself). 
     As shown in  FIG. 10  at  1006 , a stitching ratio [d/D] of 0.75 corresponds to a rig diameter of about 6.5 centimeters (i.e., typical human IPD). Decreasing the stitching ratio [d/D] to about 0.45 allows an increase in the rig diameter to about 15 centimeters (shown at  1008 ), which can allow additional cameras to be added to the rig. The angle of the cameras with respect to the camera rig can be adjusted based on the selected stitching ratio. For example, adjusting the camera angles to about 30 degrees indicates that the rig diameter can be as large as about 12.5 centimeters. Similarly, adjusting the camera angles to about 25 degrees indicates that the rig diameter can be as large as 15 centimeters and still maintain proper parallax and vision effects when rendered back for a user, for example. 
     In general, given a rig diameter [D], an optimal camera angle [α] can be calculated. From [a], a maximum field of view, [Θ u ], can be calculated. The maximum field of view, [Θ u ], generally corresponds to the field of view where the rig does not partially occlude the cameras. The maximum field of view can limit how few cameras the camera rig can hold and still provide views that are not occluded. 
       FIG. 11  is a graph  1100  that illustrates an example relationship that can be used to determine a minimum number of cameras for one tier of a multi-tier camera rig according to a predefined rig diameter. Here, the minimum number of cameras in a tier [n min ]  1102  for a given rig diameter [D]  1104  is shown. The rig diameter [D]  1104  limits the maximum un-occluded field of view, which functions to limit the minimum number of cameras. As shown in the graph at  1106 , for a rig diameter of about 10 centimeters, a minimum of sixteen (16) cameras can be used in one tier of the camera rig to provide an un-occluded view. Modifying the rig diameter can allow an increase or decrease in the number of cameras placed on the rig. In one example, the rig can accommodate about 12 to about 16 cameras on a rig size of about 8 to about 25 centimeters. 
     Since other methods are available to tune the field of view and image capture settings, these calculations can be combined with these other methods to further refine the camera rig dimensions. For example, optical flow algorithms can be used to change (e.g., reduce) the number of cameras typically used to stitch an omnistereo panorama. In some implementations, the graphs depicted in this disclosure or generated from systems and methods described in this disclosure can be used in combination to generate virtual content for rendering in an HMD device, for example. 
       FIGS. 12A-B  represent line drawing examples of distortion that can occur during image capture. In particular, the distortion shown here corresponds to effects that occur when capturing stereo panoramas. In general, the distortion can be more severe when the scene is captured close to a camera capturing the scene.  FIG. 12A  represents a plane in a scene that is two meters by two meters and disposed one meter outward from a camera center.  FIG. 12B  is the same plane as  FIG. 12A , but the plane in this figure is disposed 25 centimeters outward from the camera. Both figures use a 6.5 centimeter capture diameter.  FIG. 12A  shows a slight stretch near the center at  1202  while  FIG. 12B  shows a more distended center  1204 . A number of techniques can be employed to correct this distortion. The following paragraphs describe using approximation methods and systems (e.g., camera rig/capture devices) that captured image content to analyze projections (e.g., spherical and planar projections) to correct distortion. 
       FIGS. 13A-B  depict examples of rays captured during collection of a panoramic image by cameras located on one tier of a multi-tier camera rig.  FIG. 13A  shows that given a captured set of images, perspective images can be generated for both the left and right eyes anywhere on a capture path  1302 . Here, the rays for the left eye are shown by rays  1304   a  and rays for the right eye are shown at  1306   a . In some implementations, each of the depicted rays may not be captured due to camera setup, malfunction, or simply insufficient rig setup for the scene. Because of this, some of the rays  1304   a  and  1306   a  can be approximated (e.g., interpolated based on other rays). For example, if the scene is infinitely far away, then one measurable feature of the scene includes ray direction from an origin to a destination. 
     In some implementations, the ray origin may not be collectible. As such, the systems in this disclosure can approximate the left and/or right eye to determine an origin location for the ray.  FIG. 13B  shows approximated ray directions  1306   b  through  1306   f  for the right eye. In this example, instead of the rays originating from the same point, each ray originates from a different point on the circular shape  1302 . The rays  1306   b  through  1306   f  are shown angled tangentially to the capture circular shape  1302  and are disposed at particular areas around the circumference of the capture circular shape  1302 . Also, the position of two different image sensors—image sensor  13 - 1  and image sensor  13 - 2  (which are associated with or included in cameras) associated with a camera rig are shown on camera rig circular shape  1303 . As shown in  FIG. 13B , the camera rig circular shape  1303  is larger than the capture circular shape  1302 . 
     A number of rays (and the color and intensity of images associated with each ray) can be approximated in this manner using a different direction outward from the circular shape. In this fashion, an entire 360-degree panoramic view including many images can be provided for both the left and right eye views. This technique can result in resolving distortion in mid-range objects, but in some instance can still have deformation when imaging nearby objects. For simplicity, approximated left eye ray directions are not depicted. In this example implementation, only a few rays  1306   b  through  1306   f  are illustrated. However thousands of such rays (and images associated with those rays) can be defined. Accordingly, many new images associated with each of the rays can be defined (e.g., interpolated). 
     As shown in  FIG. 13B  ray  1306   b  is projected between image sensor  13 - 1  and image sensor  13 - 2 , which may be disposed on one tier of a multi-tier camera rig. The image sensor  13 - 1  is neighboring the image sensor  13 - 2 . The ray can be a distance G 1  from the image sensor  13 - 1  (e.g., a center of projection of the image sensor  13 - 1 ) and a distance G 2  from the image sensor  13 - 2  (e.g., a center of projection of the image sensor  13 - 2 ). The distances G 1  and G 2  can be based on the location that the ray  1306   b  intersects the camera rig circular shape  1303 . The distance G 1  can be different from (e.g., greater than, less than) the distance G 2 . 
     To define an image (e.g., an interpolated image, a new image) associated with ray  1306   b , a first image (not shown) captured by image sensor  13 - 1  is combined (e.g., stitched together) with a second image (not shown) captured by image sensor  13 - 2 . In some implementations, optical flow techniques can be used to combine the first image and the second image. For example, pixels from the first image corresponding with pixels from the second image can be identified. 
     To define an image associated with, for example, ray  1306   b , corresponding pixels are shifted based on the distances G 1  and G 2 . It can be assumed that the resolution, aspect ratios, elevation, etc. of the image sensors  13 - 1 ,  13 - 2  is the same for purposes of defining an image (e.g., a new image) for the ray  1306   b . In some implementations, the resolution, aspect ratios, elevation, etc. can be different. However, in such implementations, interpolation would need to modified to accommodate for those differences. 
     As a specific example, a first pixel associated with an object in the first image can be identified as corresponding with a second pixel associated with the object in the second image. Because the first image is captured from the perspective of the image sensor  13 - 1  (which is at a first location around the camera rig circular shape  1303 ) and the second image is captured from the perspective of the image sensor  13 - 2  (which is at a second location around the camera rig circular shape  1303 ), the object will be shifted in a position (e.g., X-Y coordinates position) within the first image as compared with a position (X-Y coordinate position) in the second image. Likewise, the first pixel, which is associated with the object, will be shifted in position (e.g., X-Y coordinates position) relative to the second pixel, which is also associated with the object. To produce a new image associated with ray  1306   b , a new pixel that corresponds with the first pixel and the second pixel (and the object) can be defined based on a ratio of the distances G 1  and G 2 . Specifically, the new pixel can be defined at a location that is shifted in position from the first pixel based on distance G 1  (and scaled by a factor based on the distance between the position of the first pixel and the position of the second pixel) and the second pixel based on the distance G 2  (and scaled by a factor based on the distance between the position of the first pixel and the position of the second pixel). 
     According to the implementation described above, parallax can be defined for the new image associated with ray  1306   b  that is consistent with the first image and the second image. Specifically, objects that are relatively close to the camera rig can be shifted a greater amount than objects that are relatively far from the camera rig. This parallax can be maintained between the shifting of pixels (from the first pixel and the second pixel for example) can be based on the distances G 1  and G 2  of the ray  1306   b.    
     This process can be repeated for all of the rays (e.g., rays  1306   b  through  13060  around the capture circular shape  1302 . New images associated with each of the rays around the capture circular shape  1302  can be defined based on a distance between each of the rays and the images sensors (e.g., neighboring image sensors, image sensors  13 - 1 ,  13 - 2 ) around the camera rig circular shape  1303 . 
     As shown in  FIG. 13B , a diameter of the camera rig circular shape  1303  is greater than a diameter of the capture circular shape  1302 . In some implementations, the diameter of the camera rig circular shape  1303  can be between 1.5 to 8 times greater than the diameter of the capture circular shape  1302 . As a specific example, the diameter of the capture circular shape can be 6 centimeters and the diameter of the camera rig circular shape  1303  (e.g., camera mounting ring  412  shown in  FIG. 4A , for example) can be 30 centimeters. 
       FIGS. 14A-B  illustrates the use of approximating planar perspective projection, as described in  FIGS. 13A-B .  FIG. 14A  shows a panoramic scene with distorted lines before approximating the planar perspective rays and projection. As shown, a curtain rod  1402   a , a window frame  1404   a , and a door  1406   a  are depicted as objects with curved features, but in actuality, they are straight-featured objects. Straight-featured objects include objects that do not have curved surfaces (e.g., a flat index card, a square box, a rectangular window frame, etc.). In this example, the objects  1402   a ,  1404   a , and  1406   a  are shown curved because they have been distorted in the image.  FIG. 14B  shows a corrected image in which the planar perspective projection was approximated at a 90-degree horizontal field of view. Here, the curtain rod  1402   a , the window frame  1404   a , and the door  1406   a  are shown as corrected, straight objects  1402   a ,  1404   b , and  1404   c , respectively. 
       FIGS. 15A-C  illustrate examples of approximated planar perspective projection applied to planes of an image.  FIG. 15A  shows a planar perspective projection taken from a panorama using techniques described in this disclosure. The depicted plane view  1500  can represent an overlay of the plane shown in the image in  FIG. 14B , for example. In particular,  FIG. 15A  represents a corrected  FIG. 14A  where the curved lines are projected into straight lines. Here, the plane  1500  of the panorama is shown at a distance of one meter (with a 90 degree horizontal field of view). The lines  1502 ,  1504 ,  1506 , and  1508  are straight, whereas before (corresponding to  FIG. 14A ), the same centerlines were curved and distorted. 
     Other distortions can occur based on the selected projection scheme. For example,  FIG. 15B  and  FIG. 15C  represent planes ( 1510  and  1520 ) generated using planar perspective projection taken from a panorama using techniques in this disclosure. The panorama was captured at a distance of 25 centimeters (90 degrees horizontal field of view).  FIG. 15B  shows the left eye capture  1510  and  FIG. 15C  shows the right eye capture  1520 . Here, the bottoms of the planes ( 1512 ,  1522 ) do not project to a straight line and vertical parallax is introduced. This particular deformation can occur when planar perspective projection is used. 
       FIGS. 16A-B  illustrate examples of introducing vertical parallax.  FIG. 16A  depicts a straight line  1602   a  being captured according to typical omnistereo panoramic techniques. In the depicted example, each ray  1604   a - 1618   a  originates from a different point on the circular shape  1622 . 
       FIG. 16B  depicts the same straight line when viewed using a perspective approximation technique. As shown, the straight line  1602   a  is shown deformed as line  1602   b . Rays  1604   b - 1618   b  originate from a single point on the circular shape  1622 . The deformation can have the effect of bringing the left half of the line  1602   b  toward the viewer and pushing the right half of the line away from the viewer. For the left eye, the opposite can occur, i.e., the left half of the line appears further away while the right half of the line appears closer. The deformed line curves between two asymptotes, which are separated by a distance equal to the diameter  1624  of the panorama rendering circular shape  1622 . Since the deformation is shown as being the same size as the panorama capture radius, it may only be noticeable on nearby objects. This form of deformation can lead to vertical parallax for a user viewing an image, which can cause fusing difficulty when stitching processes are performed on the distorted images. 
       FIGS. 17A-B  depict example points of a coordinate system that can be used to illustrate points in a 3D panorama.  FIGS. 17A-B  depict a point (0,Y,Z)  1702  imaged by the panoramic techniques described in this disclosure. The point&#39;s projection into the left and right panoramas can be represented by (−θ, φ) and (θ,φ), respectively as shown below in equations (1) and (2) where: 
     
       
         
           
             
               
                 
                   
                     cos 
                      
                     
                       ( 
                       θ 
                       ) 
                     
                   
                   = 
                   
                     r 
                     Z 
                   
                 
               
               
                 
                   ( 
                   1 
                   ) 
                 
               
             
             
               
                 
                   
                     tan 
                      
                     
                       ( 
                       φ 
                       ) 
                     
                   
                   = 
                   
                     Y 
                     
                       
                         
                           Z 
                           2 
                         
                         - 
                         
                           r 
                           2 
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   2 
                   ) 
                 
               
             
           
         
       
     
     and where r  1704  is the radius of the panoramic capture. 
       FIG. 17A  depicts a top down view of the panoramic imaging of the point (0,Y,Z)  1702 .  FIG. 17B  depicts a side view of the panoramic imaging of the point (0,Y,Z)  1702 . The point shown projects to (−θ,φ) in the left panorama and projects to (θ,φ) in the right panorama. These particular views are as captured and have not been projected into another plane. 
       FIG. 18  represents a projected view of the point depicted in  FIGS. 17A-17B . Here, the perspective view of point  1702  is oriented to look horizontally with a rotation of angle [α] about the y-axis, as shown in  FIG. 18  by  1802 . Since this perspective projection only considers ray direction, it is possible to find the rays the point  1702  projects along by transforming the rays that see the point  1702  in the panoramic projection  1802  into a perspective camera&#39;s reference frame. For example, the point  1702  projects along the following rays shown in Table 1 below: 
     
       
         
           
               
               
               
             
               
                   
               
               
                   
                 Left image ray 
                 Right image ray 
               
               
                   
               
             
            
               
                 x 
                 
                   
                     
                       
                         
                           cos 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                          
                         
                           sin 
                            
                           
                             ( 
                             
                               
                                 π 
                                 2 
                               
                               - 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
                 
                   
                     
                       
                         
                           cos 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                          
                         
                           sin 
                            
                           
                             ( 
                             
                               
                                 - 
                                 
                                   π 
                                   2 
                                 
                               
                               + 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
               
               
                   
               
               
                 y 
                 sin(φ) 
                 sin(φ) 
               
               
                   
               
               
                 z 
                 
                   
                     
                       
                         
                           cos 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                          
                         
                           cos 
                            
                           
                             ( 
                             
                               
                                 π 
                                 2 
                               
                               - 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
                 
                   
                     
                       
                         
                           cos 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                          
                         
                           cos 
                            
                           
                             ( 
                             
                               
                                 - 
                                 
                                   π 
                                   2 
                                 
                               
                               + 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
               
               
                   
               
            
           
         
       
     
     Performing a perspective division, the point projection can be determined, as shown by equations in Table 2 below: 
     
       
         
           
               
               
               
             
               
                   
               
               
                   
                 Left image 
                 Right image 
               
               
                   
               
             
            
               
                 x 
                 
                   
                     
                       
                         tan 
                          
                         
                           ( 
                           
                             
                               π 
                               2 
                             
                             - 
                             θ 
                             - 
                             α 
                           
                           ) 
                         
                       
                     
                   
                 
                 
                   
                     
                       
                         tan 
                          
                         
                           ( 
                           
                             
                               - 
                               
                                 π 
                                 2 
                               
                             
                             + 
                             θ 
                             - 
                             α 
                           
                           ) 
                         
                       
                     
                   
                 
               
               
                   
               
               
                 y 
                 
                   
                     
                       
                         
                           tan 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                         
                           cos 
                            
                           
                             ( 
                             
                               
                                 π 
                                 2 
                               
                               - 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
                 
                   
                     
                       
                         
                           tan 
                            
                           
                             ( 
                             φ 
                             ) 
                           
                         
                         
                           cos 
                            
                           
                             ( 
                             
                               
                                 - 
                                 
                                   π 
                                   2 
                                 
                               
                               + 
                               θ 
                               - 
                               α 
                             
                             ) 
                           
                         
                       
                     
                   
                 
               
               
                   
               
            
           
         
       
     
     It can be seen that if 
     
       
         
           
             θ 
             = 
             
               π 
               2 
             
           
         
       
     
     (corresponding to the original 3D point  1702  being infinitely far away), then the point  1702  will generally project to the same y-coordinate in both perspective images and so there will be no vertical parallax. However as θ becomes further from 
     
       
         
           
             π 
             2 
           
         
       
     
     (as the point moves closer to the camera), the projected y-coordinates will differ for the left and right eyes (except for the case where α=0 which corresponds to the perspective view looking towards the point  1702 . 
     In some implementations, distortion can be avoided by capturing images and scenes in a particular manner. For example, capturing scenes within a near field to the camera (i.e., less than one meter away) can cause distortion elements to appear. Therefore, capturing scenes or images from one meter outward is a way to minimize distortions. 
     In some implementations, distortion can be corrected using depth information. For example, given accurate depth information for a scene, it may be possible to correct for the distortion. That is, since the distortion can depend on the current viewing direction, it may not be possible to apply a single distortion to the panoramic images before rendering. Instead, depth information can be passed along with the panoramas and used at render time. 
       FIG. 19  illustrates rays captured in an omnidirectional stereo image using the panoramic imaging techniques described in this disclosure. In this example, rays  1902 ,  1904 ,  1906  pointing in a clockwise direction around circular shape  1900  correspond to rays for the left eye. Similarly, rays  1908 ,  1910 ,  1912  pointing in a counter-clockwise direction around circular shape  1900  correspond to rays for the right eye. Each counter-clockwise ray can have a corresponding clockwise ray on the opposite side of the circular shape looking in the same direction. This can provide a left/right viewing ray for each of the directions of rays represented in a single image. 
     Capturing a set of rays for the panoramas described in this disclosure can include moving a camera (not shown) around on the circular shape  1900  aligning the camera tangential to the circular shape  1900  (e.g., pointing the camera lens facing outward at the scene and tangential to the circular shape  1900 ). For the left eye, the camera can be pointed to the right (e.g., ray  1904  is captured to the right of center line  1914   a ). Similarly, for the right eye, the camera can be pointed to the left (e.g., ray  1910  is captured to the left of center line  1914   a ). Similar left and right areas can be defined using centerline  1914   b  for cameras on the other side of the circular shape  1900  and below centerline  1914   b . Producing omnidirectional stereo images works for real camera capture or for previously rendered computer graphic (CG) content. View interpolation can be used with both captured camera content and rendered CG content to simulate capturing the points in between the real cameras on the circular shape  1900 , for example. 
     Stitching a set of images can include using a spherical/equirectangular projection for storing the panoramic image. In general, two images exist in this method, one for each eye. Each pixel in the equirectangular image corresponds to a direction on the sphere. For example, the x-coordinate can correspond to longitude and the y-coordinate can correspond to latitude. For a mono-omnidirectional image, the origins of the viewing rays for the pixels can be the same point. However, for the stereo image, each viewing ray can also originate from a different point on the circular shape  1900 . The panoramic image can then be stitched form the captured images, by analyzing each pixel in the captured image, generating an ideal viewing ray form a projection model, and sampling the pixels form the captured or interpolated images whose viewing rays most closely match the ideal ray. Next, the ray values can be blended together to generate a panoramic pixel value. 
     In some implementations, optical flow-based view interpolation can be used to produce at least one image per degree on the circular shape  1900 . In some implementations, entire columns of the panoramic image can be filled at a time because it can be determined that if one pixel in the column would be sampled from a given image, then the pixels in that column will be sampled from that same image. 
     The panoramic format used with capture and rendering aspects of this disclosure can ensure that the image coordinates of an object viewed by left and right eyes only differ by a horizontal shift. This horizontal shift is known as parallax. This holds for equirectangular projection, and in this projection, objects can appear quite distorted. 
     The magnitude of this distortion can depend on a distance to the camera and a viewing direction. The distortion can include line-bending distortion, differing left and right eye distortion, and in some implementations, the parallax may no longer appear horizontal. In general, 1-2 degrees (on a spherical image plane) of vertical parallax can be comfortably tolerated by human users. In addition, distortion can be ignored for objects in the peripheral eye line. This correlates to about 30 degrees away from a central viewing direction. Based on these findings, limits can be constructed that define zones near the camera where objects should not penetrate to avoid uncomfortable distortion. 
       FIG. 20  is a graph  2000  that illustrates a maximum vertical parallax caused by points in 3D space. In particular, the graph  2000  depicts the maximum vertical parallax in degrees caused by points in 3D space given that they project to 30 degrees from the center of an image. The graph  2000  plots a vertical position from a camera center (in meters) against a horizontal position from the camera (in meters). In this figure, the camera is location at the origin [0, 0]. As the graph moves away from the origin, the severity of the distortion becomes less. For example, from about zero to one 2002 and from zero to minus one 2004 (vertically) on the graph, the distortion is the worst. This corresponds to images directly above and below the camera (placed at the origin). As the scene moves outward, the distortion is lessened and by the time the camera images the scene at points  2006  and  2008 , only one-half a degree of vertical parallax is encountered. 
     If the distortion in the periphery can be ignored beyond 30 degrees, then all pixels whose viewing direction is within 30 degrees of the poles can be removed. If the peripheral threshold is allowed to be 15 degrees, then 15 degrees of pixels can be removed. The removed pixels can, for example, be set to a color block (e.g., black, white, magenta, etc.) or a static image (e.g., a logo, a known boundary, a texturized layer, etc.) and the new representation of the removed pixels can be inserted into the panorama in place of the removed pixels. In some implementations, the removed pixels can be blurred and the blurred representation of the removed pixels can be inserted into the panorama in place of the removed pixels. 
       FIG. 21  is a flow chart diagramming one embodiment of a process  2100  to produce a stereo panoramic image. As shown in  FIG. 21 , at block  2102 , the system  100  can define a set of images based on captured images. The images can include pre-processed images, post-processed images, virtual content, video, image frames, portions of image frames, pixels, etc. 
     The defined images can be accessed by a user, accessing content (e.g., VR content) with the use of a head mounted display (HMD), for example. The system  100  can determine particular actions performed by the user. For example, at some point, the system  100  can receive, as at block  2104 , a viewing direction associated with a user of the VR HMD. Similarly, if the user changes her viewing direction, the system can receive, as at block  2106 , an indication of a change in the user&#39;s viewing direction. 
     In response to receiving the indication of such a change in viewing direction, the system  100  can configure a re-projection of a portion of the set of images, shown at block  2108 . The re-projection may be based at least in part on the changed viewing direction and a field of view associated with the captured images. The field of view may be from one to 180 degrees and can account for slivers of images of a scene to full panoramic images of the scene. The configured re-projection can be used to convert a portion of the set of images from a spherical perspective projection into a planar projection. In some implementations, the re-projection can include recasting a portion of viewing rays associated with the set of images from a plurality of viewpoints arranged around a curved path from a spherical perspective projection to a planar perspective projection. 
     The re-projection can include any or all steps to map a portion of a surface of a spherical scene to a planar scene. The steps may include retouching distorted scene content, blending (e.g., stitching) scene content at or near seams, tone mapping, and/or scaling. 
     Upon completing the re-projection, the system  100  can render an updated view based on the re-projection, as shown at block  2110 . The updated view can be configured to correct distortion and provide stereo parallax to a user. At block  2112 , the system  100  can provide the updated view including a stereo panoramic scene corresponding to the changed viewing direction. For example, the system  100  can provide the updated view to correct distortion in the original view (before re-projection) and can provide a stereo parallax effect in a display of a VR head mounted display. 
       FIG. 22  is a flow chart diagramming one embodiment of a process  2200  to capture an omnistereo panoramic image using a multi-tier camera rig. At block  2202 , the system  100  can define a set of images for a first tier of the multi-camera rig based on captured video streams collected from at least one set of neighboring cameras in the first tier. The first tier may be a lower tier of the multi-tier camera rig in some embodiments, and the cameras in first tier may be arranged in a circular shape such the each of the first plurality of cameras have an outward projection normal to the circular shape. For example, the system  100  can use neighboring cameras (for example, as shown in  FIG. 2 ) or multiple sets of neighboring cameras (for example, as shown in  FIGS. 3 and 5 ). In some implementations, the system  100  can define the set of images using captured video streams collected from about 12 to about 16 cameras arranged in a circular shape so that they have an outward projection normal to the circular shape. In some implementations, the system  100  can define the set of images using partial or all rendered computer graphics (CG) content. 
     At block  2204 , the system  100  can calculate a first optical flow for the first set of images. For example, calculating optical flow in the first set of images can include analyzing image intensity fields for a portion of columns of pixels associated with the set of images and performing optical flow techniques on the portion of columns of pixels, as described in detail above. 
     In some implementations, the first optical flow can be used to interpolate image frames that are not part of the set of images, and as described in detail above. The system  100  can then stitch together the image frames and the first set of images based at least in part on the first optical flow (at step  2206 ). 
     At block  2208 , the system  100  can define a set of images for a second tier of the multi-camera rig based on captured video streams collected from at least one set of neighboring cameras in the second tier. The second tier may be an upper tier of the multi-tier camera rig in some embodiments, and the cameras in second tier may be arranged such that each of the plurality of cameras have an outward projection non-parallel to the normal of the circular shape of the first plurality of cameras. For example, the system  100  can use neighboring cameras of an upper multi-faced cap (for example, as shown in  FIGS. 4A and 6 ) or multiple sets of neighboring cameras for a second tier of a multi-tier camera rig. In some implementations, the system  100  can define the set of images using captured video streams collected from about 4 to about 8 cameras. In some implementations, the system  100  can define the set of images using partial or all rendered computer graphics (CG) content. 
     At block  2210 , the system  100  can calculate a second optical flow for the second set of images. For example, calculating optical flow in the second set of images can include analyzing image intensity fields for a portion of columns of pixels associated with the set of images and performing optical flow techniques on the portion of columns of pixels, as described in detail above. 
     In some implementations, the first optical flow can be used to interpolate image frames that are not part of the set of images, and as described in detail above. The system  100  can then stitch together the image frames and the second set of images based at least in part on the second optical flow (at step  2212 ). 
     At block  2214 , the system  100  can generate an omnistereo by stitching together the first stitched image associated with the first tier of the multi-tier camera with the second stitched image associated with the second tier of the multi-tier camera. In some implementations, the omnistereo panorama is for display in a VR head mounted display. In some implementations, the system  100  can perform the image stitching using pose information associated with the at least one set of stereo neighbors to, for example, pre-stitch a portion of the set of images before performing the interleaving. 
       FIG. 23  is a flow chart diagramming one embodiment of a process  2300  to render panoramic images in a head mounted display. As shown in  FIG. 23 , at block  2302 , the system  100  can receive a set of images. The images may depict captured content from a multi-tier camera rig. At block  2304 , the system  100  can select portions of image frames in the images. The image frames may include content captured with the multi-tier camera rig. The system  100  can use any portion of the captured content. For example, the system  100  may select a portion of image frames that include content captured by the rig from a distance of about one radial meter from an outward edge of a base of the camera rig to about five radial meters from the outward edge of the base of the camera rig. In some implementations, this selection can be based on how far a user may perceive 3D content. Here, the distance of one meter from the camera to about five meters from the camera may represent a “zone” in which a user can view 3D content. Shorter than that, the 3D view may be distorted and longer than that, the user may not be able to ascertain 3D shapes. That is, the scene may simply look 2D from afar. 
     At block  2306 , the selected portions of image frames can be stitched together to generate a stereoscopic panoramic view. In this example, the stitching may be based at least in part on matching the selected portions to at least one other image frame in the selected portions. At block  2308 , the panoramic view can be provided in a display, such as an HMD device. In some implementations, the stitching can be performed using a stitching ratio selected based at least in part on the diameter of the camera rig. In some implementations, the stitching includes a number of steps of matching a first column of pixels in a first image frame to a second column of pixels in a second image frame, and matching the second column of pixels to a third column of pixels in a third image frame to form a cohesive scene portion. In some implementations, many columns of pixels can be matched and combined in this fashion to form a frame and those frames can be combined to form an image. Further, those images can be combined to form a scene. According to some implementations, the system  100  may perform blocks  2306  and  2308  for each tier of the multi-camera rig to create a stitched image associated with each tier of the camera rig, and the system  100  may stitch together the stitched images to generate a panoramic view. 
     In some implementations, the method  2300  can include an interpolation step that uses system  100  to interpolate additional image frames that are not part of the portions of image frames. Such an interpolation can be performed to ensure flow occurs between images captured by cameras that are far apart, for example. Once the interpolation of additional image content is performed, the system  100  can interleave the additional image frames into the portions of image frames to generate virtual content for the view. This virtual content can be stitched together as portions of image frames interleaved with the additional image frames. The result can be provided as an updated view to the HMD, for example. This updated view may be based at least in part on the portions of image frames and the additional image frames. 
       FIG. 24  is a flow chart diagramming one embodiment of a process  2400  to determine image boundaries for one tier of a multi-tier camera rig. At block  2402 , the system  100  can define a set of images based on captured video streams collected from at least one set of neighboring cameras in one tier of a multi-tier camera rig. For example, the system  100  can use a set of neighboring cameras (as shown in  FIG. 2 ) or multiple sets of neighboring cameras (as shown in  FIG. 3  and  FIG. 4A ). In some implementations, the system  100  can define the set of images using captured video streams collected from about 12 to about 16 cameras. In some implementations, the system  100  can define the set of images using partial or all rendered computer graphics (CG) content. In some implementations, the video streams corresponding to the set of images include encoded video content. In some implementations, the video streams corresponding to the set of images may include content acquired with at least one set of neighboring cameras configured with a one-hundred eighty degree field of view. 
     At block  2404 , the system  100  can project a portion of the set of images associated with one tier of the multi-tier camera rig from a perspective image plane onto a spherical image plane by recasting viewing rays associated with the portion of the set of images from multiple viewpoints arranged in a portion of a circular-shaped path to one viewpoint. For example, the set of images can be captured by a tier of a multi-camera rig where the image sensors are arranged in a circular shape on a circular camera housing camera rig, which can host a number of cameras (for example, as shown in  FIG. 4A ). Each camera can be associated with a view point and those view points are directed outward from the camera rig at a scene. In particular, instead of originating from a single point, viewing rays originate from each camera on the rig. The system  100  can recast rays from the various viewpoints on the path into a single viewpoint. For example, the system  100  can analyze each viewpoint of a scene captured by the cameras and can calculate similarities and differences in order to determine a scene (or set of scenes) that represents the scene from a single interpolated viewpoint. 
     At block  2406 , the system  100  can determine a periphery boundary corresponding to the single viewpoint and generate updated images by removing pixels outside of the periphery boundary. The periphery boundary may delineate clear concise image content from distorted image content. For example, the periphery boundary may delineate pixels without distortion from pixels with distortion. In some implementations, the periphery boundary may pertain to views outside of a user&#39;s typical peripheral view area. Removing such pixels can ensure that the user is not unnecessarily presented with distorted image content. Removing the pixels can include replacing the pixels with a color block, a static image, or a blurred representation of the pixels, as discussed in detail above. In some implementations, the periphery boundary is defined to a field of view of about 150 degrees for one or more cameras associated with the captured images. In some implementations, the periphery boundary is defined to a field of view of about 120 degrees for one or more cameras associated with the captured images. In some implementations, the periphery boundary is a portion of a spherical shape corresponding to about 30 degrees above a viewing plane for a camera associated with the captured images, and removing the pixels includes blacking out or removing a top portion of a spherical scene. In some implementations, the periphery boundary is a portion of a spherical shape corresponding to about 30 degrees below a viewing plane for a camera associated with the captured images, and removing the pixels includes blacking out or removing a top portion of a spherical scene. At block  2408 , the system  100  can provide the updated images for display within the bounds of the periphery boundary. 
     In some implementations, the method  2400  can also include stitching together at least two frames in the set of images from the one tier of the multi-tier camera rig. The stitching can include a step of sampling columns of pixels from the frames and interpolating, between at least two sampled columns of pixels, additional columns of pixels that are not captured in the frames. In addition, the stitching can include a step of blending the sampled columns and the additional columns together to generate a pixel value. In some implementations, blending can be performed using a stitching ratio selected based at least in part on a diameter of a circular camera rig used to acquire the captured images. The stitching can also include a step of generating a three-dimensional stereoscopic panorama by configuring the pixel value into a left scene and a right scene, which can be provided for display in an HMD, for example. 
       FIG. 25  is a flow chart diagramming one embodiment of a process  2500  to generate video content. At block  2502 , the system  100  can define a set of images based on captured video streams collected from at least one set of neighboring cameras. For example, the system  100  can use a stereo pair (as shown in  FIG. 2 ) or multiple sets of neighboring cameras (as shown in, for example,  FIG. 3  and  FIG. 4A ). In some implementations, the system  100  can define the set of images using captured video streams collected from about 12 to about 16 cameras in one tier of a multi-tier camera rig, and 4 to 8 cameras in a second tier for the multi-tier camera rig. In some implementations, the system  100  can define the set of images using partial or all rendered computer graphics (CG) content. 
     At block  2504 , the system  100  can stitch the set of images into an equirectangular video stream. For example, the stitching can include combining images associated with a leftward camera capture angle with images associated with a rightward facing camera capture angle. 
     At block  2506 , the system can render the video stream for playback by projecting the video stream from equirectangular to perspective for a first view and a second view. The first view may correspond to a left eye view of a head-mounted display and the second view may correspond to a right eye view of the head-mounted display. 
     At block  2508 , the system can determine a boundary in which distortion is above a predefined threshold. The predefined threshold may provide a level of parallax, level of mismatch, and/or a level of error allowable within a particular set of images. The distortion may be based at least in part on projection configuration when projecting the video stream from one plane or view to another plane or view, for example. 
     At block  2510 , the system can generate an updated video stream by removing image content in the set of images at and beyond the boundary, as discussed in detail above. Upon updating the video stream, the updated stream can be provided for display to a user of an HMD, for example. In general, systems and methods described throughout this disclosure can function to capture images, remove distortion from the captured images, and render images in order to provide a 3D stereoscopic view to a user of an HMD device. 
       FIG. 26  shows an example of a generic computer device  2600  and a generic mobile computer device  2650 , which may be used with the techniques described here. Computing device  2600  is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. Computing device  2650  is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smart phones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document. 
     Computing device  2600  includes a processor  2602 , memory  2604 , a storage device  2606 , a high-speed interface  2608  connecting to memory  2604  and high-speed expansion ports  2610 , and a low speed interface  2612  connecting to low speed bus  2614  and storage device  2606 . Each of the components  2602 ,  2604 ,  2606 ,  2608 ,  2610 , and  2612 , are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate. The processor  2602  can process instructions for execution within the computing device  2600 , including instructions stored in the memory  2604  or on the storage device  2606  to display graphical information for a GUI on an external input/output device, such as display  2616  coupled to high speed interface  2608 . In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices  2600  may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system). 
     The memory  2604  stores information within the computing device  2600 . In one implementation, the memory  2604  is a volatile memory unit or units. In another implementation, the memory  2604  is a non-volatile memory unit or units. The memory  2604  may also be another form of computer-readable medium, such as a magnetic or optical disk. 
     The storage device  2606  is capable of providing mass storage for the computing device  2600 . In one implementation, the storage device  2606  may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory  2604 , the storage device  2606 , or memory on processor  2602 . 
     The high speed controller  2608  manages bandwidth-intensive operations for the computing device  2600 , while the low speed controller  2612  manages lower bandwidth-intensive operations. Such allocation of functions is exemplary only. In one implementation, the high-speed controller  2608  is coupled to memory  2604 , display  2616  (e.g., through a graphics processor or accelerator), and to high-speed expansion ports  2610 , which may accept various expansion cards (not shown). In the implementation, low-speed controller  2612  is coupled to storage device  2606  and low-speed expansion port  2614 . The low-speed expansion port, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter. 
     The computing device  2600  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server  2620 , or multiple times in a group of such servers. It may also be implemented as part of a rack server system  2624 . In addition, it may be implemented in a personal computer such as a laptop computer  2622 . Alternatively, components from computing device  2600  may be combined with other components in a mobile device (not shown), such as device  2650 . Each of such devices may contain one or more of computing device  2600 ,  2650 , and an entire system may be made up of multiple computing devices  2600 ,  2650  communicating with each other. 
     Computing device  2650  includes a processor  2652 , memory  2664 , an input/output device such as a display  2654 , a communication interface  2666 , and a transceiver  2668 , among other components. The device  2650  may also be provided with a storage device, such as a microdrive or other device, to provide additional storage. Each of the components  2650 ,  2652 ,  2664 ,  2654 ,  2666 , and  2668 , are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate. 
     The processor  2652  can execute instructions within the computing device  2650 , including instructions stored in the memory  2664 . The processor may be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor may provide, for example, for coordination of the other components of the device  2650 , such as control of user interfaces, applications run by device  2650 , and wireless communication by device  2650 . 
     Processor  2652  may communicate with a user through control interface  2658  and display interface  2656  coupled to a display  2654 . The display  2654  may be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. The display interface  2656  may comprise appropriate circuitry for driving the display  2654  to present graphical and other information to a user. The control interface  2658  may receive commands from a user and convert them for submission to the processor  2652 . In addition, an external interface  2662  may be provide in communication with processor  2652 , to enable near area communication of device  2650  with other devices. External interface  2662  may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used. 
     The memory  2664  stores information within the computing device  2650 . The memory  2664  can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory  2674  may also be provided and connected to device  2650  through expansion interface  2672 , which may include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory  2674  may provide extra storage space for device  2650 , or may also store applications or other information for device  2650 . Specifically, expansion memory  2674  may include instructions to carry out or supplement the processes described above, and may include secure information also. Thus, for example, expansion memory  2674  may be provide as a security module for device  2650 , and may be programmed with instructions that permit secure use of device  2650 . In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-hackable manner. 
     The memory may include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory  2664 , expansion memory  2674 , or memory on processor  2652 , that may be received, for example, over transceiver  2668  or external interface  2662 . 
     Device  2650  may communicate wirelessly through communication interface  2666 , which may include digital signal processing circuitry where necessary. Communication interface  2666  may provide for communications under various modes or protocols, such as GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication may occur, for example, through radio-frequency transceiver  2668 . In addition, short-range communication may occur, such as using a Bluetooth, Wi-Fi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module  2670  may provide additional navigation- and location-related wireless data to device  2650 , which may be used as appropriate by applications running on device  2650 . 
     Device  2650  may also communicate audibly using audio codec  2660 , which may receive spoken information from a user and convert it to usable digital information. Audio codec  2660  may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device  2650 . Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device  2650 . 
     The computing device  2650  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone  2680 . It may also be implemented as part of a smart phone  2682 , personal digital assistant, or other similar mobile device. 
     Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device. 
     These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms “machine-readable medium” “computer-readable medium” refers to any computer program product, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term “machine-readable signal” refers to any signal used to provide machine instructions and/or data to a programmable processor. 
     To provide for interaction with a user, the systems and techniques described here can be implemented on a computer having a display device (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in any form, including acoustic, speech, or tactile input. 
     The systems and techniques described here can be implemented in a computing system that includes a back end component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a front end component (e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of such back end, middleware, or front end components. The components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (“LAN”), a wide area network (“WAN”), and the Internet. 
     The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. 
     A number of embodiments have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the specification. For example, each claim below and the examples of such claims described above can be combined in any combination to produce additional example embodiments. 
     Further implementations are described in the following examples: 
     Example 1 
     A camera rig, comprising: a first tier of images sensors including a first plurality of image sensors, the first plurality of image sensors arranged in a circular shape and oriented such that a field of view of each of the first plurality of image sensors has an axis perpendicular to a tangent of the circular shape; and a second tier of image sensors including a second plurality of image sensors, the second plurality of image sensors oriented such that a field of view of each of the second plurality of image sensors has an axis non-parallel to the field of view of each of the first plurality of image sensors. 
     Example 2 
     The camera rig of example 1, wherein the field of field of view of each of the first plurality of image sensors is disposed within a first plane, the field of view of each of the second plurality of image sensors is disposed within a second plane. 
     Example 3 
     The camera rig of example 1 or 2, wherein the first plurality of image sensors are disposed within a first plane, and the second plurality of image sensors are disposed within a second plane parallel to the first plane. 
     Example 4 
     The camera rig of one of examples 1 to 3, wherein the first plurality of image sensors are included in the first tier such that a first field of view of a first of the first plurality image sensors intersects a second field of view of a second of the first plurality of image sensors and a third field of view of a third of the first plurality of image sensors. 
     Example 5 
     The camera rig of one of examples 1 to 4, wherein the camera rig has a housing that defines a radius of a circular camera rig housing such that the field of view of each of at least three adjacent image sensors from the first plurality of image sensors overlaps. 
     Example 6 
     The camera rig of example 5, wherein the three adjacent image sensors intersect a plane. 
     Example 7 
     The camera rig of one of examples 1 to 6, further comprising: a stem housing, the first tier of images sensors being disposed between the second tier of image sensors and the stem housing. 
     Example 8 
     The camera rig of one of examples 1 to 7, wherein the second tier of images sensors includes six image sensors and the first tier of image sensors includes sixteen image sensors. 
     Example 9 
     The camera rig of example 1 to 8, wherein the field of view of each of the first plurality of image sensors is orthogonal to the field of view of each of the second plurality of image sensors. 
     Example 10 
     The camera rig of one of examples 1 to 9, wherein an aspect ratio of the field of view of each of the first plurality of image sensors is in a portrait mode, an aspect ratio of the field of view of each of the second plurality of image sensors is in a landscape mode. 
     Example 11 
     A camera rig, comprising: a first tier of images sensors including a first plurality of image sensors disposed within a first plane, the first plurality of image sensors being configured so that a field of view of at least each of three adjacent image sensors from the first plurality of image sensors overlaps; and a second tier of image sensors including a second plurality of image sensors disposed within a second plane, the second plurality of image sensors each having an aspect ratio orientation different from an aspect ratio orientation of each of the first plurality of image sensors. 
     Example 12 
     The camera rig of example 11, wherein the first plane is parallel the second plane. 
     Example 13 
     The camera rig of one of examples 11 or 12, further comprising: a stem housing, the first tier of images sensors being disposed between the second tier of image sensors and the stem housing. 
     Example 14 
     The camera rig of one of examples 1 to 10 or 11 to 13, wherein a ratio of image sensors of the first tier of images sensors to image sensors of the second tier of image sensors is between 2:1 and 3:1. 
     Example 15 
     The camera rig of one of examples 1 to 10 or 11 to 14, wherein images captured using the first tier of image sensors and the second tier of image sensors are stitched using optical flow interpolation. 
     Example 16 
     A camera rig, comprising: a camera housing including: a lower circular perimeter, and an upper multi-faced cap, the lower circular perimeter disposed below the multi-faced cap; a first plurality of image sensors arranged in a circular shape and disposed along the lower circular perimeter of the camera housing such that each of the first plurality of image sensors have an outward projection normal to the lower circular perimeter; and a second plurality of image sensors each being disposed on a face of the upper multi-faced cap such that each of the second plurality of image sensors has an outward projection non-parallel to a normal of the lower circular perimeter. 
     Example 17 
     The camera rig of example 16, wherein the lower circular perimeter has a radius such that a field of view of at least three adjacent image sensors from the first plurality of image sensors intersects. 
     Example 18 
     The camera rig of example 16 or 17, wherein a ratio of image sensors of the first plurality of image sensors to image sensors of the second plurality of image sensors is between 2:1 and 3:1. 
     In addition, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. In addition, other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Accordingly, other embodiments are within the scope of the following claims.