Image-Assisted Segmentation of Object Surface for Mobile Dimensioning

A method in a computing device includes: capturing, via a depth sensor, (i) a point cloud depicting an object resting on a support surface, and (ii) a two-dimensional image depicting the object and the support surface; detecting, from the point cloud, the support surface and a portion of an upper surface of the object; labelling a first region of the image corresponding to the portion of the upper surface as a foreground region; based on the first region, performing a foreground segmentation operation on the image to segment the upper surface of the object from the image; determining, based on the point cloud, a three-dimensional position of the upper surface segmented from the image; and determining dimensions of the object based on the three-dimensional position of the upper surface.

BACKGROUND

Depth sensors such as time-of-flight (ToF) sensors can be deployed in mobile devices such as handheld computers, and employed to capture point clouds of objects (e.g., boxes or other packages), from which object dimensions can be derived. Point clouds generated by ToF sensors, however, may incompletely capture surfaces of the objects, and/or include artifacts caused by multipath reflections received at the sensor.

DETAILED DESCRIPTION

Examples disclosed herein are directed to a method in a computing device, the method comprising: capturing, via a depth sensor, (i) a point cloud depicting an object resting on a support surface, and (ii) a two-dimensional image depicting the object and the support surface; detecting, from the point cloud, the support surface and a portion of an upper surface of the object; labelling a first region of the image corresponding to the portion of the upper surface as a foreground region; based on the first region, performing a foreground segmentation operation on the image to segment the upper surface of the object from the image; determining, based on the point cloud, a three-dimensional position of the upper surface segmented from the image; and determining dimensions of the object based on the three-dimensional position of the upper surface.

In some examples, the method further comprises presenting the dimensions on a display of the computing device.

In some examples, the method further comprises labelling a second region of the image corresponding to the support surface as a background region.

In some examples, the method further comprises: detecting, in the point cloud, a further surface distinct from the upper surface and the support surface; and labelling a third region of the image corresponding to the further surface as a probably background region.

In some examples, detecting the further surface includes detecting a portion of the point cloud with a normal vector different from a normal vector of the upper surface by at least a threshold.

In some examples, the method further comprises: labelling a remainder of the image as a probable foreground region.

In some examples, the method further comprises: prior to determining dimensions of the object, determining whether the point cloud exhibits multipath artifacts by: selecting a candidate point on the upper surface; determining a reflection score for the candidate point; and comparing the reflection score to a threshold.

In some examples, selecting the candidate point includes identifying a non-planar region of the upper surface, and selecting the candidate point from the non-planar region.

In some examples, determining a reflection score includes: for each of a plurality of rays originating at the candidate point, determining whether the point cloud contains a contributing point intersected by the ray; for each contributing point, determining an angle between the depth sensor, the contributing point, and the candidate point; and when a normal of the contributing point bisects the angle, incrementing the reflection score.

In some examples, determining a reflection score includes incrementing the reflection score based proportionally to a cosine of the angle.

Additional examples disclosed herein are directed to a computing device, comprising: a depth sensor; and a processor configured to: capture, via the depth sensor, (i) a point cloud depicting an object resting on a support surface, and (ii) a two-dimensional image depicting the object and the support surface; detect, from the point cloud, the support surface and a portion of an upper surface of the object; label a first region of the image corresponding to the portion of the upper surface as a foreground region; based on the first region, perform a foreground segmentation operation on the image to segment the upper surface of the object from the image; determine, based on the point cloud, a three-dimensional position of the upper surface segmented from the image; and determine dimensions of the object based on the three-dimensional position of the upper surface.

In some examples, the processor is further configured to present the dimensions on a display.

In some examples, the processor is further configured to: label a second region of the image corresponding to the support surface as a background region.

In some examples, the processor is further configured to: detect, in the point cloud, a further surface distinct from the upper surface and the support surface; and label a third region of the image corresponding to the further surface as a probably background region.

In some examples, the processor is further configured to detect the further surface by: detecting a portion of the point cloud with a normal vector different from a normal vector of the upper surface by at least a threshold.

In some examples, the processor is further configured to: label a remainder of the image as a probable foreground region.

In some examples, the processor is further configured to: prior to determining dimensions of the object, determine whether the point cloud exhibits multipath artifacts by: selecting a candidate point on the upper surface; determining a reflection score for the candidate point; and comparing the reflection score to a threshold.

