Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
USING LUMINANCE DISTRIBUTIONS TO DETECT BEST AREAS OF AN IMAGE FOR PREDICTION OF NOISE LEVELS
Document Type and Number:
WIPO Patent Application WO/2022/099121
Kind Code:
A1
Abstract:
An image processing apparatus and method are provided whereby one or more memories stores instructions which, when executed by one or more processors configures the one or more processors to perform operations including obtaining image data stored in memory of a processing device, defining one or more regions of the image to be processed based on luminance values of the region, providing, as input data, the one or more defined regions of the image to an classifier that has been trained to use image data to estimate noise in an image to output a prediction that the input data is in a first class or a second class, calculating an average by predicted class, and labeling the obtained image as the first class or second class based on the calculated average.

Inventors:
GUYDUY YEVGENIY GENNADIY (US)
Application Number:
PCT/US2021/058433
Publication Date:
May 12, 2022
Filing Date:
November 08, 2021
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
CANON USA INC (US)
International Classes:
G06T5/00; G06K9/62; G06T7/11; G06T7/187; G06T7/90
Foreign References:
US20200226744A12020-07-16
US7813583B22010-10-12
JP4463341B22010-05-19
Other References:
JUNNAN LI; CAIMING XIONG; RICHARD SOCHER; STEVEN HOI: "Towards Noise-resistant Object Detection with Noisy Annotations", ARXIV.ORG, CORNELL UNIVERSITY LIBRARY, 201 OLIN LIBRARY CORNELL UNIVERSITY ITHACA, NY 14853, 3 March 2020 (2020-03-03), 201 Olin Library Cornell University Ithaca, NY 14853 , XP081613373
XU RUIFENG; WEN ZHIYUAN; GUI LIN; LU QIN; LI BINYANG; WANG XIZHAO: "Ensemble with estimation: seeking for optimization in class noisy data", INTERNATIONAL JOURNAL OF MACHINE LEARNING AND CYBERNETICS, SPRINGER BERLIN HEIDELBERG, BERLIN/HEIDELBERG, vol. 11, no. 2, 12 June 2019 (2019-06-12), Berlin/Heidelberg, pages 231 - 248, XP036995898, ISSN: 1868-8071, DOI: 10.1007/s13042-019-00969-8
Attorney, Agent or Firm:
BUCHOLTZ, Jesse et al. (US)
Download PDF:
Claims:
CLAIMS

1. An image processing method comprising: obtaining image data stored in memory of a processing device; defining one or more regions of the image to be processed based on luminance values of the region; providing, as input data, the one or more defined regions of the image to an classifier that has been trained to use image data to estimate noise in an image to output a prediction that the input data is in a first class or a second class; calculating an average by predicted class; and labeling the obtained image as the first class or second class based on the calculated average.

2. The image processing method of claim 1, further comprising dividing the obtained image data into predetermined segments of image data; and wherein the defining of one or more regions of the image is performed within each of the predetermined segments.

3. The image processing method of claim 2, further comprising providing, as the input data, one or more defined regions in each of the predetermined segments to the classifier to output predictions for each of the one or more defined regions in each of the segments; and calculating the average by predicted class across all of the predetermined segments to generate the label for the image.

4. The image processing method of claim 1, further comprising defining one or more regions of the image to be processed based on luminance values of the region by subtracting each value of a determined luminance array of the image from a central luminance value to identify a central point around which a respective one of the one or more regions is defined.

5. The image processing method of claim 4, further comprising generating a bounding box having a predetermined size having the identified central point at a center; and providing the image data within the generated bounding box to the classifier.

6. The image processing method of claim 4, wherein the central luminance value is a luminance value closest to a median luminance value of the image.

7. The image processing method of claim 1, further comprising outputting, on a display, the obtained image including the label.

8. An image processing apparatus comprising: one or more memories having instructions stored therein; and one or more processors that, upon executing the stored instructions, configures the one or more processors to perform the following operations: obtaining image data stored in memory of a processing device; defining one or more regions of the image to be processed based on luminance values of the region; providing, as input data, the one or more defined regions of the image to an classifier that has been trained to use image data to estimate noise in an image to output a prediction that the input data is in a first class or a second class; calculating an average by predicted class; and labeling the obtained image as the first class or second class based on the calculated average.

