данные можно найти здесь: https://data.mendeley.com/datasets/jk4r7vcrtd/1
Моя работа состоит в том, чтобы сегментировать изображение по трем областям: sh, голая земля, мульчирующая пленка с использованием кластеризации.
- Я загрузил изображение и затем преобразовал изображение в HSV и лабораторный канал, из которого я использовал h, a, b канал для дальнейшей неконтролируемой кластеризации изображения.
- Затем я извлек свойство текстуры из изображения с использованием LBP.
- Затем я создал гистограмму h, a, b и лабораторных функций, затем я объединил их, каждая гистограмма имеет 256 бинов, соответствующих пиксельным значениям изображения, чтобы воссоздать изображение.
- Проблема в том, что кластеризация не происходит на моем пути, потому что я хочу кластеризовать изображение в 3 кластера. Я хочу, чтобы значения пикселей, соответствующие причине радиуса sh изображения, были кластеризованы и аналогично для голой области земли и для области мульчирующей пленки. 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)