In some examples, the processor is further configured to select the candidate point by identifying a non-planar region of the upper surface, and selecting the candidate point from the non-planar region.

In some examples, the processor is further configured to determine a reflection score by: for each of a plurality of rays originating at the candidate point, determining whether the point cloud contains a contributing point intersected by the ray; for each contributing point, determining an angle between the depth sensor, the contributing point, and the candidate point; and when a normal of the contributing point bisects the angle, incrementing the reflection score.

In some examples, the processor is further configured to determine a reflection score by incrementing the reflection score based proportionally to a cosine of the angle.

FIG.1illustrates a computing device100configured to capture sensor data depicting a target object104within a field of view (FOV) of a sensor of the device100. The computing device100, in the illustrated example, is a mobile computing device such as a tablet computer, smartphone, or the like. The computing device100can be manipulated by an operator thereof to place the target object104within the FOV of the sensor, in order to capture sensor data for subsequent processing as described below. In other examples, the computing device100can be implemented as a fixed computing device, e.g., mounted adjacent to an area in which target objects104are placed and/or transported (e.g., a staging area, a conveyor belt, a storage container, or the like).

The target object104, in this example, is a parcel (e.g., a cardboard box or other substantially cuboid object), although a wide variety of other target objects can also be processed as set out below. The sensor data captured by the computing device100includes a point cloud. The point cloud includes a plurality of depth measurements (also referred to as points) defining three-dimensional positions of corresponding points on the target object104. The sensor data captured by the computing device100also includes a two-dimensional image depicting the target object104. The image can include a two-dimensional array of pixels, each pixel containing a color and/or brightness value. For instance, the image can be an infrared or near-infrared image, in which each pixel in the array contains a brightness or intensity value. From the captured sensor data, the device100(or in some examples, another computing device such as a server, configured to obtain the sensor data from the device100) is configured to determine dimensions of the target object104, such as a width “W”, a depth “D”, and a height “H” of the target object104.

The target object104is, in the examples discussed below, a substantially rectangular prism. As shown inFIG.1, the height H of the object104is a dimension substantially perpendicular to a support surface (e.g., a floor)108on which the object104rests. The width W and depth D of the object104, in this example, are substantially orthogonal to one another and to the height H. The dimensions determined from the captured data can be employed in a wide variety of downstream processes, such as optimizing loading arrangements for storage containers, pricing for transportation services based on parcel size, and the like.

Certain internal components of the device100are also shown inFIG.1. For example, the device100includes a processor116(e.g., a central processing unit (CPU), graphics processing unit (GPU), and/or other suitable control circuitry, microcontroller, or the like). The processor116is interconnected with a non-transitory computer readable storage medium, such as a memory120. The memory120includes a combination of volatile memory (e.g. Random Access Memory or RAM) and non-volatile memory (e.g. read only memory or ROM, Electrically Erasable Programmable Read Only Memory or EEPROM, flash memory). The memory120can store computer-readable instructions, execution of which by the processor116configures the processor116to perform various functions in conjunction with certain other components of the device100. The device100can also include a communications interface124enabling the device100to exchange data with other computing devices, e.g. via various networks, short-range communications links, and the like.

The device100can also include one or more input and output devices, such as a display128, e.g., with an integrated touch screen. In other examples, the input/output devices can include any suitable combination of microphones, speakers, keypads, data capture triggers, or the like.

The device100further includes a sensor assembly132(also referred to herein as a sensor132), controllable by the processor116to capture point cloud and image data. The sensor assembly132can include a sensor capable of capturing both depth data (that is, three-dimensional measurements) and image data (that is, two-dimensional measurements). For example, the sensor132can include a time-of-flight (ToF) sensor. The sensor132can be mounted on a housing of the device100, for example on a back of the housing (opposite the display128, as shown inFIG.1) and having an optical axis that is substantially perpendicular to the display128.

A ToF sensor can include, for example, a laser emitter configured to illuminate a scene and an image sensor configured to capture reflected light from such illumination. The ToF sensor can further include a controller configured to determine a depth measurement for each captured reflection according to the time difference between illumination pulses and reflections. The depth measurement indicates the distance between the sensor132itself and the point in space where the reflection originated. Each depth measurement represents a point in a resulting point cloud. The sensor132and/or the processor116can be configured to convert the depth measurements into points in a three-dimensional coordinate system.