9. The image processing apparatus of claim 8, wherein execution of the stored instructions further configures the one or more processors to perform operations including dividing the obtained image data into predetermined segments of image data; and wherein the defining of one or more regions of the image is performed within each of the predetermined segments.

10. The image processing apparatus of claim 9, wherein execution of the stored instructions further configures the one or more processors to perform operations including providing, as the input data, one or more defined regions in each of the predetermined segments to the classifier to output predictions for each of the one or more defined regions in each of the segments; and calculating the average by predicted class across all of the predetermined segments to generate the label for the image.

11. The image processing apparatus of claim 8, wherein execution of the stored instructions further configures the one or more processors to perform operations including defining one or more regions of the image to be processed based on luminance values of the region by subtracting each value of a determined luminance array of the image from a central luminance value to identify a central point around which a respective one of the one or more regions is defined.

12. The image processing apparatus of claim 11, wherein execution of the stored instructions further configures the one or more processors to perform operations including generating a bounding box having a predetermined size having the identified central point at a center; and providing the image data within the generated bounding box to the classifier.

13. The image processing apparatus of claim 11, wherein

14 the central luminance value is a luminance value closest to a median luminance value of the image.

14. The image processing apparatus of claim 8, wherein execution of the stored instructions further configures the one or more processors to perform operations including outputting, on a display, the obtained image including the label.

15

Description:
TITLE

Using Luminance Distributions to Detect Best Areas of an Image for Prediction of Noise Levels

CROSS-REFERENCE TO RELATED APPLICATIONS

[0001] This application claims the benefit of priority from US Provisional Patent Application Serial No. 63/111273 filed on November 9, 2020, the entirety of which is incorporated herein by reference.

BACKGROUND

Field

[0002] The present disclosure describes an improved technique for predicting noise images using convolutional neural network from areas selected using luminance range map.

Description of Related Art

[0003] After photographs are taken photographers often examine images for various quality aspects. One common image quality metric is noise. By reviewing the noise that appears in an image it is decided whether the image is of good quality and is a candidate for printing or to be kept, or if that image needs additional post processing or should be deleted.

[0004] One manner in which noise is detected or determined centers around detection of noise in very noisy images where noise typically appears universally thought out the image. Various methods exist including median or mean sliding windows or differential gradient estimations. Other methods include detection and de-noising of images using convolutional neural networks Most of these methods perform relatively well on images with very high levels of noise where it also often appears universally thought out the image. Most methods listed above are also focused on detection of artificial type of noise that can be modelled artificially such as Gaussian, log-normal, uniform, exponential, Poisson, salt and pepper, Rayleigh, speckle and Erlang By experimenting with internal real world images it has been found that artificial noise does not represent noise that’s typically embedded in the image at the time of capture and, often times, is not found universally throughout the image. Additionally, depending on the type of camera used, noise in images can follow different distribution patterns. Another drawback associated with some of the aforementioned noise detection techniques is that given processing speed requirements they are typically performed using resized images. However, the same experimentation using real world images have showed that resizing of images greatly reduces or completely destroys image noise making prediction less accurate or impossible. One viable solution which has shown to remedy above shortcomings is to use targeted crop or multiple crops where noise is most likely to be present from original non resized image. The present disclosure remedies the above drawbacks

SUMMARY

[0005] According to an embodiment, an apparatus and method that is provided that includes one or more processors; and one or more memories storing instructions that, when executed, configures the one or more processors, to determine and identify one or more best segments within images for input to a trained classifier trained to estimate noise based on data collected from various mobile and DSLR camera devices and estimate and obtain an area within images for prediction of noise and predicts whether the image is noisy or non-noisy based on identified area.

[0006] An image processing apparatus and method are provided whereby one or more memories stores instructions which, when executed by one or more processors configures the one or more processors to perform operations including obtaining image data stored in memory of a processing device, defining one or more regions of the image to be processed based on luminance values of the region, providing, as input data, the one or more defined regions of the image to an classifier that has been trained to use image data to estimate noise in an image to output a prediction that the input data is in a first class or a second class, calculating an average by predicted class; and labeling the obtained image as the first class or second class based on the calculated average.

[0007] In other embodiments, the apparatus and method are further configured to perform operations including dividing the obtained image data into predetermined segments of image data, and wherein the defining of one or more regions of the image is performed within each of the predetermined segments. [0008] In other embodiments, the apparatus and method are further configured to perform operations including providing, as the input data, one or more defined regions in each of the predetermined segments to the classifier to output predictions for each of the one or more defined regions in each of the segments, and calculating the average by predicted class across all of the predetermined segments to generate the label for the image.

