НАХОЖДЕНИЕ ПРЕОБЛАДАЮЩИХ ЦВЕТОВ НА ИЗОБРАЖЕНИЯХ С ИСПОЛЬЗОВАНИЕМ МЕТОДА К-СРЕДНИХ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

НАХОЖДЕНИЕ ПРЕОБЛАДАЮЩИХ ЦВЕТОВ НА ИЗОБРАЖЕНИЯХ С ИСПОЛЬЗОВАНИЕМ МЕТОДА К-СРЕДНИХ

Графов В.И. 1, Воронов В.И. 1
1МТУСИ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
В статье описана реализация программы для определения доминирующих цветов изображения с использованием метода k-средних и библиотеки алгоритмов компьютерного зрения OpenCV с открытым исходным кодом с целью исследования методов кластеризации в рамках подготовки магистерской диссертации. Для реализации данного метода были использованы: операционная система Ubuntu, язык программирования Python, библиотека компьютерного зрения OpenCV и метод кластеризации k-средних.

На сегодняшний день такие задачи, как распознавание образов, сегментация и анализ изображений, являются одними из наиболее актуальных задач и интенсивно развиваемых направлений исследования в области компьютерного зрения.

Сегментация изображений – одна из основных процедур обработки изображений, используемых в робототехнике, медицине, видеонаблюдении, спутниковом мониторинге земной поверхности. Эта процедура является предварительным этапом любой обработки изображений, так как позволяет упростить последующий анализ однородных областей изображения, их яркость и геометрических характеристик[1].

Нахождение преобладающих цветов на изображения может помочь в оценке качества проведённой сегментации изображения.

Метод K-средних

Метод k-средних[2] – это метод кластерного анализа, целью которого является разделение m наблюдений (из пространства Rn) на k кластеров , при этом каждое наблюдение относится к тому кластеру, к центру (центроиду) которого оно ближе всего.

Все пиксели изображения являются исследуемым объектами и описываются как наблюдения - Х в пространстве Rn. Начальными данными считается ряд наблюдений:

Х(j)= (Х(1), Х(2), …, Х(m)), Х(j) ∈ Rn

m – количество наблюдений.

Рисунок 1 – График наблюдений Х в пространстве Rn

В качестве меры близости используется Евклидово расстояние:

,

где ∈ Rn.

Метод k-средних разделяет m наблюдений на k групп (или кластеров) (k ≤ m) S = {S1, S2, …, Sk} , чтобы минимизировать суммарное квадратичное отклонение точек кластеров от центроидов этих кластеров:

,

где ∈ Rn , ∈ Rn .

– центроид кластера Si.

Если мера близости до центроида определена, то разбиение объектов на кластеры сводится к определению центроидов этих кластеров. На первом этапе центроиды кластеров выбираются случайно или по определенному правилу (например, выбрать центроиды, максимизирующие начальные расстояния между кластерами). Относим наблюдения к тем кластерам, чье среднее (центроид) к ним ближе всего.

Центроид каждого i-го кластера перевычисляется по следующему правилу:

.

Алгоритм k-средних заключается в перевычислении на каждом шаге центроида для каждого кластера, полученного на предыдущем шаге.

Алгоритм останавливается, когда значения не меняются:

OpenCV

Библиотека алгоритмов компьютерного зрения, обработки изображений с открытым кодом. Имеет интерфейсы C ++, C, Python и Java и поддерживает Windows, Linux, Mac OS, iOS и Android[3].

Применяется для утверждения общего стандартного интерфейса компьютерного зрения для приложений в этой области.

Нахождение преобладающих цветов на изображения

Для нахождения преобладающих цветов на изображения воспользуемся библиотекой OpenCV и методом k-средних. Библиотека OpenCV на данный момент наилучшим образом оптимизирована под Unixподобные системы.

Выбрана новейшая операционная система Ubuntu Desktop 16.04.1[4]. Операционная система была установлена на компьютер в качестве второй ОС.

