Я применяю кластеризацию K-Means к полутоновому изображению и хочу получить цветное изображение, в котором каждый цвет назначается уникальному кластеру.Как я могу это сделать?
Мой код:
import numpy as np
import cv2
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# this not work it show a black image
image = cv2.imread('/Users/myname/Downloads/under1.png')
median = cv2.medianBlur(image,3)
x,y,z = image.shape
xm,ym,zm = median.shape
image1 = median.reshape((median.shape[0]*median.shape[1],3))
# For shapefile
xs, ys, zs = np.meshgrid(
np.linspace(0, 1, xm), # x
np.linspace(0, 1, ym), # y
np.linspace(0, 1, zm) # z
)
data_with_coordinates = np.column_stack([
median.flatten(),
xs.flatten(),
ys.flatten()
])
n_cluster = 4
clt = KMeans(n_clusters=n_cluster)
clt.fit(image1)
cluster_centers = clt.cluster_centers_
cluster_labels = clt.labels_
labels = clt.predict(data_with_coordinates)
x,y,z = image.shape
clustered = (cluster_centers[cluster_labels]).astype(np.uint8).reshape(x, y, z)
plt.imshow(labels.reshape(median.shape))
# vedere i cluster come sono:
cv2.imwrite("ReshapedLabelRaster.png",cluster_labels.reshape(x,y))
plt.imsave('BatimetryClusteredColor' + str(n_cluster) + 'C.png',cluster_labels.reshape(x,y), cmap=plt.cm.nipy_spectral)
plt.show()
РЕДАКТИРОВАТЬ: я пытаюсь использовать ваш код для моего проекта, но я не получаю хорошего результата.
Теперь я попытаюсь понять, возможно ли получить файл формы или изображение с краем между кластерами.