[0009] In a further embodiment, the apparatus and method are further configured to perform operations including defining one or more regions of the image to be processed based on luminance values of the region by subtracting each value of a determined luminance array of the image from a central luminance value to identify a central point around which a respective one of the one or more regions is defined and generating a bounding box having a predetermined size having the identified central point at a center; and providing the image data within the generated bounding box to the classifier. In some instances, the central luminance value is a luminance value closest to a median luminance value of the image

[0010] These and other objects, features, and advantages of the present disclosure will become apparent upon reading the following detailed description of exemplary embodiments of the present disclosure, when taken in conjunction with the appended drawings, and provided claims.

BRIEF DESCRIPTION OF THE DRAWINGS

[0011] Fig. 1 is flow diagram of an image scoring algorithm of the present disclosure.

[0012] Fig. 2 is flow diagram of an image scoring algorithm of the present disclosure.

[0013] Fig. 3 is flow diagram of an image scoring algorithm of the present disclosure.

[0014] Fig. 4 is flow diagram of an image scoring algorithm of the present disclosure.

[0015] Fig. 5 is flow diagram of an image scoring algorithm of the present disclosure.

[0016] Fig. 6 is a graphical representation of luminance distributions in an exemplary image processed according to the algorithm of the present disclosure.

[0017] Fig. 7 is a schematic representation of the algorithm of the present disclosure.

[0018] Fig. 8 is an illustrative view of the selection of the an area in an image according to the present disclosure.

[0019] Figs 9A - 9K illustrate an exemplary model for use by the algorithm according to the present disclosure

[0020] Figs. 10A - 10F provide data comparing the algorithm according to the present disclosure with other estimation results.

[0021] Figs. 11A - 11B illustrate accuracy of the image scoring algorithm of the present disclosure.

[0022] Figs. 12A - 12B are an illustrative view of the image scoring algorithm of the present disclosure.

[0023] Fig. 13 is a block diagram detailing the hardware components of the unmanned autonomous vehicle.

[0024] Throughout the figures, the same reference numerals and characters, unless otherwise stated, are used to denote like features, elements, components or portions of the illustrated embodiments. Moreover, while the subject disclosure will now be described in detail with reference to the figures, it is done so in connection with the illustrative exemplary embodiments. It is intended that changes and modifications can be made to the described exemplary embodiments without departing from the true scope and spirit of the subject disclosure as defined by the appended claims.

DETAILED DESCRIPTION

[0025] Throughout the figures, the same reference numerals and characters, unless otherwise stated, are used to denote like features, elements, components or portions of the illustrated embodiments. Moreover, while the subject disclosure will now be described in detail with reference to the figures, it is done so in connection with the illustrative exemplary embodiments. It is intended that changes and modifications can be made to the described exemplary embodiments without departing from the true scope and spirit of the subject disclosure as defined by the appended claims.

[0026] Exemplary embodiments of the present disclosure will be described in detail below with reference to the accompanying drawings. It is to be noted that the following exemplary embodiment is merely one example for implementing the present disclosure and can be appropriately modified or changed depending on individual constructions and various conditions of apparatuses to which the present disclosure is applied. Thus, the present disclosure is in no way limited to the following exemplary embodiment and, according to the Figures and embodiments described below, embodiments described can be applied/performed in situations other than the situations described below as examples.

[0027] The present disclosure describes an improved technique for predicting noise images using convolutional neural network from areas selected using luminance range map. The present disclosure advantageously improves what is conventionally a manual process by providing a technique that takes into account specifics of spatial noise distribution in an image in order to estimate and obtain the best area for prediction of noise in an image and predict image as noisy or non noisy based on patch identified.

[0028] FIG. 1 shows a photo scoring system and algorithm for scoring images based on detected noise. An image capture device is shown in 102. The image capture device 102 may be a camera or other device that has a camera integral therewith such as a smartphone. The image capture device 102 includes processing circuitry and optical elements to capture images thereon and store the capture images in a storage of device 102. In other embodiments, the device 102 may be an image repository such as a cloud storage whereby previously captured images are stored and from where those images can be retrieved for further image processing according to the algorithms described herein. Estimation apparatus 104 is provided and receives images that have been captured by device 102. The estimation apparatus 104 includes one or more processors that execute stored instructions for performing estimation processing that estimates noise in the image being processed and then assigns a quality score to the image based on the result of the estimation processing. A display 106 is provided such that the quality score indicator is controlled to be displayed on display 106. This provides a visual representation of a quality of an image based on the estimated noise contained therein.