The sensor132can also be configured to capture ambient light. For example, certain ToF sensors employ infrared laser emitters alongside infrared-sensitive image sensors. Such a ToF sensor is therefore capable of both generating a point cloud based on reflected light emitted by the laser emitter, and an image corresponding to both reflected light from the emitter and reflected ambient light. The capture of ambient light can enable the ToF sensor to produce an image with a greater resolution than the point cloud, albeit without associated depth measurements. In further examples, the two-dimensional image can have the same resolution as the point cloud. For example, each pixel of the image can include an intensity measurement (e.g., forming the two-dimensional image), and zero or one depth measurements (the set of the depth measurements defining the point cloud). The sensor132and/or the processor116can, however, map points in the point cloud to pixels in the image, and three-dimensional positions for at least some pixels can therefore be determined from the point cloud.

In other examples, the sensor assembly132can include various other sensing hardware, such as a ToF sensor and an independent color camera. In further examples, the sensor assembly132can include a depth sensor other than a ToF sensor, such as a stereo camera, or the like.

The memory120stores computer readable instructions for execution by the processor116. In particular, the memory120stores a dimensioning application136which, when executed by the processor116, configures the processor116to process point cloud data captured via the sensor assembly132to detect the object104and determine dimensions (e.g., the width, depth, and height shown inFIG.1) of the object104. For example, the dimensioning process implemented by the application136can include identifying an upper surface138of the object104, and the support surface108, in the point cloud. The height H of the object104can be determined as the distance between the upper surface138and the support surface108(e.g., the perpendicular distance between the surfaces138and108). The width W and the depth D can be determined as the dimensions of the upper surface138.

Under some conditions, the point cloud captured by the sensor assembly132can contain artifacts that impede the determination of accurate dimensions of the object104. For example, dark-colored surfaces on the object104may absorb light emitted by a ToF sensor and thereby reduce the quantity of reflections detected by the sensor132. In other examples, surfaces of the object104that are not perpendicular to an optical axis of the sensor132may result in fewer reflections being detected by the sensor. This effect may be more pronounced the more angled a surface is relative to the optical axis (e.g., the further the surface is from being perpendicular to the optical axis). For example, a point140-1on an upper surface of the object104may be closer to perpendicular to the optical axis and therefore more likely to generate reflections detectable by the sensor132, while a point140-2may lie on a surface at a less perpendicular angle relative to the optical axis of the sensor132. The point140-2may therefore be less likely to be represented in a point cloud captured by the sensor132.

Still further, increased distance between the sensor132and portions of the object104may result in the collection of fewer reflections by the sensor132. The point140-2may therefore also be susceptible to underrepresentation in a captured point cloud due to increased distance from the sensor132, e.g., if the object is sufficiently large (e.g., with a depth D greater than about 1.5 m in some examples). Other points, such as a point140-3, may also be vulnerable to multipath artifacts, in which light emitted from the sensor132impacts the point140-3and reflects onto the support surface108before returning to the sensor132, therefore inflating the perceived distance from the sensor132to the point140-3.

In other words, factors such as the angle of a given surface relative to the sensor132, the distance from the sensor132to the surface, the color of the surface, and the reflectivity of the surface, can negatively affect the density of a point cloud depicting that surface. Other examples of environmental factors impacting point cloud density include the presence of bright ambient light, e.g., sunlight, which may heat the surface of the object104and result in artifacts when infrared-based sensing is employed.

Factors such as those mentioned above can lead to reduced point cloud density corresponding to some regions of the object104, and/or other artifacts in a captured point cloud. Turning toFIG.2, an example point cloud200is illustrated, as captured by the sensor132. The portions of the object104and the support surface108shown in solid lines are represented in the point cloud200, e.g., as points in a coordinate system202, while the portions of the object104and the support surface108shown in dashed lines are not represented in the point cloud200. That is, certain portions of the object104are not depicted in the point cloud200due to the artifacts mentioned above. The example shown inFIG.2is exaggerated for illustration, and it will be understood that in practice the point cloud200may include points in the regions illustrated as being empty, although the number and/or accuracy of those points may be suboptimal.

As will be understood fromFIG.2, it may be possible to derive the height H of the object104from the point cloud200, but the width W and the depth D may not be accurately derivable. For example, from the point cloud200a width W′ and a depth D′ may be determined, based on the incomplete representation of the upper surface138in the point cloud200. The width W′ and the depth D′, as will be apparent fromFIGS.1and2, do not accurately reflect the true width W and depth D of the object104.

