Реализация простейших алгоритмов кластеризации в задачах технического зрения
Скачать 16.52 Kb.
|
Реализация простейших алгоритмов кластеризации в задачах технического зренияЗадание: На любом языке программирования выполнить приведение количества цветов изображения к заданному методом k-средних (k-means). Метод реализовать самостоятельно. Теория: Целью задачи кластеризации является разбиение множества объектов на классы (кластеры) на основе некоторой меры сходства объектов. При кластеризации цветов мерой сходства является близость яркостей пикселей, которую будем оценивать с помощью следующей функции: fi = 30*(Ri-R0)2+59*(Gi-G0)2+11*(Bi-B0)2. Множители 30, 59 и 11 - отражают различную чувствительность человеческого глаза к красному, зеленому и синему цветам соответственно. Мы будем пытаться разбить палитру на N=k кластеров и заменить цвета попавшие в какой-либо кластер центром этого кластера. Стандартным методом решения такой задачи является метод k-средних. Алгоритм метода k-средних Пусть имеем набор векторов xi (i=1p) и k – число кластеров, на которые нужно разбить набор xi. Суть алгоритма заключается в том, чтобы найти k средних mj (j=1k) (центров кластеров) и отнести каждый из векторов xi к одному из k кластеров. Случайным образом выбрать k центров mj (j=1k); Для каждого xi (i=1p подсчитать расстояние до каждого из mj (j=1k); Отнести (приписать) xi к кластеру j расстояние до центра которого mj минимально. (Расстояние между цветами предлагается вычислять по формуле различия цветов, приведенной выше). Пересчитать центры кластеров mj (j=1k) по всем кластерам; Повторять шаги 2, 3 пока кластеры не перестанут изменяться; Пример Пусть имеем 10 точек: 7 5 6 9 11 15 56 45 27 20. Необходимо разбить из на 3 кластера. Выберем 3 центра кластера случайным образом: 6 9 15. Вычисляем расстояния для каждой точки до кластеров и записываем эту точку в ближайший кластер.
Вычисляем расстояния для каждой точки до кластеров и записываем эту точку в ближайший кластер.
Вычисляем расстояния для каждой точки до кластеров и записываем эту точку в ближайший кластер.
Вычисляем расстояния для каждой точки до кластеров и записываем эту точку в ближайший кластер.
Вычисляем расстояния для каждой точки до кластеров и записываем эту точку в ближайший кластер.
Кластеры не изменились, значит можно прекратить итерации. |