[0029] The estimation apparatus 104 in Fig. 1 performs noise estimation using a trained machine learning model that is trained to generate a binary classifier that can successfully be used to evaluate images. The process for obtaining the trained classifier is illustrated in the training algorithm of FIG. 2. At 200, the training processing for training a classifier in order to be able to predict noise in an image is initiated. In step 202, a set of labeled training images are obtained. The labeled training images includes a plurality of images labeled as noisy and images labeled as non-noisy. These training images serve as the basis for the classifier to be trained. In step 204, bounding boxes are obtained with X & Y coordinates in noisy images in order to focus only on noisy parts of the particular training image being processed. These labeled training images are labeled by experts in the field. In step 206, all areas of non-noisy images and bounding boxes of noisy images are cropped into non overlapping image segments (e.g. patches) of predetermined size which are then fed into classifier. Each patch is then relabeled according to its class: noisy or non-noisy. The cropping step is performed to improve the training process because, while machine learning networks (e.g. neural networks) are typically trained on resized images for speed, the benefits problems such as object recognition and others where an original size image can represent similar features as a resized one. With noise this is not the case. As such, the present step crops as many images as possible out of noisy and non noisy labeled areas for as much non resized training material as possible. In step 208, the classifier is built using the training data output from 206. The classifier uses transfer-learning technique and consist of first 28 layers I first 2 blocks of a pre trained on model having a global average pooling layer and a dense layer with 2 softmax units added in order to allow the model to classify between two classes. Since in most cases noise is random the first few blocks of the model were able to use a predetermined number of layers of a previously trained model to use high level features learned previously to estimate noise. All other layers past the predetermined layer number were discarded. In one embodiment, the first 28 layers of the previously trained model were used with all layers beyond layer 28 being discarded. Thereafter, the training process unfreezes all batch normalization layers (technique, which thru experimentation has proved to increase model accuracy) and last added layers described above for training what is at this stage is a fully convolutional classifier which is then stored in step 210. The stored classifier is then used by the estimation apparatus 104 to evaluate images for noise as described below. FIGS 9 shows final layout of the model. FIG 11A and 11B shows the accuracy resulting from the difference in training only last added layers (Fig. 11 A) vs training last added layers and batch normalization layers only with everything else frozen (Fig. 1 IB):

[0030] As can be seen in Figs. 11A and 1 IB, the resulting accuracy from the trained model according to Fig. 2 which includes the batch normalization (Fig. 1 IB) results in an accuracy that is higher than that of the model without the batch normalization (Fig. 11 A) based on two confusion matrixes with Fig 11B showing less false positive and false negatives when compare to Fig 11 A. Additional training and testing accuracy curves show more stable patterns in Fig 11B vs Fig 11 A, which gives more confidence in stability of predictions due to lower variation in error.

[0031] In order to improve the ability to classify an image as noisy or non-noisy, the algorithm advantageously segments the image to be processed to identify subsections of the image which are the best segments of that image to detect noise. FIG 3 illustrates an algorithm detailing the processing for discovery and estimation of a best area in an image to processed in order to detect noise in that image. In step 300 a set of images to be processed for noise detection are obtained. In one embodiment, these images are obtained from a storage of an image capture device or a mobile computing device (e.g. smart phone). In another embodiment, the images obtained are selected via an application executing on a processing apparatus that has access to a storage having images stored therein. In step 302, bounding boxes for segments (or patches) of the image which are noisy areas are selected and saved. In step 304, luminance of resulting crops is estimated by reading image in as a 3 dimensional array and taking a dot product of 3 dimensions (Red, Green and Blue channels of image) values, creating a 1 dimensional array shown in Table 1.

[R array, G array, B array].dot([0.2126, 0.7152, 0.0722]) Table 1