In other examples, artifacts near the vertices of the object104may also impede successful dimensioning of the object104. For example, referring toFIG.3, an overhead view of the device100and the object104is shown, in which the object104is adjacent to another surface300, such as a wall, another parcel, or the like. Following emission of a pulse of illumination, a single pixel of the sensor132may receive two distinct reflections304-1and304-2. The reflection304-1may arrive at the sensor132directly from a point308on the upper surface138. The reflection304-2may arrive at the sensor132having first reflected from the first point308to the surface300.

The sensor132can integrate the various reflections304to generate a depth measurement corresponding to the point308. Due to the variable nature of multipath reflections, however, it may be difficult to accurately determine the position of the point308in three-dimensional space. For example, the sensor may overestimate the distance between the sensor and the point308. The resulting point cloud, for instance, may depict an upper surface138′ that is distorted relative to the true shape of the upper surface138(the object104is shown in dashed lines below the surface138′ for comparison). The surface138′, in this exaggerated example, has a curved profile and is larger in one dimension than the true surface112. Multipath artifacts in captured point clouds may therefore lead to inaccurate dimensions for the object104.

The above obstacles to accurate dimensioning can impose limitations of various dimensioning applications, e.g., necessitating sensor data capture from a constrained top-down position rather than the more flexible isometric position shown inFIG.1(in which three faces of the object104are presented to the sensor132). Further limitations can include restrictions on dimensioning larger objects, dark-colored objects, and the like. In some examples, multiple captures may be required to accurately obtain dimensions for the object104, thus consuming more time for dimensioning than a single capture.

To mitigate the above obstacles to point cloud capture and downstream activities such as object dimensioning, execution of the application136also configures the processor116to use both the point cloud and the image captured by the sensor132to segment the upper surface138(that is, to determine the three dimensional boundary of the upper surface138). The use of image data alongside the point cloud can facilitate a more accurate detection of the boundary of the upper surface138, and can lead to more accurate dimensioning of the object104. In addition, execution of the application136can configure the processor116to assess the point cloud for multipath-induced artifacts, and to notify the operator of the device100when such artifacts are present.

In other examples, the application144can be implemented within the sensor assembly132itself (which can include a dedicated controller or other suitable processing hardware). In further examples, either or both of the applications136and144can be implemented by one or more specially designed hardware and firmware components, such as FPGAs, ASICs and the like.

Turning toFIG.4, a method400of image-assisted object surface segmentation is illustrated. The method400is described below in conjunction with its performance by the device100, e.g., to dimension the object104. It will be understood from the discussion below that the method400can also be performed by a wide variety of other computing devices including or connected with sensor assemblies functionally similar to the sensor assembly132.

At block405, the device100is configured, e.g., via control of the sensor132by the processor116, to capture a point cloud depicting at least a portion of the object104, and a two-dimensional image depicting at least a portion of the object104. The device100can, for example, be positioned relative to the object104as shown inFIG.1, to capture a point cloud and image depicting the upper surface138and one or more other surfaces of the object104. The image is captured substantially simultaneously with the point cloud, e.g., by the same sensor132in the case of a ToF sensor assembly, and/or by an independent color or greyscale camera that is synchronized with the depth sensor.

FIG.5illustrates an example point cloud200(as illustrated inFIG.2) and an example image500captured at block405. The image500is, in this example, a greyscale image captured by the infrared-sensitive ToF sensor132, simultaneously with the capture of the point cloud200. The image500therefore includes a two-dimensional array of pixels, each including a value indicating a brightness or the like. In other examples, the image can include color data (e.g., red, green, and blue values for each pixel). As shown inFIG.5, while the point cloud200provides an incomplete depiction of the visible surfaces of the object104, the image500is less likely to include discontinuities or other artifacts, due to the increased light level available for image capture relative to depth capture.

Returning toFIG.4, at block410the device100is configured to detect the support surface108and at least one surface of the object104, from the point cloud200. In the present example, the device100is configured to detect the upper surface138and the support surface108. Detection of surfaces in the point cloud200can be performed via a suitable plane-fitting algorithm, such as random sample consensus (RANSAC), or the like. The support surface108can be distinguished from other surfaces during such detection by, for example, selecting the detected surface with the lowest height (e.g., the lowest Z value in the coordinate system202). The upper surface138can be distinguished from other surfaces during detection by, for example, selecting a surface substantially parallel to the support surface108and/or substantially centered in the point cloud200. The device100can also be configured to detect other surfaces, such as the visible sides of the object104between the upper surface138and the support surface108.

