这是一个更为普遍的“我在哪里能找到好的资源来做某事”的问题。我正在尝试使用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%。
研究了基于特征包(BoF)和支持向量机的图像分类问题。我用C++和OpenCV做的,但是我确信你也可以得到类似的Python方法。
概念:
创建BoF字典:
培训:
测试:
你可以参考这个article
Implementing a CNN in Theano可能会给你比OpenCV中任何东西都好的结果。如果你在Google scholar上搜索,有大量关于使用CNNs进行图像分类的文章-这些方法中的大多数应该不难使用Theano实现。
您可以尝试通过将培训数据(有缺陷、没有缺陷)上载到demo.nanonets.ai(免费使用)来构建模型
1)在此处上传您的培训数据:
demo.nanonets.ai
2)然后使用以下(Python代码)查询API:
3)回答如下:
相关问题 更多 >
编程相关推荐