У меня матрица 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). Я хотел бы знать, есть ли более эффективный способ сделать это.
Всем спасибо