C++ 基于opencv-SVM的列车火灾探测

C++ 基于opencv-SVM的列车火灾探测,c++,opencv,svm,C++,Opencv,Svm,我使用SVM是因为我需要ML来训练我的分类器,我在几篇关于火灾探测的论文中看到,他们使用SVM和逻辑回归,但由于2.4.9中没有逻辑回归,我计划使用SVM。我使用的是opencv 2.4.9,因为人们说opencv 3有缺陷 我是新来的,所以从基础开始会很有帮助 我已经准备好了一些火灾和非火灾视频,准备提取到帧中。我对opencv和分类器都是新手。我的问题是训练分类器(特别是SVM)的基础是什么,我需要图像的格式是什么,如何训练它们?有什么好的教程链接吗?我在opencv文档中找到了一个,但它并

我使用SVM是因为我需要ML来训练我的分类器,我在几篇关于火灾探测的论文中看到,他们使用SVM和逻辑回归,但由于2.4.9中没有逻辑回归,我计划使用SVM。我使用的是opencv 2.4.9,因为人们说opencv 3有缺陷

我是新来的,所以从基础开始会很有帮助


我已经准备好了一些火灾和非火灾视频,准备提取到帧中。我对opencv和分类器都是新手。我的问题是训练分类器(特别是SVM)的基础是什么,我需要图像的格式是什么,如何训练它们?有什么好的教程链接吗?我在opencv文档中找到了一个,但它并没有教授如何使用图像进行训练。在确定参数时我需要什么?参数的用途是什么?提前感谢

这是一个需要大量论文和教程来解释的概念性问题。然而,正如在评论中所解释的,我试图详细阐述特征提取。特征描述符应该对缩放、平移和旋转具有鲁棒性。这种稳健性字面上称为不变特征。例如,矩及其导数是针对旋转、缩放和平移的最著名的不变量类型之一。您可以找到本节中解释的Hu矩的用法。 火焰或火灾探测是不同的。火焰对应的特征可以从火焰的动态纹理中提取。例如,火有一种特殊的颜色纹理,它将火与背景隔开。传统的火焰探测器利用红外传感器来探测火焰。在图像处理或RGB世界中,我们可以通过考虑火焰本身的性质来做同样的事情。火焰通过热量和红外线发射其大部分能量。所以,我们可以预期红通道的大部分将用于火焰。例如,请参见下图。

在处理后的图像中,通过施加阈值将红色通道转换为BW图像。为了更清楚,我已将3个频道分开,如下所示。
R:G:B:
很明显,红色通道有更多关于火焰的内容。因此,可以得出结论,火焰是R通道有一部分信息的地方,然后是G通道,最后是B通道。请参阅。
然后,您的特征向量将是一个三维向量,例如,三个RGB通道中的火焰轮廓。SVM分类器现在可以使用了。有时,视频可能包含应该避免的类似火焰的片段,否则会导致错误警报。SVM,帮助您接受或拒绝火焰候选人。为了训练支持向量机,收集一些真实的火焰和一些可能被特征提取器误判的图像。然后,用正面和负面特征标记它们。最后,让opencv发挥魔力并训练它。有关SVM的更多信息,请观看麻省理工学院Patrick Winston的视频

更新-- 由于您对创建特征向量很好奇,我给您带来了以下示例。假设R、G、B通道被精细分离,以便人们可以称之为统计上独立的通道,如下所示:;这在真实图像中是不正确的,其中R、G、B平面在统计上不是独立的。
因此,RGB图像中的一个点在RGB通道中将具有3种表示形式。例如,火焰将在所有R、G、B平面上形成3个点。例如,每个点的面积都在这里追踪。将RGB图像中的火焰点标记为“A”。
区域A的表示在上面的R、G、B图像中进行了描述。A_r,A_g,A_b分别表示区域A在r,g,b平面上的对应区域

因此,点A将由xyz平面中的三元组(Ar、Ag、Ab)表示。SVM,现在接受该向量作为输入,并确定它是否表示真实火焰。
区域,标准化格式,是决策过程中可以涉及的许多几何特征之一。这种类型的其他有用特性是纵横比、力矩等

简而言之,您必须执行以下操作:
1-找到火焰状区域。
2-在所有R、G、B平面上追踪候选点。
3-在每个平面中提取特征(我建议使用矩)。
4-形成特征向量
5-使用此向量馈送SVM


我希望你觉得这很有用。

是的,所以你现在的工作是制作一个.txt文件,其中包含你要处理的每个图像的数据。 那些为真的将由+1表示,后跟特征集,并以-1结束 错误的火灾图像将以-1开头,然后是特征集,最后是-1,然后是下一幅图像的特征集 这将是一项乏味的工作,但我相信你会处理好的 最后保存扩展名为.train而不是.txt的文件
因此,您的训练文件名将是filename.train

为了训练SVM,您首先需要从图像中提取特征。特征提取算法在很大程度上取决于应用。如果您使用的是OpenCV,我建议您看一下关于关键点检测器和特征提取的教程。我是否需要我的图像采用特定格式?或者jpg是可行的?我把提取的特征放在哪里?我无法在svm训练方法中找出哪个参数,看看随分布而来的opencv样本。有几个例子使用支持向量机。关于非线性支持向量机的例子没有说明如何使用图像进行训练,我很难将其转换为图像训练谢谢解释,我有一个问题。你的意思是我将使用三维向量提取特征?我很难使用它,正如我在这里的文档中看到的,我在关键点参数中输入了它?@RedViper,我更新了我的帖子。对抗冲浪的时刻边缘是什么?作为特征