Turning toFIG.6, the results of an example performance of block410are illustrated in the upper portion ofFIG.6. The device100has detected a surface600, corresponding to a portion of the upper surface138, as well as a surface604, corresponding to a portion of the support surface108. As will be apparent from the discussion above, the surface600alone may not result in accurate dimensions being determined for the object104, because the surface600does not form a complete representation of the upper surface138.

Referring again toFIG.4, at block415the device100is configured to label at least one region of the image500, based on the surface detections in the point cloud200from block410. The label(s) applied to the image500at block415represent an initial segmentation of the image into a foreground, containing the upper surface138, and a background, containing the remainder of the object104, the support surface108, and any other objects surrounding the object104. The label(s) applied at block415need not accurately reflect the boundaries of the upper surface138. Rather, the label(s) from block415serve as inputs to a segmentation algorithm, as discussed below.

At block415, the device100is configured to label a first region of the image500corresponding to a portion of the upper surface138as a foreground region. In particular, the device100is configured to determine the pixel coordinates of the surface600in the image500, based on a mapping between the coordinate system202and the pixel coordinates (e.g., represented in calibration data of the sensor132or the like). The pixel coordinates corresponding to the surface600are then labelled (e.g., in metadata for each pixel, as a set of coordinates defining the region, or the like) as foreground. The lower portion ofFIG.6illustrates the image500with a region608labelled as foreground.

The device100can also be configured to label additional regions of the image500. For example, the device100can be configured to label a second region612of the image500as a background region. The second region corresponds to the surface604identified from the point cloud200at block410. In further examples, the device100can be configured to label a third region616of the image500as a probable background region, e.g., by identifying surfaces with normal vectors that differ from the normal vector of the surface600or604by more than a threshold (e.g., by more than about 30 degrees, although various other thresholds can also be employed). The third region616can therefore encompass surfaces such as the sides of the object104, as shown inFIG.6, as well as walls or other substantially vertical surfaces behind or beside the object104. In still further examples, the device100can label a remainder of the image500(that is, any pixels not already encompassed by one of the regions608,612, and616) as a probable foreground region.

Returning toFIG.4, at block420the device100is configured to segment an image foreground from the image500, based on the label(s) applied at block415. Segmentation at block420can include implementing a graph cut-based algorithm, such as GrabCut (e.g., as implemented in the OpenCV library, or any other suitable machine vision library). As will be apparent to those skilled in the art, the GrabCut operation builds a graph of the image500, with each pixel represented by a node in the graph, connected with neighboring pixels by edges. Each node is also connected to a source node (corresponding to foreground) and a sink node (corresponding to background). The links between nodes are weighted, indicating strengths of connections between nodes. The initial weights are set based on the labels assigned at block415. The graph is then segmented to minimize a cost function that seeks to group pixels of similar intensity or other properties. The above process can be iterated, e.g., by determining updated weights based on the initial segmentation, and repeating the segmentation until convergence.

The output of block420, turning toFIG.7, is a boundary700in the pixel coordinates of the image500, corresponding to the upper surface138. In other words, using the regions labelled at block415(and derived from the point cloud200) as inputs to an image-based segmentation mechanism enables the device100to leverage both the point cloud200and the image500to accurately detect the upper surface138. At block425, the device100is configured to map the boundary700into the coordinate system202. The device100can then be configured, at block435, to use the mapped region700to determine dimensions (e.g., the width W and depth D) of the object104. As noted earlier, the height H of the object104can be determined based on the upper surface138and the support surface108. The dimensions can be presented on the display128, transmitted to another computing device, or the like.

In some examples, prior to determining dimensions of the object104at block435, the device100can assess the point cloud200for multipath artifacts, at block430. When the determination at block430is negative, the device100can proceed to block435. When the determination at block430is affirmative, however, the device100can instead proceed to block440, at which the device100can generate a notification, e.g., a warning on the display128, an audible tone, or the like. The notification can indicate to an operator of the device100that the object and/or device100should be repositioned, e.g., to move the object104away from other nearby objects, to increase dimensioning accuracy.

