这是一个更为普遍的“我在哪里能找到好的资源来做某事”的问题。我正在尝试使用Python(OpenCV或其他)根据训练集对图像进行分类。
我的训练集:这是由许多产品缺陷的图像组成的。每个图像可以在产品的3个位置中的1个位置拍摄,每个图像将包含5种产品缺陷类型中的1种。这些缺陷已被人工分类并由人验证。
要分类的图像:这些图像由相似的图像组成,在相同的3个位置拍摄,但缺陷的类型没有分类(虽然缺陷区域是由拍摄图像的工具识别的,但只是工具没有正确分类,我无法更改工具)。
我尝试按照《用Python编程计算机视觉:分析图像的工具和算法》一书中的建议进行分类。在本例中,我使用存储在mySQL数据库(训练数据)中的SIFT描述符。到目前为止,我没有太多的运气(我继续排除故障),我想我会向任何OpenCV专家寻求建议。
任何推荐或建议将不胜感激。
所以,回到这个问题上,我认为分享我学到的东西是值得的。我不知道这是“答案”,但这就是我的归宿。一项正在进行的工作,你总是可以变得更好。
我现在的解决办法是把三种不同的方法结合起来。所有这些都可以在互联网上搜索,所以我不会详细介绍如何。
首先,我使用SIFT方法,使用对VLFeat的命令行调用生成SIFT直方图。这可能是Python中其他地方的一个选项,这正是我所使用的。我使用k-means聚类来做词汇视觉袋的事情,并建立了一个数据库,将质心和与训练图像相关的词汇直方图联系起来。我通过添加根筛选步骤稍微改进了结果。然后我使用密集SIFT(但没有根SIFT调整)创建了一个单独的数据库。最后,根据训练图像的RGB分量建立了一个彩色直方图数据库。我并没有使用所有256个R G B框,而是将单个R、G和B值相加超过8个框,然后将值展平为24个框的直方图。
对未知图像进行同样的处理,然后用欧氏距离比较直方图向量。我也尝试了卡方比较,但在我的情况下,欧几里德提供了更好的结果。我从每一个进程中抽取前三名的结果,根据9票中的5票进行图像分类。如果没有达到多数,那么分析是不确定的。
对于我封闭的图像群体,我的错误分类率为3.1%,不确定度为3.1%。