[0032] In step 306, calculation is performed to obtain a distribution of all pixel values from resulting array. This distribution produced with bins ranging from 1 to 255 representative of all pixel values. In step 308, normalization of the distribution is performed by dividing each pixel value bin count by the total count of all the values creating a probability density function distribution. An example of these steps can be seen below implemented using Python programming language: import scipy. ndimage as ndi import matplotlib.pyplot as pit img = pit. imread( “image. jpeg ”) luminance = img.astype(float).dot([0.2126, 0.7152, 0.0722]) hist = ndi.histogram(luminance, min = 0, max=255, bins=256 ) pdf = hist/hist.sum() [0033] The results of the normalization of all patches (noisy and non-noisy) are saved in memory to a table and steps above are repeated for all samples in dataset. In step 310, an average of values in each resulting bin /row is calculated and in step 312, using cumulative sum calculation, a central point is estimated for all values resulting from step 306. FIG 7 shows overall schematics for this process whereby the bins for each pixel value is generated in 306 and, for each row, the average value is calculated and then a cumulative sum is obtained which identifies the pixel as a central pixel for an noise evaluation area.

[0034] FIG 6 showcases investigation of this approach and validity of such by showing significant difference in luminance distributions between noisy and non noisy image patches. FIG 10A - 10F shows performance of model on an internal validation dataset and validates better accuracy of model using areas of an image identified by the luminance maps approach outlined above vs other approaches one may use to extract areas from an image to detect noise. Across all different sampling methods above method significantly outperformed all other methods judging by weighted average precision, recall and fl score metrics which showcase quality of model with higher numbers resulting in better model

[0035] FIG 4 illustrates the overall flow for obtaining the best patch of a particular image for evaluating noise in the image using a luminance range identified in Fig. 3. In step 400, an image is obtained and luminance of the image is calculated as described above in Fig. 3 to obtain the array. In step 402, the resulting array is divided into four quadrants. In step 404, an array with values closest to a central value of noisy luminance range distribution is produced by subtracting each value in an image’s luminance array by a central noise value as output from Fig. 3 and returning absolute value of calculation for each quarter. In step 406, a first pair of X and Y coordinates corresponding to value found to be closest to a center value of noise distribution are obtained using methods similar to code snippet below implemented in Python programming language:

Import numpy num = Z # pixel value to find x = numpy.where(abs(luminance-num)==abs(luminance-num).minO)[0][ 0] # X coordinate y = numpy.where(abs(luminance-num)==abs(luminance-num).minO)[l][ 0] #Y coordinate [0036] In step 408, a bounding box of predetermined size having the above determined (x,y) coordinate at its center is generated and cropped for each quarter. This operation is illustrated in Fig. 8 shows overall layout of described method. The size of the bounding box depends on the particular application and desired processing speed. In one embodiment, the size may be greater than 200 x 200 pixels. In another embodiment, the bounding box size may be 224 x 224 pixels or 256 x 256 pixels. As such, if the network was train

[0037] Now that the luminance values have been obtained and segments of the image being analyzed are defined by the bounding boxes described in Fig. 4, we can realize the noise estimation processing algorithm as shown in Fig. 5. In step 500 the cropped bounding boxes of predetermined size as generated in Fig. 4 are obtained for each quadrant of the image. In step 502, image data contained within the cropped bounding boxes are provided as input to the binary classifier which was trained as described in Fig. 2. In step 504, the trained classifier processes the image data provided as input to obtain a probability that the image data within the cropped region belong to a first class indicative of noise or a second class indicative of non-noise. In step 506, probability results defining each cropped area provided as input to the trained classifier are saved in memory. Steps 500 - 506 are then repeated for cropped regions in other quadrants. Once all quadrants are processed, an average of the saved probability results are obtained and, if the average exceeds a predetermined threshold, a label indicating whether the image is noisy or non- noisy is provided. The final label for the image is obtained based on optimal probability threshold calculated and estimated using ROC AUC curve and its highest point where the optimal cut off represents the highest true positive and the lowest false positive rates. [0038] FIG 12A - 12B illustrates the overall processing described in Fig. 5. An image 1200 is segmented into four quadrants labeled QI, Q2, Q3 and Q4. Image data in each of QI - Q4 are analyzed based on luminance values determined in Fig. 3 that identify regions that would yield an instructive result regarding the noise of the image. A segment labeled “BEST AREA” is identified for analysis. While a single segment is shown in Fig. 12A, it should be understood that any number of segments within each one or QI - Q4 may be generated based on the pixel value determined to be the central pixel value in the manner discussed above. This processing is repeated for each of QI -Q4 to identify one or more best areas 1210 in Fig. 12B in the image. Image data within each area in the quadrants determined to be a “BEST AREA” is input to the classifier 1215 which generates and stores in memory the prediction 1220 of classification based on the classification of the respective image data of the particular best area input to classifier 1215. The stored prediction values are averaged by the predicted class via an averaging circuit 1225 and based on the average, a final score identifying whether the image belongs to a first class representing noise or a second class representing non-noise is assigned by comparing the average to a threshold.

