Reconstructing freeform gradients from an input image

Embodiments are disclosed for reconstructing freeform gradients from an input image. In particular, in one or more embodiments, the disclosed systems and methods comprise receiving an input image, computing an outline of the input image, identifying a set of candidate color handles for the input image, each candidate color handle of the set of candidate color handles representing an extremum point for a color in the input image, generating a reconstructed image using a subset of the set of candidate color handles, determining a reconstruction error by computing a difference between the input image and the reconstructed image, and providing the reconstructed image when the reconstruction error is below a threshold value.

BACKGROUND

Computing devices (e.g., computers, tablets, smart phones) provide numerous ways for users to capture, create, share, view, and otherwise edit numerous types of digital content, including images. One example is the ability to create freeform color gradients on images or objects by establishing color handles at particular points on an object, applying a color to each of the color handles, and interpolating between the color handles to create a gradient. However, for inexperienced users or artists, it can be difficult and/or time consuming to achieve a desired design goal.

One existing solution can extract linear gradients for images. However, as this solution can only capture linear gradients, any other types of gradients (e.g., freeform gradients, radial gradients) cannot be extracted and reproduced, resulting in inaccurate representations of color gradients.

These and other problems exist with regards to creating color gradients on image objects.

SUMMARY

Introduced here are techniques/technologies that allow a digital design system to reconstruct freeform gradients from an input image. The reconstructed freeform gradient can then be modified and/or applied to another object. To reconstruct freeform gradients from an input image, the digital design system determines an outline of the input image. The digital design system then computes a number of color extrema points as candidate color handles and uses those candidate color handles to generate a reconstructed image with a reconstructed freeform gradient. In one or more embodiments, the digital design system can refine the reconstructed freeform gradient through an iterative process. If the current reconstruction error is more than a defined threshold value, the digital design system modifies the subset of the set of candidate color handles to includes an additional color handle from the set of candidate color handles and then generates the reconstructed image again but using the modified subset of the set of candidate color handles. The digital design system then determines an updated reconstruction error. The digital design system continues the iterative process by adding more points to refine the reconstruction and reduce the error; otherwise, the process stops, and the current reconstructed image is provided as the output.

Additional features and advantages of exemplary embodiments of the present disclosure will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by the practice of such exemplary embodiments.

DETAILED DESCRIPTION

One or more embodiments of the present disclosure include a digital design system for reconstructing freeform gradients from an input image that can be modified and/or extracted and applied to another image or object. While there are existing systems that can extract gradients, they have their disadvantages and limitations. For example, in one existing solution, linear gradients can be extracted from an input image. In this solution, salient colors from images are extracted and arranged in the form of linear gradients. However, as this existing solution only extracts linear gradients, if the input image exhibits gradients in any other form (e.g., radial gradients, freeform gradients), the output for the input image will not be representative of the actual spatial arrangement of the colors in the input image. When the linear gradient extracted from the input image having radial or freeform gradients is subsequently applied to an image, the resulting appearance will not match the original input image.

In another existing solution, a design application can vectorize an input image by creating paths with solid fills or strokes. One drawback of this solution is that the design application can create a significant amount of geometry in attempting to represent the different colors and shades present in the input image. The large number of paths produced by the vectorization of the input image can result in challenges to a user seeking to add or modify any colors for the final output image. In addition, while this existing solution can operate where the input image is simple (e.g., the sky), it can breakdown if the input image has a large amount of details (e.g., hair or a tree).

To address these issues, after receiving an input image, the digital design system computes an outline of the input image. The digital design system then identifies a set of candidate color handles for the input image, where each candidate color handle of the set of candidate color handles represents an extremum point for a color in the input image. The digital design system then generates a reconstructed image with a reconstructed gradient using a subset of the set of candidate color handles and determines a reconstruction error by computing a difference between the input image and the reconstructed image. The digital design system then provides the reconstructed image with the reconstructed gradient when the reconstruction error is below a threshold value.

