Как найти кластеры в матрице значений - PullRequest
0 голосов
/ 10 июля 2020

У меня матрица 640х480, которая содержит значения температуры (по тепловизионным изображениям); каждый элемент матрицы представляет собой температуру одного пикселя, например:

[[31.2 30.4 32.5 ... 31.3 31.6 31.7]

 [30.0 37.4 40.5 ... 51.5 52.6 52.7]

 ...

 [28.9 28.8 28.1 ... 31.2 32.4 32.3]]

Я хочу найти кластеры в этой матрице, принимая во внимание:

  • разница температур между двумя элементами ;
  • позиционное расстояние между двумя элементами;

Я попытался сделать это, используя алгоритм кластеризации DBSCAN на массиве, содержащем координаты и значения таких элементов :

coord = [[0 0 31.2]

         [1 0 30.4]

         [2 0 32.5]

         ...

         [638 479 32.4]

         [639 479 32.3]]

Это код:

    X=np.array(coord)

    db = DBSCAN(eps=2, min_samples=2, metric='manhattan').fit(X)

    core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
    core_samples_mask[db.core_sample_indices_] = True
    labels = db.labels_

    n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
    n_noise_ = list(labels).count(-1)


    cluster_dict = {i: X[labels==i] for i in range(n_clusters_)}

Проблема в том, что я получаю большое количество кластеров, а кластеризация неточная (также с разными значениями eps и min_samples). Я хотел бы знать, есть ли более эффективный способ сделать это.

Всем спасибо

...