[0039] Figure 13 illustrates the hardware of an apparatus that can be used in implementing the above described disclosure. The apparatus 1302 includes a CPU 1304, a RAM 1306, a ROM 1308, an input unit 1310, an external interface 1312, and an output unit 1314. The CPU 1304 controls the apparatus 1302 by using a computer program (one or more series of stored instructions executable by the CPU) and data stored in the RAM 1306 or ROM 1308. Here, the apparatus may include one or more dedicated hardware or a graphics processing unit (GPU), which is different from the CPU 1304, and the GPU or the dedicated hardware may perform a part of the processes by the CPU 1304. As an example of the dedicated hardware, there are an application specific integrated circuit (ASIC), a field- programmable gate array (FPGA), and a digital signal processor (DSP), and the like. The RAM 1306 temporarily stores the computer program or data read from the ROM 1308, data supplied from outside via the external interface 1312, and the like. The ROM 1308 stores the computer program and data which do not need to be modified and which can control the base operation of the apparatus. The input unit 1310 is composed of, for example, a joystick, a jog dial, a touch panel, a keyboard, a mouse, or the like, and receives user's operation, and inputs various instructions to the CPU 1304. The external interface 1312 communicates with external device such as PC, smartphone, camera and the like. The communication with the external devices may be performed by wire using a local area network (LAN) cable, a serial digital interface (SDI) cable, WIFI connection or the like, or may be performed wirelessly via an antenna. The output unit 1314 is composed of, for example, a display unit such as a display and a sound output unit such as a speaker, and displays a graphical user interface (GUI) and outputs a guiding sound so that the user can operate the apparatus as needed.

[0040] The scope of the present invention includes a non-transitory computer-readable medium storing instructions that, when executed by one or more processors, cause the one or more processors to perform one or more embodiments of the invention described herein. Examples of a computer- readable medium include a hard disk, a floppy disk, a magneto-optical disk (MO), a compact-disk read-only memory (CD-ROM), a compact disk recordable (CD-R), a CD-Rewritable (CD-RW), a digital versatile disk ROM (DVD-ROM), a DVD-RAM, a DVD-RW, a DVD+RW, magnetic tape, a nonvolatile memory card, and a ROM. Computer-executable instructions can also be supplied to the computer-readable storage medium by being downloaded via a network.

[0041] The use of the terms “a” and “an” and “the” and similar referents in the context of this disclosure describing one or more aspects of the invention (especially in the context of the following claims) are to be construed to cover both the singular and the plural, unless otherwise indicated herein or clearly contradicted by context. The terms “comprising,” “having,” “including,” and “containing” are to be construed as open-ended terms (i.e., meaning “including, but not limited to,”) unless otherwise noted. Recitation of ranges of values herein are merely intended to serve as a shorthand method of referring individually to each separate value falling within the range, unless otherwise indicated herein, and each separate value is incorporated into the specification as if it were individually recited herein. All methods described herein can be performed in any suitable order unless otherwise indicated herein or otherwise clearly contradicted by context. The use of any and all examples, or exemplary language (e.g., “such as”) provided herein, is intended merely to better illuminate the subject matter disclosed herein and does not pose a limitation on the scope of any invention derived from the disclosure unless otherwise claimed. No language in the specification should be construed as indicating any non-claimed element as essential.

[0042] It will be appreciated that the instant disclosure can be incorporated in the form of a variety of embodiments, only a few of which are disclosed herein. Variations of those embodiments may become apparent to those of ordinary skill in the art upon reading the foregoing description. Accordingly, this disclosure and any invention derived therefrom includes all modifications and equivalents of the subject matter recited in the claims appended hereto as permitted by applicable law. Moreover, any combination of the above-described elements in all possible variations thereof is encompassed by the disclosure unless otherwise indicated herein or otherwise clearly contradicted by context.