FIG.1illustrates a diagram of a process of reconstructing freeform gradients from an input image in accordance with one or more embodiments. As shown inFIG.1, in one or more embodiments, a digital design system102receives an input100, as shown at numeral1. In one or more embodiments, the input100includes at least an input image, where the input image includes a color gradient. The input100can include information specifying an image (e.g., a file name, a file location, etc.) to allow the digital design system102to access or retrieve the image from a memory or storage location. In one or more embodiments, the digital design system102includes an input analyzer106that receives the input100.

In one or more embodiments, the input analyzer106analyzes the input100, as shown at numeral2. In one or more embodiments, the input analyzer106analyzes the input100to identify an input image and, optionally, a mask specifying a region of the image for which the freeform gradient is to be reconstructed. In one or more embodiments, when the input100does not include a mask specifying a region of the image, the digital design102can, by default, determine that the request is for the entire image.

In one or more embodiments, after the input analyzer106analyzes the input image, the input image is sent to the digital editor104, as shown at numeral3. In one or more other embodiments, the input analyzer106optionally stores the input100in a memory or storage location (e.g., input data107) for later access by the digital editor104.

At numeral4, a color analyzing module108identifies a set of candidate color handles for the input image, where each candidate color handle represents an extremum point for a color in the input image. In one or more embodiments, as part of identifying the set of candidate color handles, the color analyzing module108generates an outline of the input image. In one or more embodiments, the color analyzing module108first uses a non-linear noise reducing smoothing filter, such as a bilateral blur filter, to suppress noise and other high frequency details. To compute the outline of the input image, the color analyzing module108converts the input image to a grayscale image using an alpha (a) channel. The color analyzing module108then computes an initial outline of the input image from the grayscale image. Each outline can be represented as a pixel chain and the digital design system can use an algorithm (e.g., Ramer-Douglas-Peucker algorithm) to covert the pixel chain to reduce it to a set of connected polylines. In one or more embodiments, the set of connected polylines, and its associated vertices) are used to fit smooth curves using a curve fitting technique.FIG.2illustrates an example input image200and a corresponding outlined image205generated by a digital design system in accordance with one or more embodiments. Examples of pixels in the pixel chain are shown as pixel210A and pixel210B, with additional pixels in the pixel chain arranged along the perimeter of the outlined image205. An example polyline between pixel210A and pixel210B is shown as polyline212. Additional polylines are formed between neighboring pixels in the pixel chain forming the boundary outlining the outlined image205. As illustrated inFIG.2, the polylines may include straight line segments and/or curved line segments between the pixels of the pixel chain. In one or more embodiments, the polylines can include vector paths, such as vector lines, Bézier curves, etc.

Returning toFIG.1, in one or more embodiments, to identify the set of candidate color handles, the color analyzing module108uses a function that generates a modified image from the input image by applying a maximum filter to the input image, where the maximum filter dilates the input image. The function then merges adjacent or neighboring local extrema points that are closer than the size of the dilation. The coordinates of locations where the input image is equal to the modified image are returned as the extrema points (e.g., the set of candidate color handles for the input image).

In one or more embodiments, an image generating module110generates a reconstructed image using the set of candidate color handles generated by the color analyzing module108, as shown at numeral5. In one or more embodiments, the image generating module110uses a subset of the set of candidate color handles. Using the subset of the set of candidate color handles and the outline created by the color analyzing module108, the image generating module110computes a rasterization of freeform gradients as an initial reconstructed image. In one or more embodiments, the image generating module110determines a color for each pixel of a plurality of pixels in the reconstructed image by interpolating between colors at the subset of the set of candidate color handles and the outline of the input image.

FIG.3illustrates an example reconstructed image305using an initial set of candidate color handles generated by a digital design system in accordance with one or more embodiments. As illustrated inFIG.3, the reconstructed image305includes a reconstructed freeform gradient generated using an initial subset of the set of candidate color handles, indicated as color handles310A-E.

Returning toFIG.1, in one or more embodiments, an image comparing module112determines a reconstruction error by computing a difference between the input image and the reconstructed image, as shown at numeral6. In one or more embodiments, the image comparing module112applies a large-kernel blur (iteratively reducing size with each iteration) to the input image and the reconstructed image. The image comparing module112then computes the difference between the input image and the reconstructed image to determine the regions with a high magnitude of reconstruction error.