The determination at block430can be performed by evaluating certain regions of the surface600detected in the point cloud200at block410. Turning toFIG.8, a method800of detecting multipath artifacts is illustrated, which may be performed by the device100to implement block430of the method400. At block805, the device100is configured to select a region of the surface600corresponding to the upper surface138. The device100can apply a line mask or other subsampling mask to the point cloud200, as illustrated inFIG.9. As shown inFIG.9, each line900constitutes a region of the surface600. The device100can therefore select the points of the point cloud200along a line900for further processing. In other examples, the subsampling mask applied to the point cloud200can include a radial mask, e.g., with lines900radiating outwards from a center of the surface600.

At block810, the device100can be configured to determine whether the region is planar. For example, as shown inFIG.9, the device100can determine whether any of the points on a selected line900deviate from a plane904fitted to the surface600by more than a threshold distance908. When the determination is negative, the device100can proceed to the next region (e.g., the next line900). When the determination is affirmative (as in the example ofFIG.9), the device100is configured, at block815, to select one or more candidate points for assessment. The candidate points can be, for example, the point with the lowest Z value in the coordinate system202, the point with the highest Z value, or both. A candidate point912is shown inFIG.9. That is, the candidate points can be selected from a non-planar portion of the surface600. In other examples, however, the candidate points can be selected from planar portions of the surface600. For example, a set of candidate points can be selected at a predetermined spacing along the line900.

At block820, the device100is configured to determine one or more reflection scores for the candidate point(s) from block815. For example, the device100can determine a first score indicating the likelihood and/or intensity of a specular reflection arriving at the sensor132via the candidate point, from a contributing point such as a surface of a different object in the sensor132field of view. The device100can also determine a second score indicating the likelihood and/or intensity of a diffuse reflection arriving at the sensor132via the candidate point, from the contributing point.

To determine the score(s) at block820, turning toFIG.10, the device100is configured to generate a plurality of rays1000originating at the candidate point912and extending away from the sensor132. The rays can be generated, for example, in a hemispherical area originating at the candidate point912. For each ray1000, the device100is configured to determine whether the ray1000intersects another point in the point cloud200, such as a point defining the previously mentioned surface300(e.g., a wall behind the object104). When the ray1000does not intersect another point, the next ray1000is evaluated. When the ray1000does intersect another point, such as a point1004shown inFIG.10, the device100is configured to determine an angle1008between the location of the sensor132, the point1004, and the candidate point912. A first score can be assigned to the candidate point912if a normal vector1012at the contributing point1004bisects the angle1008. As seen inFIG.10, the normal1012does not bisect the angle1008, and the candidate point912is therefore unlikely to have resulted in a specular reflection from the contributing point1004and causing multipath interference. When the angle is bisected by the normal vector of the contributing point, the score associated with the candidate point912can be incremented, set to a binary value indicating likely multipath interference, or the like.

The device100can also evaluate the candidate point912and the contributing point1004for diffuse reflections, which are proportional to the cosine of the angle1008. That is, the smaller the angle1008, the greater an intensity of a diffuse reflection, and the higher the diffuse reflection score associated with the candidate point912. The evaluation of the likelihood of specular and/or diffuse reflections can each be based on, for example, a nominal reflectivity index, as the specific reflectivity of different target objects may vary.

The above process is repeated for each ray, for each candidate point, and for each region such as the lines900. Returning toFIG.8, at block825the device100is configured to determine whether the combined scores of the candidate points evaluated via blocks815and820are above a threshold. For example, the device100can sum all of the diffuse scores from the candidate points, and can sum all of the specular scores from the candidate points, and compare the two sums to respective thresholds (e.g., set empirically). When the determination at block825is affirmative (e.g., for either or both of the specular score sum and the diffuse score sum), the device100can proceed to block440. Otherwise, the device100can proceed to block435. In other examples, the determination at block825can include evaluating the combined score of each individual point from block820against a threshold. If the score of any individual point exceeds the threshold, the determination at block825is affirmative.

Certain expressions may be employed herein to list combinations of elements. Examples of such expressions include: “at least one of A, B, and C”; “one or more of A, B, and C”; “at least one of A, B, or C”; “one or more of A, B, or C”. Unless expressly indicated otherwise, the above expressions encompass any combination of A and/or B and/or C.