我应该用直方图或者其他更高级的Math工具,比如贝叶斯网络来做材料分类识别?

问题描述 投票:2回答:1

我正在学习OpenCV的基础知识,我想一个好的项目可以帮助我增加学习的乐趣。经过思考一些想法,我想到了一些材料识别项目。比方说,我给自己找了一个传送带,它正在为生产某种产品运送材料(这个产品并不重要)。有3种材料,照明条件会有所不同,(早上到下午使用自然光,晚上使用灯泡)。这应该就是问题的描述了。

我想用沙子、木头和石头,这些都是很容易得到的。 并把它们放在塑料表面。拍完照片后,我会应用一些直方图来得到颜色,用这个颜色来识别材料。但是,由于雷电条件会随着时间的推移而改变,当我拍下这张照片并应用直方图时,颜色就会改变,材料就无法正常识别。而且我想,如果我用沙子和灰尘,它们的颜色非常相似,但质地不同,有没有什么东西可以帮我解决这个问题?

我只是想知道一些想法,也许有这方面的专家能指导我。

python opencv bayesian-networks object-recognition
1个回答
5
投票

相当高级的一个起步项目的想法。光线的差异可以用HSV或其他颜色空间,采取Hue组件来解决。然而 "纹理 "这件事可以用两种方式来处理。

  1. 特征描述符: 如果你处理灰度图像,有一组特征描述符,称为灰度共现矩阵(GLCM),它给出了图像中不同区域的纹理度量。这在Matlab中是存在的,对于OpenCV有以下代码。在C语言中.

    因此,你可以拍摄几张沙子、木头和岩石的标准照片,并将它们作为分类器上的训练样本--NN、SVM、OpenCV的Haar分类器等等。然后用负样本来训练它。分类器的特征向量将是每张图片的GLCM输出。然后在实际图片上运行它,看看它们的准确度如何。

  2. 纹理粗糙度: 遇到 这个 这篇有用的论文展示了一种称为 Eigen Transform 的纹理 "粗糙度 "的单值测量方法。计算非常简单,尤其是当你使用OpenCV的 SVD() 用于特征值计算。本征变换的结果给出了与该部分粗糙度相对应的数值。这可以用来分离出需要的部分。

© www.soinside.com 2019 - 2024. All rights reserved.