Неконтролируемая сегментация изображения на основе локальной двоичной функции и лабораторной функции - PullRequest
0 голосов
/ 03 февраля 2020

данные можно найти здесь: https://data.mendeley.com/datasets/jk4r7vcrtd/1

Моя работа состоит в том, чтобы сегментировать изображение по трем областям: sh, голая земля, мульчирующая пленка с использованием кластеризации.

  1. Я загрузил изображение и затем преобразовал изображение в HSV и лабораторный канал, из которого я использовал h, a, b канал для дальнейшей неконтролируемой кластеризации изображения.
  2. Затем я извлек свойство текстуры из изображения с использованием LBP.
  3. Затем я создал гистограмму h, a, b и лабораторных функций, затем я объединил их, каждая гистограмма имеет 256 бинов, соответствующих пиксельным значениям изображения, чтобы воссоздать изображение.
  4. Проблема в том, что кластеризация не происходит на моем пути, потому что я хочу кластеризовать изображение в 3 кластера. Я хочу, чтобы значения пикселей, соответствующие причине радиуса sh изображения, были кластеризованы и аналогично для голой области земли и для области мульчирующей пленки. 5. Ниже приведен код.
  5. Как улучшить этот алгоритм, чтобы изображение можно было разделить на три отдельные области. используя функцию LBP и h, a, b.
    image = imread("/home/ankit/Downloads/Anil/dieases_detection_crop/datasetB/data/4.jpg")
    lab_image=rgb2lab(image)

    hsv_img = rgb2hsv(image)
    hue_img = hsv_img[:, :, 0]
    value_img = hsv_img[:, :, 2]
    sat_img = hsv_img[:, :, 1]

    l=lab_image[:,:,0]
    a=lab_image[:,:,1]
    b=lab_image[:,:,2]

    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    hist,lbpsingle = describe(2,35,gray)


    (hist_h, _) = np.histogram(hue_img.ravel(),bins=256,range=(hue_img.min(),hue_img.max()))
    (hist_a, _) = np.histogram(a.ravel(),bins=256,range=(a.min(),a.max()))
    (hist_b, _) = np.histogram(b.ravel(),bins=256,range=(b.min(),b.max()))
    (hist_lbp, _) = np.histogram(lbpsingle.ravel(),bins=256,range=(lbpsingle.min(),lbpsingle.max()))


    feature_vect=np.array((hist_h,hist_a,hist_b,hist_lbp))
    feature_vect=feature_vect.flatten()
    vect_dict={}
    kmeans_cluster = cluster.KMeans(n_clusters=3)
    kmeans_cluster.fit(feature_vect.reshape(-1, 1))
    cluster_centers = kmeans_cluster.cluster_centers_
    cluster_labels = kmeans_cluster.labels_
    for i in range(0,256):
        vect_dict[i]=[]
    for i in range(0,1024):
        if i<256:
            vect_dict[i].append(cluster_labels[i])
        elif i<512:
            vect_dict[i-256].append(cluster_labels[i])
        elif i<768:
            vect_dict[i-512].append(cluster_labels[i])
        else:
            vect_dict[i-768].append(cluster_labels[i])



    vect_majority={}
    vect_majority[0]=[]
    vect_majority[1]=[]
    vect_majority[2]=[]

    # for i in vect_dict.keys():
    #     if 1 in vect_dict[i]:
    #         vect_majority[1].append(i)
    #     elif 2 in vect_dict[i]:
    #         vect_majority[2].append(i)
    #     else:
    #         vect_majority[0].append(i)

    for i in vect_dict.keys():
        if max(vect_dict[i])==2:
            vect_majority[2].append(i)
        elif max(vect_dict[i])==1:
            vect_majority[1].append(i)
        else:
            vect_majority[0].append(i)



    end = np.zeros((3000,4000,3))
    end1 = np.zeros((3000,4000,3))
    end2 = np.zeros((3000,4000,3))


    # #data=np.array(random.choices(range(-250,-100),k=36000000)).reshape(3000,4000,3)
    # end = data
    # end1 = data
    # end2 = data


    for i in vect_majority[0]:
        end[np.where(gray==i)]=image[np.where(gray==i)]
    for j in vect_majority[1]:
        end1[np.where(gray==j)]=image[np.where(gray==j)]
    for k in vect_majority[2]:
        end2[np.where(gray==k)]=image[np.where(gray==k)]




    plt.imshow(end1)

    plt.imshow(end2)

    plt.imshow(end3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...