我的问题是我得到了一组图片并且需要对它们进行分类。
问题是,我对这些图像一无所知。因此,我计划使用尽可能多的描述符,然后对这些描述符进行 PCA,以仅识别对我有用的描述符。
如果有帮助的话,我可以对很多数据点进行监督学习。但是,图片有可能相互连接。这意味着可能存在从图像 X 到图像 X+1 的发展,尽管我有点希望这可以通过每个图像中的信息进行整理。
我的问题是:
- 使用 Python 时如何做到最好?(我想首先在速度不是问题的情况下进行概念验证)。我应该使用哪些库?
- 是否已经有此类图像分类的示例?使用一堆描述符并通过 PCA 将它们煮熟的示例?老实说,这部分对我来说有点吓人。虽然我认为 python 应该已经为我做了这样的事情。
编辑:我找到了一个整洁的工具包,我目前正在为此尝试:http ://scikit-image.org/那里似乎有一些描述符。有没有办法进行自动特征提取并根据特征对目标分类的描述能力对特征进行排名?PCA 应该能够自动排名。
编辑 2:我的数据存储框架现在更加完善了。我将使用 Fat 系统作为数据库。我将为类组合的每个实例创建一个文件夹。因此,如果图像属于 1 类和 2 类,则会有一个包含这些图像的文件夹 img12。这样我可以更好地控制每个班级的数据量。
编辑3:我找到了一个python库(sklearn)的例子,它可以做我想做的事情。它是关于识别手写数字。我正在尝试将我的数据集转换为我可以使用的东西。
这是我使用 sklearn 找到的示例:
import pylab as pl
# Import datasets, classifiers and performance metrics
from sklearn import datasets, svm, metrics
# The digits dataset
digits = datasets.load_digits()
# The data that we are interested in is made of 8x8 images of digits,
# let's have a look at the first 3 images, stored in the `images`
# attribute of the dataset. If we were working from image files, we
# could load them using pylab.imread. For these images know which
# digit they represent: it is given in the 'target' of the dataset.
for index, (image, label) in enumerate(zip(digits.images, digits.target)[:4]):
pl.subplot(2, 4, index + 1)
pl.axis('off')
pl.imshow(image, cmap=pl.cm.gray_r, interpolation='nearest')
pl.title('Training: %i' % label)
# To apply an classifier on this data, we need to flatten the image, to
# turn the data in a (samples, feature) matrix:
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))
# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)
# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])
# Now predict the value of the digit on the second half:
expected = digits.target[n_samples / 2:]
predicted = classifier.predict(data[n_samples / 2:])
print("Classification report for classifier %s:\n%s\n"
% (classifier, metrics.classification_report(expected, predicted)))
print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted))
for index, (image, prediction) in enumerate(
zip(digits.images[n_samples / 2:], predicted)[:4]):
pl.subplot(2, 4, index + 5)
pl.axis('off')
pl.imshow(image, cmap=pl.cm.gray_r, interpolation='nearest')
pl.title('Prediction: %i' % prediction)
pl.show()