FIG.4illustrates an example updated reconstructed image405using an updated set of candidate color handles generated by a digital design system in accordance with one or more embodiments. As illustrated inFIG.4, the updated reconstructed image405includes an updated reconstructed freeform gradient generated using the initial subset of the set of candidate color handles, indicated as color handles310A-E, and additional color handles of the set of candidate color handles (e.g., color handles410A-D).

Returning toFIG.1, when the reconstruction error is below the threshold value, the process proceeds to numeral7. When the reconstruction error is above a threshold value, the image generating module110iteratively adds an additional color handle to the subset and generates a new reconstructed image until the reconstruction error is below the threshold value.

At numeral7, the digital design system102returns an output120including the reconstructed image with the reconstructed freeform gradient. In one or more embodiments, after the process described above in numerals1-6, the output120is sent to the user or computing device that provided the input100to the digital design system102. For example, after the process described above in numerals1-7, the reconstructed image with the reconstructed freeform gradient can be displayed in the user interface.FIG.5illustrates an example output reconstructed image generated by a digital design system in accordance with one or more embodiments. As illustrated inFIG.5, the output reconstructed image505has a reconstructed freeform gradient similar to the freeform gradient of the input image200. In one or more embodiments, once the output reconstructed image505is provided, a user can manipulate the freeform gradient (e.g., by removing, adding, and/or moving color handles) and/or select a portion or all of the freeform gradient and apply the selection to another image or shape. In one or more embodiments, the reconstructed freeform gradient, including the subset of the set of candidate color handles used to generate the reconstructed gradient, can be stored in a memory or storage location (e.g., gradient data114) for later access and application to an image object or shape.

FIG.6illustrates a schematic diagram of a digital design system (e.g., “digital design system” described above) in accordance with one or more embodiments. As shown, the digital design system600may include, but is not limited to, a display manager602, an input analyzer604, a digital editor606, and a storage manager608. As shown, the digital editor606includes a color analyzing module610, and an image generating module612. The image generating module612can also include an image comparing module614. The storage manager608includes input data616and the gradient data618.

As illustrated inFIG.6, the digital design system600includes a display manager602. In one or more embodiments, the display manager602identifies, provides, manages, and/or controls a user interface provided on a touch screen or other device. Examples of displays include interactive whiteboards, graphical user interfaces (or simply “user interfaces”) that allow a user to view and interact with content items, or other items capable of display on a touch screen. For example, the display manager602may identify, display, update, or otherwise provide various user interfaces that include one or more display elements in various layouts. In one or more embodiments, the display manager602can identify a display provided on a touch screen or other types of displays (e.g., including monitors, projectors, headsets, etc.) that may be interacted with using a variety of input devices. For example, a display may include a graphical user interface including one or more display elements capable of being interacted with via one or more touch gestures or other types of user inputs (e.g., using a stylus, a mouse, or other input devices). Display elements include, but are not limited to buttons, text boxes, menus, thumbnails, scroll bars, hyperlinks, etc.

As further illustrated inFIG.6, the digital design system600also includes an input analyzer604. The input analyzer604analyzes an input received by the digital design system600to identify an input image, and if provided in the input, a portion of the input image selected for freeform gradient reconstruction.

As further illustrated inFIG.6, the digital design system600also includes a digital editor606. In one or more embodiments, the digital editor606includes a color analyzing module610configured to generate an outline of the input image and determine a set of candidate color handles. For example, the color analyzing module610can be configured to identify a set of candidate color handles for the input image, where each candidate color handle of the set of candidate color handles represents an extremum point for a color in the input image.

