Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用emgucv/opencv/Aforge.Net/Accord.Net在50-100 ms内实时检测仪表中的指示灯和状态(开-关、颜色、闪烁)_C#_Opencv_Image Processing_Computer Vision_Emgucv - Fatal编程技术网

C# 如何使用emgucv/opencv/Aforge.Net/Accord.Net在50-100 ms内实时检测仪表中的指示灯和状态(开-关、颜色、闪烁)

C# 如何使用emgucv/opencv/Aforge.Net/Accord.Net在50-100 ms内实时检测仪表中的指示灯和状态(开-关、颜色、闪烁),c#,opencv,image-processing,computer-vision,emgucv,C#,Opencv,Image Processing,Computer Vision,Emgucv,检测指示器的仪表图像 [![用于检测指示器的仪表图像][1][1] 我想实时跟踪仪表上每个指示器的当前状态。两个指示器可以在不同的时间点显示在同一位置 为了实现速度表指示器检测,我尝试了以下方法 背景减法 在这种方法中,我们在测试前已在关闭状态下存储了仪表的基本图像。然后我们在开始测试后捕获每一帧,并从基础图像中减去这一帧。然后我们检查减法图像中的感兴趣区域(指示器位置),如果检测到指示器大小的斑点,我们认为指示器处于打开状态,否则如果未检测到斑点或小尺寸斑点,我们认为指示器处于关闭状态 上述实

检测指示器的仪表图像 [![用于检测指示器的仪表图像][1][1]

我想实时跟踪仪表上每个指示器的当前状态。两个指示器可以在不同的时间点显示在同一位置

为了实现速度表指示器检测,我尝试了以下方法

  • 背景减法 在这种方法中,我们在测试前已在关闭状态下存储了仪表的基本图像。然后我们在开始测试后捕获每一帧,并从基础图像中减去这一帧。然后我们检查减法图像中的感兴趣区域(指示器位置),如果检测到指示器大小的斑点,我们认为指示器处于打开状态,否则如果未检测到斑点或小尺寸斑点,我们认为指示器处于关闭状态
  • 上述实现中面临的问题是,当该区域显示任何其他图形时,或者如果meter播放任何动画,并且动画通过指示器区域,则检测到错误的blob,并获得错误的结果

  • 打开CV模板匹配方法- 当仪表首次配置时,指示器由用户通过在图像上绘制矩形来添加。在此期间,将存储指示器的模板图像。在测试执行期间,将在感兴趣的区域(指示器位置)中搜索此模板图像。如果图像与模板图像匹配,则我们认为指示器处于打开状态,否则我们认为指示器处于关闭状态
  • 在上述实现中面临的问题是,在点火开关打开状态和点火开关关闭状态下,很少有指示灯显示不同,然后由于背景不同,模板图像匹配失败

    例如,根据点火状态(分别为点火关闭和点火打开),仪表上的指示灯可以以两种方式显示

    点火开关打开状态下前雾灯打开的图像 [![点火开关打开状态下前雾灯亮起的图像][2][2]

    点火关闭状态下前雾灯打开的图像
    [![点火关闭状态下前雾灯亮起的图像][3][3]

  • 开放式CV边缘检测+模板匹配方法- 为了消除上述方法中的背景问题,我尝试使用canny边缘检测将图标转换为轮廓,然后尝试匹配模板,但结果仍然不一致

  • 很高兴向我们展示您的思维过程

    问题: 对于这种形状检测和变化,最大的问题是泛化。指示的形状是一致的(对象),但场景会发生变化(背景)。这种“启发式”方法不会返回好的结果,因为变化量很大

    解决: 你应该采用机器学习的方法来解决这个问题,详细说明你自己的指标和标签数据集,组织一切并训练你自己的解决方案

  • 支持向量机-支持向量机:不是最通用的方法,但可以生成更轻的模型,而且训练起来也有点快。您甚至可以使用Opencv训练自己的SVM

  • CNN-卷积神经网络:非常通才,有点噪声鲁棒性,这肯定是我的“直接”方法。训练目标检测模型最简单、最快速的方法是使用Keras


  • PS:我带来的大多数技术并没有按照问题的要求用C#(主要是Python和C++)实现,但一旦推理模型(SVM、CNN等)得到训练和生成,新版本的EmguCV就可以无缝地导入和使用它们

    很高兴向我们展示您的思维过程

    问题: 对于这种形状检测和变化,最大的问题是泛化。指示的形状是一致的(对象),但场景会发生变化(背景)。这种“启发式”方法不会返回好的结果,因为变化量很大

    解决: 你应该采用机器学习的方法来解决这个问题,详细说明你自己的指标和标签数据集,组织一切并训练你自己的解决方案

  • 支持向量机-支持向量机:不是最通用的方法,但可以生成更轻的模型,而且训练起来也有点快。您甚至可以使用Opencv训练自己的SVM

  • CNN-卷积神经网络:非常通才,有点噪声鲁棒性,这肯定是我的“直接”方法。训练目标检测模型最简单、最快速的方法是使用Keras


  • PS:我带来的大多数技术并没有按照问题的要求用C#(主要是Python和C++)实现,但一旦推理模型(SVM、CNN等)得到训练和生成,新版本的EmguCV就可以无缝地导入和使用它们

    感谢@Guigerme Vogt的回复。我想澄清几点。由于一个指标将有一张图片(即1个指标==1个培训样本),它会工作吗?同样,如果查询指标没有经过培训,它会将其映射到错误的指标,因此有可能获得keras CNN的信任吗?谢谢@Guigerme Vogt的回复。我想澄清几点。由于一个指标将有一张图片(即1个指标==1个训练样本),它会工作吗?同样,如果查询指标没有训练,它会将其映射到错误的指标,因此有可能获得对keras CNN的信心吗?在这个应用中,模板匹配应该有利于找到指标。如果拍摄图像的摄影机的位置不变,且目标区域始终保持相同大小且不旋转,则此情况成立。我会尝试不同的方案,@andrew使用模板匹配上述两种不同表示的前雾灯场景不一致?你能推荐一些工作吗?@PratikThorat我想试试