Существует набор, состоящий из изображений, примеры которых приведены ниже. Некие "бинарные амёбы".
Данных изображений довольно много, и передо мной стоит
задача: разделить эти изображения на классы. При этом мне надо соблюсти два, казалось бы, противоречивых условия:
1. Классов должно быть как можно больше;
2. "Амёбы" должны максимально сильно друг от друга отличаться по форме.
Как мне это сделать?
Пока удалось выделить только два класса (см. изображение ниже), но этого, наверняка, мало.
Как я это сделал? Нашёл расстояния (функция вычисления расстояния между двумя изображениями ниже) между всеми изображениями, отобрал десяток максимальных расстояний и посмотрел, между какими изображениями эти расстояния были вычислены. Наборы получились все +- одинаковые, как на изображении выше.
def distance(reference: np.array, frame: np.array) -> np.number:
return np.sum((reference - frame)**2) / (W * H)
Т.е. здесь я суммирую квадраты разности значений яркости пикселей[i, j] двух изображений, а затем делю эту сумму на общее количество пикселей изображения (у всех изображений размер одинаковый).