As further illustrated inFIG.6, the digital editor606includes an image generating module612configured to utilize the set of candidate color handles and the outline generated by the color analyzing module610to generate a reconstructed image with a reconstructed freeform gradient based on the freeform gradient of the input image. In one or more embodiments, the image generating module612generates the reconstructed image with the reconstructed freeform gradient using a subset of the set of candidate color handles. After generating the reconstructed image, an image comparing module112determines a reconstruction error between the input image and the reconstructed image. When the reconstruction error is above a threshold value, the image generating module612adds at least one candidate color handle to the subset of the set of candidate color handles and generates an updated reconstructed image with an updated reconstructed freeform gradient. The image generating module612can iteratively generate updated reconstructed images by adding additional candidate color handles until the reconstruction error is at or below the threshold value.

As further illustrated inFIG.6, the storage manager608includes input data616and gradient data618. In particular, the input data616may include input data received by the digital design system600indicating an input image and, optionally, a portion of the input image selected for freeform gradient reconstruction. The gradient data618may include the results of the freeform gradient reconstruction process, including the reconstructed image with the reconstructed freeform gradient and the subset of the set of candidate color handles used to the generate the reconstructed image.

Each of the components602-608of the digital design system600and their corresponding elements (as shown inFIG.6) may be in communication with one another using any suitable communication technologies. It will be recognized that although components602-608and their corresponding elements are shown to be separate inFIG.6, any of components602-608and their corresponding elements may be combined into fewer components, such as into a single facility or module, divided into more components, or configured into different components as may serve a particular embodiment.

The components602-608and their corresponding elements can comprise software, hardware, or both. For example, the components602-608and their corresponding elements can comprise one or more instructions stored on a computer-readable storage medium and executable by processors of one or more computing devices. When executed by the one or more processors, the computer-executable instructions of the digital design system600can cause a client device and/or a server device to perform the methods described herein. Alternatively, the components602-608and their corresponding elements can comprise hardware, such as a special purpose processing device to perform a certain function or group of functions. Additionally, the components602-608and their corresponding elements can comprise a combination of computer-executable instructions and hardware.

Furthermore, the components602-608of the digital design system600may, for example, be implemented as one or more stand-alone applications, as one or more modules of an application, as one or more plug-ins, as one or more library functions or functions that may be called by other applications, and/or as a cloud-computing model. Thus, the components602-608of the digital design system600may be implemented as a stand-alone application, such as a desktop or mobile application. Furthermore, the components602-608of the digital design system600may be implemented as one or more web-based applications hosted on a remote server. Alternatively, or additionally, the components of the digital design system600may be implemented in a suit of mobile device applications or “apps.” To illustrate, the components of the digital design system600may be implemented in a document processing application or an image processing application, including but not limited to ADOBE® PHOTOSHOP®, ADOBE® ILLUSTRATOR, ADOBE® PREMIERE® PRO, etc., or a cloud-based suite of applications such as CREATIVE CLOUD®. “ADOBE®,” “PHOTOSHOP®,” “ADOBE PREMIERE®,” and “CREATIVE CLOUD®” are either a registered trademark or trademark of Adobe Inc. in the United States and/or other countries.

FIGS.1-6, the corresponding text, and the examples, provide a number of different systems and devices that allow a digital design system to reconstruct freeform gradients from an input image. In addition to the foregoing, embodiments can also be described in terms of flowcharts comprising acts and steps in a method for accomplishing a particular result. For example,FIG.7illustrates a flowchart of an exemplary method in accordance with one or more embodiments. The method described in relation toFIG.7may be performed with less or more steps/acts or the steps/acts may be performed in differing orders. Additionally, the steps/acts described herein may be repeated or performed in parallel with one another or in parallel with different instances of the same or similar steps/acts.

FIG.7illustrates a flowchart of a series of acts in a method of reconstructing freeform gradients from an input image in accordance with one or more embodiments. In one or more embodiments, the method700is performed in a digital medium environment that includes the digital design system600. The method700is intended to be illustrative of one or more methods in accordance with the present disclosure and is not intended to limit potential embodiments. Alternative embodiments can include additional, fewer, or different steps than those articulated inFIG.7.

