1

I get an error when I'm trying to find the 2 circle inner one for pupil and outer one for iris but unable to do so. Firstly I reshape the image then then finding bandwidth to know kernel value then I do segmentation in using mean shift algo after then i marked cluster region in red colour:

    import tkinter as tk
    from tkinter import filedialog
    from PIL import ImageTk,Image
    import numpy as np
    import scipy.ndimage as snd
    from sklearn.cluster import MeanShift, estimate_bandwidth
    from sklearn.datasets.samples_generator import make_blobs
    from itertools import cycle
    from PIL import Image
    import matplotlib.pyplot as plt
    import matplotlib.pylab as pylab
    import cv2
    pylab.rcParams['figure.figsize'] = 16, 12


    root = tk.Tk()
    root.withdraw()

    file_path = filedialog.askopenfilename(initialdir="F:\mean shift\images",title="Open File",filetypes= (("all files","*.*"),("jpg files","*.jpg")))
   
    image = Image.open(file_path)


    image = np.array(image)
    original_shape = image.shape

    # Flatten image.
    X = np.reshape(image, [-1, 3])

    plt.imshow(image)

    bandwidth = estimate_bandwidth(X, quantile=0.1, n_samples=100)
    print(bandwidth)

    ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
    ms.fit(X)

    labels = ms.labels_
    print(labels.shape)
    cluster_centers = ms.cluster_centers_
    print(cluster_centers.shape)

    labels_unique = np.unique(labels)
    n_clusters_ = len(labels_unique)

    print("number of estimated clusters : %d" % n_clusters_)

   segmented_image = np.reshape(labels, original_shape[:2])  # Just take size, ignore RGB channels.
   plt.figure(2)
   plt.imshow(segmented_image)
   plt.axis('off')
   masked_image = np.copy(image)
   # convert to the shape of a vector of pixel values
   masked_image = masked_image.reshape((-1, 3))
   # color (i.e cluster) to disable
   cluster = 2
   masked_image[labels == cluster] = [255, 0, 0]

   # convert back to original shape
   masked_image = masked_image.reshape(image.shape)
   # show the image
   plt.imshow(masked_image)
   nemo = cv2.cvtColor(masked_image, cv2.COLOR_BGR2RGB)
   cv2.imwrite("mean_shift.bmp",nemo)
   plt.show()

Original output

shahriar
  • 11
  • 3
  • What material have you looked up? It's not immediately clear to me what you're asking. Does your code not work properly? – IanQ Nov 11 '20 at 15:49
  • @shahriar without sample input ... and perhaps also some debug render of your output (or screenshots between processing stages) we can not help ... as we simply do not see what you are dealing with and which sub results are good and wrong ... – Spektre Nov 12 '20 at 13:19
  • now i think you can suggest me ..is it okk? ...@Spektre – shahriar Nov 12 '20 at 14:01
  • i want to know the way or code that will detect iris and pupil cluster in two circles@IanQuah – shahriar Nov 12 '20 at 14:02

0 Answers0