Фрагмент кода показывающий подключение необходимых пакетов и библиотек, представлено на рисунке 2.

from sklearn.cluster import KMeans

import matplotlib.pyplot as plt

import argparse

import utils

import cv2

Рисунок 2 – Импорт библиотек

Фрагмент кода, необходимый для инициализации параметров, представлен на рисунке 3, в нашем случае два аргумента: «изображение» - путь до папки, в котором лежит изображение; «кластеры» - количество кластеров, которое мы хотим сгенерировать.

ap.add_argument("-i", "--изображение",required = True)

ap.add_argument("-c", "--кластеры", required = True, type = int)

Рисунок 3 – Инициализация параметров

Важная особенность OpenCV, представление изображения как многомерные массивы NumPy и сохранения изображений в цветах BGR. Для того, чтобы вернуться к стандартному RGB, используем функцию cv2.COLOR_BGR2RGB, фрагмент кода на рисунке 4.

image = cv2.imread(args["image"])

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

Рисунок 4 – Конвертация изображения

Для того, чтобы сгенерировать кластеры необходимо матрицу пикселей преобразовать в вектор пикселей, используем фрагмент кода, представленный на рисунке 5.

image = image.reshape((image.shape[0] * image.shape[1], 3))

Рисунок 5 – Преобразование матрицы в вектор

Для нахождения преобладающих цветов и разбиения их на кластеры, используем фрагмент кода, представленный на рисунке 6, в который подставляется количество кластером, заданное при запуске программы.

clt = KMeans(n_clusters = args["clusters"])

clt.fit(image)

Рисунок 6 – Поиск преобладающих цветов

Для построения гистограммы используется фрагмент кода, представленный на рисунке 7.

def centroid_histogram(clt):

numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)

(hist, _) = np.histogram(clt.labels_, bins = numLabels)

hist = hist.astype("float")

hist /= hist.sum()

Рисунок 7 – Построение гистограммы

Для того, чтобы построить гистограмму необходимо подсчитать количество пикселей, принадлежащих тому или иному кластеру, используем фрагмент кода, представленный на рисунке 8.

def plot_colors(hist, centroids):

bar = np.zeros((50, 300, 3), dtype = "uint8")

startX = 0

for (percent, color) in zip(hist, centroids):

# plot the relative percentage of each cluster

endX = startX + (percent * 300)

cv2.rectangle(bar, (int(startX), 0), (int(endX), 50),

color.astype("uint8").tolist(), -1)

startX = endX

Рисунок 8 – Построение гистограммы

Для проверки нахождение преобладающих цветов на изображения на вход подается изображение. В терминале ОС Ubuntu следует прописать путь изображения и указать количество необходимых кластеров.

В результате на выходе получаем отображение исходного изображения и гистограмму нахождение преобладающих цветов на изображения, результаты работы программы представлены на рисунках 9 и 10.

Рисунок 9 – Результат работы программы

Таким образом, видим, что на рисунке 9 программе было задано выделить три преобладающих цвета, а на рисунке 10 - два цвета.

Рисунок 10 – Результат работы программы

Выводы

На сегодняшний день задачи компьютерного зрения являются одними из самых актуальных в информационном обществе. Библиотеку OpenCV с каждым днём используют всё больше людей. В данной статье рассмотрен метод k-средних, использующийся для кластеризации, описана реализация нахождения преобладающих цветов на изображение. В результате работы программа отображает исходное изображение и гистограмму нахождение преобладающих цветов на изображения.

Список источников и литературы

  1. Вежневец В. Введение в компьютерное зрение: Курс лекций / Вежневец В., Конушин А., Вежневец А.— М.: МГУ, 2006.

  2. https://nlp.stanford.edu/IR-book/html/htmledition/k-means-1.html

  3. https://opencv.org/

  4. ОС Ubuntu: http://ubuntu.ru/

  5. Онлайн-курсы: https://www.coursera.org

Просмотров работы: 322