As shown inFIG.7, the method700includes an act702of receiving an input image. In one or more embodiments, the digital design system receives the input image from a user (e.g., via a computing device) or from a memory or storage location. In one or more embodiments, the user may select a document in an application, or the user may submit the document to a web service or an application configured to receive inputs. In one or more embodiments, the input image also includes a mask specifying a region of the input image for which the gradient is to be recreated. In other embodiments, the digital design system can automatically segment the entire input image and then analyze and reconstruct the gradient of either the entire input image or relevant regions of the input image.

As shown inFIG.7, the method700also includes an act704of computing an outline of the input image. In one or more embodiments, the digital design system first uses a non-linear noise reducing smoothing filter, such as a bilateral blur filter, to suppress noise and other high frequency details. To compute the outline of the input image, the digital design system converts the input image to a grayscale image using an alpha (a) channel. The digital design system then computes an initial outline of the input image from the grayscale image. Each outline can be represented as a pixel chain and the digital design system can use an algorithm (e.g., Ramer-Douglas-Peucker algorithm) to covert the pixel chain to reduce it to a set of connected polylines. In one or more embodiments, the set of connected polylines, and its associated vertices) are used to fit smooth curves using a curve fitting technique.

As shown inFIG.7, the method700also includes an act706of identifying a set of candidate color handles for the input image. Each candidate color handle of the set of color handles represents an extremum point for a color in the input image. The number of set of the set of candidate color handles for the input image can be user-defined.

In one or more embodiments, the digital design system uses a function that saturates the input image and finds local extrema points using morphological operations, including dilation and merging. For example, one function generates a modified image from the input image by applying a maximum filter to the input image, where the maximum filter dilates the input image. The function then merges adjacent or neighboring local extrema points that are closer than the size of the dilation. The coordinates of locations where the input image is equal to the dilated image are returned as the extrema points (e.g., the set of color handles for the input image).

The digital design system can also find color iso-contours that are located around local extrema points using a ridge detection method, such as Ridge Operators, and accept only strong ridges. The digital design system then fits a Bezier spline to the approximated ridge with a small number of Bezier segments. For each such curve, the digital design system adds a corresponding extrema point at the center of the curve as a candidate color handle.

As shown inFIG.7, the method700also includes an act708of generating a reconstructed image using a subset of the set of candidate color handles. In one or more embodiments, the digital design system selects half of the set of candidate color handles as the subset. Using the subset of the set of candidate color handles and the outline created previously, the digital design system computes a rasterization of freeform gradients as an initial reconstructed image. In one or more embodiments, the digital design system determines a color for each pixel of a plurality of pixels in the reconstructed image by interpolating between colors at the subset of the set of candidate color handles and the outline of the input image.

As shown inFIG.7, the method700also includes an act710of determining a reconstruction error by computing a difference between the input image and the reconstructed image. In one or more embodiments, the digital design system applies a large-kernel blur (iteratively reducing size with each iteration) to the input image and the reconstructed image. The digital design system then computes the difference between the input image and the reconstructed image to determine the regions with a high magnitude of reconstruction error.

When the reconstruction error is above a threshold value, the digital design system modifies the subset of the set of candidate color handles to includes an additional color handle from the set of candidate color handles. In one or more embodiments, the digital design system adds the additional color handle at the highest-error region that is not too close to an existing color handle, where the color of the additional color handle is the color of a slightly blurred version of the target image. The digital design system then generates an updated reconstructed image using the modified subset of color handles and determines an updated reconstruction error. The digital design system iteratively adds additional color handles and determines updated reconstruction errors until the updated reconstruction error is at or below the threshold value.

As shown inFIG.7, the method700also includes an act712of providing the reconstructed image when the reconstruction error is at or below a threshold value. For example, the reconstructed image can be rendered on a display of a user computing device, stored in a memory or storage location, etc.

In one or more embodiments, the digital design system can subsequently receive inputs selecting the reconstructed gradient, or a portion of the reconstructed gradient, from the reconstructed image. The reconstructed gradient can then be extracted from the reconstructed image and applied to a new or different image. For example, the reconstructed freeform gradient can be saved as a graphic style and then applied to any arbitrary geometry. In one or more embodiments, the reconstructed gradient, including the subset of the set of candidate color handles used to generate the reconstructed gradient, is stored in a memory or storage location for later access and application to an image object or shape.

