在训练之前或作为基于像素的分类的 post 处理进行的图形切割

Graph cut performed before training or as a post-processing to a pixel-based classification

我目前正在使用 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(例如 Boykov-Kolmogorov 实现)来考虑像素之间的空间上下文。但是,我在 Python (NetworkX, Graph-tool) and in C++ (OpenGM and the original implementation: [1] and [2]) 中发现的实现没有显示如何从图像到图形,除了 [2] 在 matlab 中,我真的不够熟悉Graph Cut和matlab。

所以我的问题基本上是如何将图形切割集成到之前的分类中(例如在训练之前或作为 post-处理)?

我看过 Scikit-image (here) 中的图形算法,但这些算法仅适用于具有离散值的 RGB 图像,而我的像素值是连续的。

我发现这个image restoration tutorial which does more or less what I was looking for. Besides, you use a Python library wrapper (PyMaxflow)调用maxflow算法对图进行分区。

从左边的噪声图像开始,考虑像素之间的空间约束,得到右边的二值图像。