def meanshiftUsingIntensityAndLocation(path):
    im = cv2.LoadImageM(path, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    #creat a mat from the pixel intensity and its location
    mat = cv2.LoadImageM(path)
    for i in range(0, im.height):
        for j in range(0, im.width):
            value = (im[i, j], i, j)
            mat[i, j] = value

#print mat[i,j]

    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(mat)

    clusters = {}
    for i in range(0, labelsImage.height):
        for j in range(0, labelsImage.width):
            v = labelsImage[i, j]
            if v in clusters:
                clusters[v].append(im[i, j])
            else:
                clusters[v] = [im[i, j]]

    means = {}
    for c in clusters:
        means[c] = sum(clusters[c]) / len(clusters[c])

    for i in range(0, im.height):
        for j in range(0, im.width):
            lbl = labelsImage[i, j]
            im[i, j] = means[lbl]

    print("number of region", numberRegions)
    return im
def meanshiftUsingIntensityAndLocation(path):
    im = cv.LoadImageM(path,cv.CV_LOAD_IMAGE_GRAYSCALE)
    #creat a mat from the pixel intensity and its location
    mat = cv.LoadImageM(path)
    for i in xrange(0,im.height):
        for j in xrange(0,im.width):
            value = (im[i,j], i, j)
            mat[i,j] = value
	    #print mat[i,j]

    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(mat)

    clusters = {}
    for i in xrange(0,labelsImage.height):
        for j in xrange(0,labelsImage.width):
            v = labelsImage[i,j]
            if v in clusters:
                clusters[v].append(im[i,j])
            else:
                clusters[v] =  [im[i,j]]

    means = {}
    for c in clusters:
        means[c] = sum(clusters[c])/len(clusters[c])

    for i in xrange(0,im.height):
        for j in xrange(0,im.width):
            lbl = labelsImage[i,j]
            im[i,j] = means[lbl]

    print "number of region" , numberRegions
    return im
def meanshiftUsingYUV(path):
    im = cv2.LoadImageM(path)
    cv2.CvtColor(im, im, cv2.CV_BGR2YCrCb)
    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
    print("number of region", numberRegions)
    return segmentedImage
def meanshiftUsingRGB(path):
    im = cv2.LoadImageM(path)
    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
    print("number of region", numberRegions)
    return segmentedImage
def meanshiftUsingIntensity(path):
    im = cv2.LoadImageM(path, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
    print("number of region", numberRegions)
    return segmentedImage
def meanshiftUsingYUV(path):
    im = cv.LoadImageM(path)
    cv.CvtColor(im,im,cv.CV_BGR2YCrCb)
    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
    print "number of region" , numberRegions
    return segmentedImage
def meanshiftUsingRGB(path):
    im = cv.LoadImageM(path)
    (segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
    print "number of region" , numberRegions
    return segmentedImage
def meanshiftUsingIntensity(path):
	im = cv.LoadImageM(path,cv.CV_LOAD_IMAGE_GRAYSCALE)
	(segmentedImage, labelsImage, numberRegions) = pms.segmentMeanShift(im)
	print "number of region" , numberRegions
	return segmentedImage