Применение нечеткого алгоритма кластеризации с-means для сегментации изображений
- Авторы: Курбатов Д.И., Егорова Д.К.
- Выпуск: Том 7, № 10 (2019)
- Раздел: Статьи
- Статья получена: 27.01.2025
- Статья одобрена: 27.01.2025
- URL: https://ogarev-online.ru/2311-2468/article/view/278168
- ID: 278168
Цитировать
Полный текст
Аннотация
В статье рассматривается применение нечеткого алгоритма кластеризации с-means для анализа изображений. Приведена программная реализация алгоритма на языке С#.
Ключевые слова
Полный текст
Введение. Разбиение изображения на однородные области является ключевым элементом компьютерного (технического) зрения. Для этих целей могут быть использованы методы кластерного анализа, так как они позволяют осуществить сегментацию пикселей на основе сходства по цвету или уровня интенсивности серого.
В работе приведена программная реализация сегментации цветного изображения методом с-means, относящегося к методам «мягкой» кластеризации и позволяющего более точно вычислить принадлежность элемента кластеру. Этот алгоритм успешно используется для кластеризации изображений и неконтролируемой сегментации медицинских, геологических, спутниковых изображений и т.п. [1].
Описание алгоритма. Нечеткий алгоритм кластеризации с-means был разработан (для случая m=2) J. C. Dunn в 1973 г. и усовершенствован (для случая m>2) J. C. Bezdek в 1981 г. Данный метод предполагает, что входные данные могут принадлежать более чем одному кластеру одновременно, то есть первоначально для каждого вектора, описывающего исследуемый объект, случайным образом определяется вероятность принадлежности заданным кластерам. Алгоритм получает на входе набор кластеризуемых векторов, количество кластеров, коэффициент неопределенности и коэффициент > 0, определяющий точность алгоритма. Затем запускается итерационный процесс, состоящий в выполнении следующей последовательности действий: 1) расчет центров кластеров; 2) расчет расстояния от каждого вектора до центра каждого кластера; 3) расчет и нормализация коэффициентов принадлежности векторов кластерам; 4) расчет значения матрицы нечеткого разбиения и сравнение этого значения со значением матрицы нечеткого разбиения на предшествующей итерации. На выходе получают матрицу вероятностей принадлежности каждого входного вектора каждому кластеру.
Таким образом, нечеткий алгоритм c-means минимизирует величину
где m∈ R, – коэффициент принадлежности вектора кластеру , i-ый компонент |X|-мерного вектора X, C – количество кластеров, – центр j-ого кластера, а || ∗ ||– норма, определяющая расстояние от вектора до центра кластера. Нечеткое разбиение входных данных на кластеры производится итеративной оптимизацией функции (1), пересчетом коэффициентов принадлежности и переопределением центров кластеров . [2]
Вычисляемые величины. На каждой итерации вычисляются следующие величины.
- Центры кластеров:
где – коэффициент принадлежности вектора к кластеру .
- Коэффициент принадлежности:
- Решающая функция:
где k – номер итерации алгоритма.
4.Проверка завершения итерационного процесса.
Реализация алгоритма. Далее приведена программная реализация алгоритма с-means для сегментации цветных изображений на языке С# в программной среде VisualStudio 2017 [3].
Графический интерфейс представлен на рисунке 1. Для загрузки сегментируемого изображения предусмотрено меню «File».
Рис. 1. Графический интерфейс.
Параметры, доступные для изменения, приведены в правой верхней части интерфейса программы – это количество кластеров, максимальное количество итераций и точность.
При активации «Fuzzy C-means Clustering» запускается процесс создания точечных объектов кластера для каждого пикселя изображения (см. код, приведенный ниже).
List<ClusterPoint> points = new List<ClusterPoint>();
for (int row = 0; row < originalImage.Width; ++row)
{
for (int col = 0; col < originalImage.Height; ++col)
{
Color c2 = originalImage.GetPixel(row, col);
points.Add(new ClusterPoint(row, col, c2));
}
}
Затем создается заданное количество «ClusterCentroid» объектов кластера. Центры кластеров (или центроиды) на первой итерации выбираются случайным образом и корректируются алгоритмом (см. код).
List<ClusterCentroid> centroids = newList<ClusterCentroid>();
//Create random points to use a the cluster centroids
Random random = new Random();
for (int i = 0; i < numClusters; i++)
{
int randomNumber1 = random.Next(sourceImage.Width);
int randomNumber2 = random.Next(sourceImage.Height); centroids.Add(new ClusterCentroid(randomNumber1,randomNumber2,
filteredImage.GetPixel(randomNumber1, randomNumber2)));
}
Далее создается FCM-объект и запускаются итерации (см. код).
FCM alg = new FCM(points, centroids, 2, filteredImage,(int)numericUpDown2.Value);
k++;
alg.J = alg.CalculateObjectiveFunction();
alg.CalculateClusterCentroids();
alg.Step();
double Jnew = alg.CalculateObjectiveFunction();
Console.WriteLine("Run method i={0} accuracy = {1} delta={2}",
k, alg.J, Math.Abs(alg.J - Jnew));
backgroundWorker.ReportProgress((100 * k) / maxIterations, "Iteration " + k);
if (Math.Abs(alg.J - Jnew) < accuracy) break;
После завершения итераций алгоритм выполняет процесс построения результирующего изображения, назначая каждый пиксель кластеру, для которого он имеет наибольший коэффициент принадлежности.
Для тестового примера было выбрано изображение, представленное на рисунке 2. Сегментация осуществлялась на 2 кластера.
Рис. 2. Исходное изображение.
Результирующее изображение представлено на рисунке 3.
Рис.3. Результат выполнения алгоритма.
Об авторах
Д. И. Курбатов
Автор, ответственный за переписку.
Email: ogarevonline@yandex.ru
Д. К. Егорова
Email: ogarevonline@yandex.ru
Список литературы
- Jain A. K. Data clustering: 50 years beyond K-means // Pattern Recognition Letters. – 2010. – Vol. 31. – Р. 651–666.
- Барсегян А. А., Куприянов М. С., Холод И. И., Тесс М. Д., Елизаров С. И. Анализ данных и процессов: учеб. пособие / под ред. А. А. Барсегян. – 3-е изд., перераб. и доп. – СПб.: БХВ–Петербург, 2009. – 512 с.
- Gauge C. Cluster analysis [Электронный ресурс]. – Режим доступа: https://ru.scribd.com (дата обращения 08.05.2019).
