Disclosure of Invention
In view of the above, an objective of the present invention is to provide a method for determining an encoding array, an initialization method, a structured light encoding method, an optical device and a three-dimensional measuring device, so as to overcome the above-mentioned drawbacks in the prior art.
The embodiment of the application provides a method for determining a coding array, which comprises the following steps:
determining the ith stripe in the image to be coded and a plurality of stripes in the neighborhood of the ith stripe along the coding direction;
generating a code value matrix of the ith root stripe according to the code value of the ith root stripe and the code values of the plurality of root stripes;
and generating an encoding array according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes, wherein i is greater than or equal to 2.
Optionally, in any embodiment of the present application, after generating the code value matrix of the ith stripe, the method includes: judging whether the code value matrix of the ith stripe is the same as at least one code value matrix of all the first i-1 stripes; and if the code values of the ith stripe and the first i-1 stripes are different, generating a coding array for coding the image to be coded according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes.
Optionally, in any embodiment of the present application, if the code value matrix of the ith stripe is the same as at least one code value matrix of all the first i-1 stripes, the code value of the ith stripe is regenerated, and it is determined whether the regenerated code value of the ith stripe is the same as the code value matrix of all the first i-1 stripes.
Optionally, in any embodiment of the present application, the regenerating a code value of the ith stripe includes: and carrying out left shift processing on the column vectors in the code value matrix of the (i-1) th stripe, reserving a plurality of column vectors with the same number as the plurality of stripes, and carrying out column vector increment processing on the code value matrix of the (i-1) th stripe to regenerate the code value of the (i) th stripe.
Optionally, in any embodiment of the present application, determining whether the code value matrix of the ith stripe is the same as the code value matrices of all the first i-1 stripes includes: judging whether the intermediate process matrix added with at least one code value matrix of all the previous i-1 stripes comprises the code value matrix of the ith stripe, if so, the code value matrix of the ith stripe is the same as the at least one code value matrix of all the previous i-1 stripes, otherwise, the code value matrix of the ith stripe is different from the code value matrix of all the previous i-1 stripes.
Optionally, in any embodiment of the present application, the encoding direction is from left to right, and the neighborhood is a right neighborhood; or, the encoding direction is from right to left, and the neighborhood is a left neighborhood; or, the encoding direction is from top to bottom, and the neighborhood is a lower neighborhood; or, the encoding direction is from bottom to top, and the neighborhood is an upper neighborhood.
The embodiment of the present application further provides an initialization method of a coding array, which includes:
determining a1 st stripe in an image to be coded and a plurality of stripes in the neighborhood of the stripe along the coding direction;
generating a code value matrix of the 1 st stripe according to the code value of the 1 st stripe and the code values of the plurality of stripes;
and initializing the coding array according to the code value matrix of the 1 st stripe.
Optionally, in any embodiment of the present application, the method further includes: generating a code value of a1 st stripe and code values of a plurality of stripes based on a code value generation model, and generating a code value matrix of the 1 st stripe according to the code values of the 1 st stripe and the code values of the plurality of stripes.
Optionally, in any embodiment of the present application, the preconfigured matrix is a null matrix.
The embodiment of the application also provides a structured light coding method, which is used for coding an image to be coded by obtaining the coding array according to any embodiment of the application.
Optionally, in any embodiment of the present application, the coding array obtained according to any embodiment of the present application codes an image to be coded to obtain a time-division coded image.
An embodiment of the present application further provides an optical device, which includes: the system comprises a plurality of grating structures, a coding array and a plurality of image processing devices, wherein the grating structures are arranged according to a coding whole column for coding an image to be coded, the coding array is generated according to a code value matrix of the ith stripe and code values of all the first i-1 stripes, and the code value matrix of the ith stripe is generated according to the code value of the ith stripe and the code values of a plurality of stripes in the neighborhood of the ith stripe; the ith stripe and a plurality of stripes in the neighborhood of the ith stripe are determined along the coding direction, and i is more than or equal to 2; the grating structures are used for projecting a coded image obtained by coding the image to be coded according to the array onto a target object through light beam diffraction. .
The embodiment of the present application further provides a three-dimensional measurement system, which includes: the projection device comprises the optical device of any embodiment of the application, and the image pickup device is used for capturing a projection image formed by projecting the coded image onto a target object so as to perform three-dimensional measurement on the target object according to the projection image and the coded image.
In the technical scheme provided by the embodiment of the application, the ith stripe in the image to be coded and a plurality of stripes in the neighborhood of the ith stripe are determined along the coding direction; generating a code value matrix of the ith root stripe according to the code value of the ith root stripe and the code values of the plurality of root stripes; and generating a coding array according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes, wherein i is greater than or equal to 2, so that the problem that the measurement speed is slow due to the fact that a plurality of coded images are projected onto a target object in a time sequence in a time coding mode is solved, and the problem that the measurement precision is low due to the fact that adjacent pixel information (such as color, pixel value or geometric shape) is used for generating code values in a space coding mode is solved.
Detailed Description
It is not necessary for any particular embodiment of the invention to achieve all of the above advantages at the same time.
The following further describes specific implementation of the embodiments of the present invention with reference to the drawings.
In the technical scheme provided by the embodiment of the application, the ith stripe in the image to be coded and a plurality of stripes in the neighborhood of the ith stripe are determined along the coding direction; generating a code value matrix of the ith root stripe according to the code value of the ith root stripe and the code values of the plurality of root stripes; and generating a coding array according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes, wherein i is greater than or equal to 2, so that the problem that the measurement speed is slow due to the fact that a plurality of coded images are projected onto a target object in a time sequence in a time coding mode is solved, and the problem that the measurement precision is low due to the fact that adjacent pixel information (such as color, pixel value or geometric shape) is used for generating code values in a space coding mode is solved.
FIG. 1 is a schematic diagram of a three-dimensional measurement system according to an embodiment of the present disclosure; as shown in fig. 1, it includes: the image processing system comprises a projection device 101 and an image pickup device 102, wherein the projection device comprises an optical device (not shown in the figure), the optical device comprises a plurality of grating structures, the grating structures are arranged according to an encoding whole column for encoding an image to be encoded, an encoding array is generated according to a code value matrix of an ith stripe and code values of all previous i-1 stripes, and the code value matrix of the ith stripe is generated according to the code value of the ith stripe and code values of a plurality of stripes in the neighborhood of the ith stripe; the ith stripe and a plurality of stripes in the neighborhood of the ith stripe are determined along the coding direction, and i is more than or equal to 2; the plurality of grating structures are used for projecting a coded image obtained by coding the image to be coded according to the array onto a target object through light beam diffraction, and the camera shooting device is used for capturing a projected image formed by projecting the coded image onto the target object so as to carry out three-dimensional measurement on the target object according to the projected image and the coded image.
In this embodiment, the Optical device may be an Optical device manufactured based on the principle of beam diffraction, or specifically referred to as a Diffractive Optical device or a Diffractive Optical Element (DOE).
In this embodiment, in order to implement the structured light encoding method to obtain the encoded image according to any embodiment of the present application, a host is added to the three-dimensional measurement system, and the host is configured to execute the structured light encoding method according to any embodiment of the present application to obtain the encoded image, and further, the host is further configured to perform three-dimensional measurement on the target object according to the projection image and the encoded image. Here, it should be noted that the host is further configured to perform three-dimensional measurement of the target object according to the projection image and the coded image, specifically, by matching the projection image and the coded image to obtain three-dimensional information of the scene, which may also be referred to as a decoding process.
FIG. 2 is a flowchart illustrating an initialization method of a coding array according to a second embodiment of the present disclosure; as shown in fig. 2, it includes:
s201, determining the 1 st stripe in the image to be coded and a plurality of stripes in the neighborhood of the stripe along the coding direction;
in this embodiment, if the pixels of the image to be encoded are divided in the column direction, a column of pixels corresponds to a stripe, and a stripe includes a plurality of pixels. If the pixels of the image to be coded are divided according to the direction of the line, the pixels of one line correspond to one stripe, and each stripe comprises a plurality of pixels.
For this reason, in this embodiment, the determination of the 1 st stripe is related to the division of the stripes, if the stripe is divided according to the column direction, and if the encoding direction is from left to right, the 1 st stripe is a leftmost column of pixels; if the encoding direction is from right to left, the 1 st stripe is the rightmost column of pixels. If the division is carried out according to the direction of the line and if the coding direction is from top to bottom, the 1 st stripe is the uppermost line of pixels; if the encoding direction is from bottom to top, the 1 st stripe is the bottom row of pixels.
In this embodiment, the determination of the plurality of stripes in the 1 st stripe neighborhood is also related to the encoding direction, and if the encoding direction is from left to right and the stripes are divided according to the column direction, the 1 st stripe neighborhood is a right neighborhood; if the coding direction is from right to left and the stripes are divided according to the column direction, the 1 st stripe neighborhood is a left neighborhood; if the coding direction is from top to bottom and the stripes are divided according to the row direction, the 1 st stripe neighborhood is a lower neighborhood; if the encoding direction is from bottom to top and the stripes are divided according to the row direction, the 1 st stripe neighborhood is the top neighborhood.
In this embodiment, the specific number of the plurality of stripes is not particularly limited, and may be 1 stripe, 2 stripes, or more than 3 stripes, as long as it is ensured that the code value matrix of each stripe is not repeated.
S202, generating a code value matrix of the 1 st stripe according to the code value of the 1 st stripe and the code values of the plurality of stripes;
in this embodiment, the pixels in the 1 stripe may be divided into a plurality of groups, and each group of pixels is randomly assigned with the same code value, so that it can be seen that, for any 1 stripe, the code values are repeated according to the pixel groups, and therefore, the code values of one group of pixels may be directly used to represent the code values corresponding to the 1 stripe, where the number of the code values of the 1 stripe is equal to the number of the pixels in one group of pixels, for example, if a group of pixels includes 4 pixels, the number of the code values of one stripe is also 4. Of course, this is merely an example and is not particularly limited.
The code value of the 1 st stripe and the code values of the plurality of stripes may be generated randomly, or may be generated according to a pre-established code value model. For example, based on a code value generation model, a code value of a1 st stripe and code values of a number of stripes are generated, so as to generate a code value matrix of the 1 st stripe according to the code values of the 1 st stripe and the code values of the number of stripes.
And S203, initializing an encoding array according to the code value matrix of the 1 st stripe.
In this embodiment, the code value matrix of the 1 st stripe may be directly used as an initial value of the coding array. The initialized code array is used to determine the code value array of the subsequent 2 stripes, please refer to the detailed description of the embodiment in fig. 3.
FIG. 3 is a flowchart illustrating a method for determining a third coding array according to an embodiment of the present disclosure; in this embodiment, after the initialization of the coding matrix is completed based on fig. 2, code value array determination is performed on the following stripes except for the 1 st stripe; as shown in fig. 3, it may include:
s301, determining the ith stripe in the image to be coded and a plurality of stripes in the neighborhood of the ith stripe along the coding direction;
in this embodiment, i is greater than or equal to 2, that is, the subsequent 2 nd stripe is determined until the code value arrays of all the root stripes.
In this embodiment, the definition of the neighborhood may refer to the description in the embodiment of fig. 2, and may be a right neighborhood, a left neighborhood, an upper neighborhood, a lower neighborhood, or a combination of the coding direction and the dividing direction of the stripe.
S302, generating a code value matrix of the ith stripe according to the code value of the ith stripe and the code values of the plurality of stripes;
in this embodiment, for example, when determining the code value matrix of the 2 nd stripe, the code value array of the 1 st stripe in the above-described embodiment of fig. 2 is used. Since the code values of the 2 nd stripe have been randomly generated in the initialization process illustrated in fig. 2, it is only necessary to determine the code values of several stripes in its neighborhood. In practical application, since the stripes in the neighborhood of the 1 st stripe and the stripes in the neighborhood of the 2 nd stripe are overlapped, the code values of the stripes corresponding to the overlapped parts are determined in fig. 2, and only the code values of the stripes of the non-overlapped parts need to be determined. Specifically, the code values of the stripes of the non-coincident part may be determined by a code value generation model, for example, the code values of the stripes of the non-coincident part are generated by a random code value generation model, so as to form code values of a plurality of stripes in the neighborhood of the 2 nd stripe, and then combined with the code values of the 2 nd stripe to form a code value array of the 2 nd stripe.
And S303, generating an encoding array according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes.
In this embodiment, after step S302 and before step S303, the method may further include: judging whether the code value matrix of the ith stripe is the same as at least one code value matrix of all the first i-1 stripes; if not, go to step S303. Alternatively, step S303 may further include: and judging whether the code value matrix of the ith stripe is the same as at least one code value matrix of all the first i-1 stripes, if so, generating an encoding array according to the code value matrix of the ith stripe and the code values of all the first i-1 stripes. And if the code value matrix of the ith root stripe is the same as at least one code value matrix of all the previous i-1 root stripes, judging whether the code value of the regenerated ith root stripe is the same as the code value matrix of all the previous i-1 root stripes or not according to the regenerated code value of the ith root stripe until the generated code value of the ith root stripe is different from the code value matrix of all the previous i-1 root stripes.
Further, if the stripes are divided according to the column direction, and the encoding direction is from right to left, when the code value of the ith stripe is regenerated according to the code value matrix of the (i-1) th stripe, left shift processing may be performed on the column vectors in the code value matrix of the (i-1) th stripe, a number of column vectors that is the same as the number of the several stripes is reserved, and column vector increment processing may be performed on the code value matrix of the (i-1) th stripe to regenerate the code value of the ith stripe.
Further, judging whether the code value matrix of the ith stripe is the same as the code value matrices of all the first i-1 stripes comprises: judging whether the intermediate process matrix added with at least one code value matrix of all the first i-1 stripes comprises the code value matrix of the ith stripe, if so, the code value matrix of the ith stripe is the same as the at least one code value matrix of all the first i-1 stripes, otherwise, the code value matrix of the ith stripe is different from the code value matrix of all the first i-1 stripes.
The above steps S301 to S303 are executed, and for generating the code value matrix of the 2 nd stripe, i in the above step is 2, and the above determination process is performed until one code value matrix that does not overlap with the code value matrix of the 1 st stripe is generated. When the code value matrix of the 3 rd stripe needs to be generated, i is 3 in the above step, and the code value matrix of the 2 nd stripe is used, the above process of judging whether the code value matrices are the same is performed until one code value matrix which is not repeated with the code value matrices of the 1 st and 2 nd stripes is generated. By analogy, if the number of stripes is n, the steps S301 to S303 are executed n-1 times in total, so that a code value matrix of all stripes can be obtained, and further an encoding array finally used for encoding an image to be encoded is obtained.
Here, it should be noted that, in some application scenarios, if the generation of the code value matrix of the ith stripe is already controlled in advance when the code value matrix of the ith stripe and the code values of all the first i-1 stripes are performed, so that the code value matrix of the ith stripe and the code value matrices of all the first i-1 stripes are not repeated, the steps may be omitted: and judging whether the code value matrix of the ith stripe is the same as the code value matrix of all the first i-1 stripes.
FIG. 4 is a flowchart illustrating a method for determining a four-code array according to an embodiment of the present disclosure; in this embodiment, a code value array of the 1 st stripe is generated by taking the pattern of the stripe as a column direction and the coding direction as a left-to-right direction as an example; as shown in fig. 4, it includes the following steps:
s401, initializing code values of the 1 st stripe and the 3 stripes in the right neighborhood thereof, and initializing a middle process matrix;
in this embodiment, for example, the elements of the 1 st stripe are divided into a plurality of groups, each group includes 4 pixels, and as described above, the code value of the 1 st stripe is initialized to obtain a specific code value column vector [1,0,0,0 ]. The 3 stripes in the right neighborhood are respectively: therefore, the code value of the 2 nd stripe is initialized to obtain a specific code value column vector [0,1,1,1], the code value of the 3 rd stripe is initialized to obtain a specific code value column vector [0,1,0,1], and the code value of the 4 th stripe is initialized to obtain a specific code value column vector [0,1,0,1 ]. In order to avoid duplication of the code value array to be generated later, it is preferable to ensure that the code value column vectors corresponding to the respective stripes do not duplicate when initializing the code values of the stripes.
In this example, in order to reduce the amount of data calculation and increase the encoding speed, the initialized intermediate process matrix is preferably a null matrix, and the dimensionality of the null matrix can be dynamically adjusted according to the dimensionality of the code value matrix.
S402, generating a code value matrix of the 1 st stripe according to the code value of the 1 st stripe and the code values of the 3 stripes in the neighborhood of the 1 st stripe;
in this embodiment, the code value column vectors of the 1 st to 4 th stripes are combined to form a corresponding code value matrix a, that is, a code value matrix of the 1 st stripe:
s403, judging whether the code value matrix of the 1 st stripe is included in the initialized middle process matrix, if not, executing a step S404A, and if so, executing a step S404B;
in this embodiment, since the initialized middle process matrix is a null matrix, the code value matrix of the 1 st stripe is not included in the null matrix, and thus the process directly jumps to step S404, and step S403 may be omitted. However, if the initialized middle process matrix is not an empty matrix, step S403 needs to be added, and therefore, in order to take both cases into consideration and ensure common use in various scenarios, step S403 is preferably retained.
S404A, adding the code value matrix of the 1 st stripe into the initialized middle process matrix;
S404B, removing the leftmost column of code values in the code value matrix of the 1 st stripe, shifting the reserved three columns of code values to the left, adding randomly generated column vectors to form a new code value matrix of the 1 st stripe, and jumping to S403;
in this embodiment, the randomly generated column vectors are, for example: [1,0,0,1], but of course, may be [0,0,0,1 ]; or any column vector that is the same or different from the code values of the 1 st to 4 th stripes. Since the leftmost column of the code value matrix of the 1 st stripe in step S402 is removed, and at the same time, the remaining three columns of code values are shifted to the left, then a column vector generated randomly may be added to the rightmost side, i.e. the 4 th column, to form a new code value matrix of the 1 st stripe, and the process jumps to step S403 again to determine whether an initialized intermediate process matrix is included, where it needs to be noted that the initialized intermediate process matrix is preferably not a null matrix.
And S405, ending the coding of the 1 st stripe.
Through the loop of the above steps S403, S404B, the code value array until the 1 st stripe is not included in the initialized middle process matrix.
FIG. 5 is a flowchart illustrating a method for determining a five-code array according to an embodiment of the present disclosure; in this embodiment, a code value array of the 2 nd stripe, the 3 rd stripe, and the nth stripe is generated by taking the pattern of the stripe as a column direction and the coding direction as a left-to-right direction as an example; as shown in fig. 5, the present embodiment takes the encoding for generating the 2 nd stripe as an example, where i is 2, and includes the following steps:
s501, determining the ith stripe in the image to be coded and 3 stripes in the right neighborhood of the ith stripe along the coding direction from left to right;
in this embodiment, the 3 stripes in the 2 nd right neighborhood are respectively: the 3 rd stripe, the 4 th stripe and the 5 th stripe.
S502, generating a code value matrix of the ith root stripe according to the code value of the ith root stripe and the code values of the 3 root stripes in the neighborhood of the ith root stripe;
in this embodiment, referring to the above-mentioned embodiment of fig. 4, when generating the code value array of the 1 st stripe, the code values of the 2 nd to 4 th stripes are already generated and used directly here, but as long as the code value of the 5 th stripe is generated, for example, the code value column vector of the 5 th stripe is [0,1,1,0], or, in a generalized manner, or arbitrarily the same as or different from the code values of the 1 st to 4 th stripes. In specific implementation, the code value of any stripe is preferably different from that of the 1 st to 4 th stripes, so that repeated execution of the subsequent step S503 is avoided, and the data processing efficiency is improved.
In this embodiment, the code value matrix a2 of the 2 nd stripe obtained through the processing in step S502 is:
s503, judging whether the code value matrix of the ith stripe is included in the middle process matrix for generating at least one code value matrix of all the first i-1 stripes; if not, go to S504A; if yes, go to S504B;
in this embodiment, it is specifically determined whether the code value array of the 2 nd stripe is included in the intermediate process matrix for generating the code value matrix of the 1 st stripe. And recording the intermediate process matrix for generating the code value matrix of the 1 st stripe as mat, wherein the initialized intermediate process matrix is a null matrix, and the intermediate process matrix added with the code value matrix A1 is as follows:
from the comparison between a2 and Mats, a2 is not included in the intermediate process matrix Mats, and therefore, the code value matrix a2 generated in step S502 is a valid code value matrix, and correspondingly, the code value column vector [0,1,1,1] of the 2 nd stripe is valid, so that the process goes to step S504A. Otherwise, it jumps to step S504B.
S504, 504A, ending the coding of the ith stripe;
S504B, removing the leftmost column code value in the code value matrix of the ith root stripe, shifting the reserved three column code values to the left, adding the randomly generated column vector, forming a new code value matrix of the ith root stripe, and jumping to S503.
Referring to step S502 above, if the code value column vector of the 5 th stripe is such that the code value array of the 2 nd stripe is included in the intermediate process matrix for generating the code value matrix of the 1 st stripe, the code value matrix of the i-th stripe is regenerated according to step S504B, which is not illustrated in detail.
It should be noted here that in a specific application scenario, the above-mentioned fig. 4 embodiment is not necessarily included to generate the code value array of the 1 st stripe, or the code value array of the 1 st stripe that has been generated to satisfy other application scenarios may be directly utilized.
FIG. 6 is a diagram of a sixth encoded image according to an embodiment of the present application; FIG. 7 is a diagram of a seventh encoded image according to an embodiment of the present application; referring to fig. 6 and 7, on the encoded image, the larger white boxes represent code values of 1 and the smaller white boxes represent code values of 0. Fig. 6 and 7 are different in that, in fig. 6, one encoded image corresponds to a mixture of encoding sequences 0 and 1, while in fig. 7, in order to project the encoded image in a time-sharing manner, one encoded image is formed for the image to be encoded using all the code values 0 in the encoding sequence, and the other encoded image is formed for the image to be encoded using all the code values 1 in the encoding sequence.
The embodiment of the application also provides a structured light coding method, which is used for coding an image to be coded by obtaining the coding array according to any embodiment of the application.
Optionally, in any embodiment of the present application, the coding array obtained according to any embodiment of the present application codes an image to be coded to obtain a time-division coded image.
Thus, particular embodiments of the present subject matter have been described. Other embodiments are within the scope of the following claims. In some cases, the actions recited in the claims can be performed in a different order and still achieve desirable results. In addition, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In some embodiments, multitasking and parallel processing may be advantageous.
For convenience of description, the above devices are described as being divided into various units by function, and are described separately. Of course, the functionality of the units may be implemented in one or more software and/or hardware when implementing the present application.
As will be appreciated by one skilled in the art, embodiments of the present invention may be provided as a method, system, or computer program product. Accordingly, the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment combining software and hardware aspects. Furthermore, the present invention may take the form of a computer program product embodied on one or more computer-usable storage media (including, but not limited to, disk storage, CD-ROM, optical storage, and the like) having computer-usable program code embodied therein.
The present invention is described with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each flow and/or block of the flow diagrams and/or block diagrams, and combinations of flows and/or blocks in the flow diagrams and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, embedded processor, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions specified in the flowchart flow or flows and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including instruction means which implement the function specified in the flowchart flow or flows and/or block diagram block or blocks.
These computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide steps for implementing the functions specified in the flowchart flow or flows and/or block diagram block or blocks.
In a typical configuration, a computing device includes one or more processors (CPUs), input/output interfaces, network interfaces, and memory.
The memory may include forms of volatile memory in a computer readable medium, Random Access Memory (RAM) and/or non-volatile memory, such as Read Only Memory (ROM) or flash memory (flash RAM). Memory is an example of a computer-readable medium.
Computer-readable media, including both non-transitory and non-transitory, removable and non-removable media, may implement information storage by any method or technology. The information may be computer readable instructions, data structures, modules of a program, or other data. Examples of computer storage media include, but are not limited to, phase change memory (PRAM), Static Random Access Memory (SRAM), Dynamic Random Access Memory (DRAM), other types of Random Access Memory (RAM), Read Only Memory (ROM), Electrically Erasable Programmable Read Only Memory (EEPROM), flash memory or other memory technology, compact disc read only memory (CD-ROM), Digital Versatile Discs (DVD) or other optical storage, magnetic cassettes, magnetic tape magnetic disk storage or other magnetic storage devices, or any other non-transmission medium that can be used to store information that can be accessed by a computing device. As defined herein, a computer readable medium does not include a transitory computer readable medium such as a modulated data signal and a carrier wave.
It should also be noted that the terms "comprises," "comprising," or any other variation thereof, are intended to cover a non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements does not include only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus. Without further limitation, an element defined by the phrase "comprising an … …" does not exclude the presence of other like elements in a process, method, article, or apparatus that comprises the element.
As will be appreciated by one skilled in the art, embodiments of the present application may be provided as a method, system, or computer program product. Accordingly, the present application may take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment combining software and hardware aspects. Furthermore, the present application may take the form of a computer program product embodied on one or more computer-usable storage media (including, but not limited to, disk storage, CD-ROM, optical storage, and the like) having computer-usable program code embodied therein.
The application may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular transactions or implement particular abstract data types. The application may also be practiced in distributed computing environments where transactions are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.
The above description is only an example of the present application and is not intended to limit the present application. Various modifications and changes may occur to those skilled in the art. Any modification, equivalent replacement, improvement, etc. made within the spirit and principle of the present application should be included in the scope of the claims of the present application.