In one or more embodiments, the reconstructed freeform gradient can also be modified. For example, based on user inputs, the positions of one or more of the plurality of color handles used to reconstruct the freeform gradient can be modified (e.g., moved from a starting location to another location), one or more the plurality of color handles can be removed, additional color handles can be added, etc.

FIG.8illustrates a schematic diagram of an exemplary environment800in which the digital design system can operate in accordance with one or more embodiments. In one or more embodiments, the environment800includes a service provider802which may include one or more servers804connected to a plurality of client devices806A-806N via one or more networks808. The client devices806A-806N, the one or more networks808, the service provider802, and the one or more servers804may communicate with each other or other components using any communication platforms and technologies suitable for transporting data and/or communication signals, including any known communication technologies, devices, media, and protocols supportive of remote data communications, examples of which will be described in more detail below with respect toFIG.9.

AlthoughFIG.8illustrates a particular arrangement of the client devices806A-806N, the one or more networks808, the service provider802, and the one or more servers804, various additional arrangements are possible. For example, the client devices806A-806N may directly communicate with the one or more servers804, bypassing the network808. Or alternatively, the client devices806A-806N may directly communicate with each other. The service provider802may be a public cloud service provider which owns and operates their own infrastructure in one or more data centers and provides this infrastructure to customers and end users on demand to host applications on the one or more servers804. The servers may include one or more hardware servers (e.g., hosts), each with its own computing resources (e.g., processors, memory, disk space, networking bandwidth, etc.) which may be securely divided between multiple customers, each of which may host their own applications on the one or more servers804. In some embodiments, the service provider may be a private cloud provider which maintains cloud infrastructure for a single organization. The one or more servers804may similarly include one or more hardware servers, each with its own computing resources, which are divided among applications hosted by the one or more servers for use by members of the organization or their customers.

Similarly, although the environment800ofFIG.8is depicted as having various components, the environment800may have additional or alternative components. For example, the environment800can be implemented on a single computing device with the digital design system. In particular, the digital design system may be implemented in whole or in part on the client device806A. Alternatively, in some embodiments, the environment800is implemented in a distributed architecture across multiple computing devices.

As illustrated inFIG.8, the environment800may include client devices806A-806N. The client devices806A-806N may comprise any computing device. For example, client devices806A-806N may comprise one or more personal computers, laptop computers, mobile devices, mobile phones, tablets, special purpose computers, TVs, or other computing devices, including computing devices described below with regard toFIG.9. Although three client devices are shown inFIG.8, it will be appreciated that client devices806A-806N may comprise any number of client devices (greater or smaller than shown).

