Application of fuzzy c-means clustering algorithm for image segmentation
- 作者: Kurbatov D.I., Egorova D.K.
- 期: 卷 7, 编号 10 (2019)
- 栏目: Статьи
- ##submission.dateSubmitted##: 27.01.2025
- ##submission.dateAccepted##: 27.01.2025
- URL: https://ogarev-online.ru/2311-2468/article/view/278168
- ID: 278168
如何引用文章
全文:
详细
Application of fuzzy clustering algorithm with с-means for image analysis is considered in this article. A software implementation of the algorithm in C# is provided.
全文:
Введение. Разбиение изображения на однородные области является ключевым элементом компьютерного (технического) зрения. Для этих целей могут быть использованы методы кластерного анализа, так как они позволяют осуществить сегментацию пикселей на основе сходства по цвету или уровня интенсивности серого.
В работе приведена программная реализация сегментации цветного изображения методом с-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. Результат выполнения алгоритма.
作者简介
D. Kurbatov
编辑信件的主要联系方式.
Email: ogarevonline@yandex.ru
D. Egorova
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).
补充文件
