'**SUMMARY**
This function can handle just about whatever you throw at it
and makes a it into a feature. Valid input items are tuples and lists
of x,y points, features, featuresets, two x,y points, and a
set of x,y,width,height values.
**PARAMETERS**
* *x* - this can be just about anything, a list or tuple of x points,
a corner of the image, a list of (x,y) points, a Feature, a FeatureSet
* *y* - this is usually a second point or set of y values.
* *w* - a width
* *h* - a height.
**RETURNS**
Nothing.
**EXAMPLE**
>>> img = Image(\'lenna\')
>>> x,y = np.where(img.threshold(230).getGrayNumpy() > 128 )
>>> roi = ROI(zip(x,y),img)
>>> roi = ROI(x,y,img)'

def __init__(self, x, y=None, w=None, h=None, image=None):

    if isinstance(y, Image):
        self.image = y
        y = None
    elif isinstance(w, Image):
        self.image = w
        w = None
    elif isinstance(h, Image):
        self.image = h
        h = None
    else:
        self.image = image
    if ((image is None) and isinstance(x, (Feature, FeatureSet))):
        if isinstance(x, Feature):
            self.image = x.image
        if (isinstance(x, FeatureSet) and (len(x) > 0)):
            self.image = x[0].image
    if isinstance(x, Feature):
        self.subFeatures = FeatureSet([x])
    elif (isinstance(x, (list, tuple)) and (len(x) > 0) and isinstance(x, Feature)):
        self.subFeatures = FeatureSet(x)
    result = self._standardize(x, y, w, h)
    if (result is None):
        logger.warning('Could    not    create    an    ROI    from    your    data.')
        return
    self._rebase(result)