Moreover, as illustrated inFIG.8, the client devices806A-806N and the one or more servers804may communicate via one or more networks808. The one or more networks808may represent a single network or a collection of networks (such as the Internet, a corporate intranet, a virtual private network (VPN), a local area network (LAN), a wireless local network (WLAN), a cellular network, a wide area network (WAN), a metropolitan area network (MAN), or a combination of two or more such networks. Thus, the one or more networks808may be any suitable network over which the client devices806A-806N may access the service provider802and server804, or vice versa. The one or more networks808will be discussed in more detail below with regard toFIG.9.

In addition, the environment800may also include one or more servers804. The one or more servers804may generate, store, receive, and transmit any type of data, including input data or other information. For example, a server804may receive data from a client device, such as the client device806A, and send the data to another client device, such as the client device806B and/or806N. The server804can also transmit electronic messages between one or more users of the environment800. In one example embodiment, the server804is a data server. The server804can also comprise a communication server or a web-hosting server. Additional details regarding the server804will be discussed below with respect toFIG.9.

As mentioned, in one or more embodiments, the one or more servers804can include or implement at least a portion of the digital design system. In particular, the digital design system can comprise an application running on the one or more servers804or a portion of the digital design system can be downloaded from the one or more servers804. For example, the digital design system can include a web hosting application that allows the client devices806A-806N to interact with content hosted at the one or more servers804. To illustrate, in one or more embodiments of the environment800, one or more client devices806A-806N can access a webpage supported by the one or more servers804. In particular, the client device806A can run a web application (e.g., a web browser) to allow a user to access, view, and/or interact with a webpage or website hosted at the one or more servers804.

Upon the client device806A accessing a webpage or other web application hosted at the one or more servers804, in one or more embodiments, the one or more servers804can provide a user of the client device806A with an interface to provide inputs, including an input image. Upon receiving the input image, the one or more servers804can automatically perform the methods and processes described above to reconstruct freeform gradients from an input image.

As just described, the digital design system may be implemented in whole, or in part, by the individual elements802-808of the environment800. It will be appreciated that although certain components of the digital design system are described in the previous examples with regard to particular elements of the environment800, various alternative implementations are possible. For instance, in one or more embodiments, the digital design system is implemented on any of the client devices806A-806N. Similarly, in one or more embodiments, the digital design system may be implemented on the one or more servers804. Moreover, different components and functions of the digital design system may be implemented separately among client devices806A-806N, the one or more servers804, and the network808.

FIG.9illustrates, in block diagram form, an exemplary computing device900that may be configured to perform one or more of the processes described above. One will appreciate that one or more computing devices such as the computing device900may implement the digital design system. As shown byFIG.9, the computing device can comprise a processor902, memory904, one or more communication interfaces906, a storage device908, and one or more input or output (“I/O”) devices/interfaces910. In certain embodiments, the computing device900can include fewer or more components than those shown inFIG.9. Components of computing device900shown inFIG.9will now be described in additional detail.

In particular embodiments, processor(s)902includes hardware for executing instructions, such as those making up a computer program. As an example, and not by way of limitation, to execute instructions, processor(s)902may retrieve (or fetch) the instructions from an internal register, an internal cache, memory904, or a storage device908and decode and execute them. In various embodiments, the processor(s)902may include one or more central processing units (CPUs), graphics processing units (GPUs), field programmable gate arrays (FPGAs), systems on chip (SoC), or other processor(s) or combinations of processors.

The computing device900includes memory904, which is coupled to the processor(s)902. The memory904may be used for storing data, metadata, and programs for execution by the processor(s). The memory904may include one or more of volatile and non-volatile memories, such as Random Access Memory (“RAM”), Read Only Memory (“ROM”), a solid state disk (“SSD”), Flash, Phase Change Memory (“PCM”), or other types of data storage. The memory904may be internal or distributed memory.

The computing device900can further include one or more communication interfaces906. A communication interface906can include hardware, software, or both. The communication interface906can provide one or more interfaces for communication (such as, for example, packet-based communication) between the computing device and one or more other computing devices900or one or more networks. As an example, and not by way of limitation, communication interface906may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or other wire-based network or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network, such as a WI-FI. The computing device900can further include a bus912. The bus912can comprise hardware, software, or both that couples components of computing device900to each other.

The computing device900includes a storage device908includes storage for storing data or instructions. As an example, and not by way of limitation, storage device908can comprise a non-transitory storage medium described above. The storage device908may include a hard disk drive (HDD), flash memory, a Universal Serial Bus (USB) drive or a combination these or other storage devices. The computing device900also includes one or more I/O devices/interfaces910, which are provided to allow a user to provide input to, receive output from, and otherwise transfer data to and from the computing device900. These I/O devices/interfaces910may include a mouse, keypad or a keyboard, a touch screen, camera, optical scanner, network interface, modem, other known I/O devices or a combination of such I/O devices/interfaces910. The touch screen may be activated with a stylus or a finger.

In the foregoing specification, embodiments have been described with reference to specific exemplary embodiments thereof. Various embodiments are described with reference to details discussed herein, and the accompanying drawings illustrate the various embodiments. The description above and drawings are illustrative of one or more embodiments and are not to be construed as limiting. Numerous specific details are described to provide a thorough understanding of various embodiments.