Вырезание графика выполняется перед тренировкой или в виде постобработки по классификации на основе пикселей - PullRequest
0 голосов
/ 23 января 2019

В настоящее время я выполняю пиксельную классификацию изображения с использованием простых контролируемых классификаторов, реализованных в Scikit-learn.Изображение сначала преобразуется в вектор с интенсивностью в один пиксель, затем обучение и классификация выполняются следующим образом:

from sklearn.linear_model import SGDClassifier

classifier = SGDClassifier(verbose=True)
classifier.fit(training_data, training_target)
predictions = classifier.predict(test_data)

Проблема с классификацией на основе пикселей заключается в зашумленном характере результирующего изображения.секретное изображение.Чтобы предотвратить это, я хотел использовать Graph Cut (например, реализацию Бойкова-Колмогорова), чтобы учесть пространственный контекст между пикселями.Но значения, которые я нашел в Python ( NetworkX , Graph-tool ) и в C ++ (OpenGM и оригинальная реализация: [1] и [2] ) не показывают, как перейти от изображения к графику, за исключением [2], который находится в matlab, и я не очень хорошо знаком ни с Graph Cut, ни с matlab.

Так что мой вопрос в основном состоит в том, как можно интегрировать срезы графиков в предыдущую классификацию (например, перед обучением или в качестве последующей обработки)?

Я взглянул на алгоритмы графов в Scikit-image ( здесь ), но они работают только на изображениях RGB с дискретными значениями, тогда как мои значения пикселей непрерывны.

1 Ответ

0 голосов
/ 02 февраля 2019

Я нашел это учебник по восстановлению изображений , который делает более или менее то, что я искал.Кроме того, вы используете оболочку библиотеки Python ( PyMaxflow ) для вызова алгоритма maxflow для разбиения графика.

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

enter image description here enter image description here

...