Halcon Variation_model 详解

Posted 知人者智,自知者明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Halcon Variation_model 详解相关的知识,希望对你有一定的参考价值。

介绍

使用Halcon 的差异模型进行检测,主要分为下面的四个步骤:

  • create_shape_model 创建检测的区域匹配模板
    注: 这里使用形状匹配模板,当然也可以通过其它的匹配算法实现

  • create_variation_model 创建差异模型

  • rain_variation_model 训练正常图像

  • prepare_variation_model 检测前配置差异模型的参数

  • find_shape_model 查找图像中的匹配模板
    注: 这里匹配的算法和模型需要保持一直, 如形状匹配模板对应形状匹配算法

  • 找到匹配的结果,通过仿射变换,抠图出匹配的那部分图像,用于差分检测

    • vector_angle_to_rigid
    • affine_trans_image
    • reduce_domain
  • compare_variation_model 进行匹配区域和训练模板的一个差分处理,找到差异部分

  • 后面的步骤主要是进行差异的特征过滤筛选,判定图像是否存在缺陷。

create_variation_model 说明

Type参数指定要创建的模型类型。例如,Type可以是"svm"、"knn"、"random_forest"等等。不同的模型类型适用于不同的问题和数据集。
Mode参数指定模型的训练模式。例如,Mode可以是"standard"、"incremental"或"online"。不同的训练模式适用于不同的数据集和计算资源。

模型的训练模式可以分为三种:标准模式(standard)、增量模式(incremental)和在线模式(online)。
标准模式是指在训练过程中,将所有的训练数据一次性输入模型进行训练。这种模式适用于数据量较小的情况,因为需要将所有数据都加载到内存中,所以可能会导致内存不足的问题。
增量模式是指在训练过程中,将数据分批次输入模型进行训练。每次输入一批数据,模型就会更新一次参数。这种模式适用于数据量较大的情况,因为可以避免将所有数据都加载到内存中,同时还可以在训练过程中动态地添加新的数据。
在线模式是指在训练过程中,将数据逐个输入模型进行训练。每输入一个数据,模型就会更新一次参数。这种模式适用于数据量非常大的情况,因为可以避免将所有数据都加载到内存中,同时还可以在训练过程中动态地添加新的数据。
总之,标准模式适用于数据量较小的情况,增量模式适用于数据量较大的情况,而在线模式适用于数据量非常大的情况。

train_variation_model 说明

训练差异模型可以得到差异模型的ID

prepare_variation_model 说明

在 prepare_variation_model 算子中,AbsThreshold 和 VarThreshold 是用于控制特征点筛选的参数。
AbsThreshold 是一个绝对阈值,用于筛选特征点。如果特征点的灰度值差异小于 AbsThreshold,则该特征点将被过滤掉。AbsThreshold 越大,筛选出的特征点越少。
VarThreshold 是一个相对阈值,用于筛选特征点。VarThreshold 的值越大,筛选出的特征点越少。VarThreshold 的计算方式为:VarThreshold = MeanGrayValue * VarThresholdFactor,其中 MeanGrayValue 是特征点周围像素的平均灰度值,VarThresholdFactor 是一个用户定义的参数,通常取值在 0.1 到 0.5 之间。
需要注意的是,AbsThreshold 和 VarThreshold 是互相独立的参数,它们都可以用于控制特征点的筛选。在实际应用中,可以根据具体情况选择合适的参数值,以达到最佳的特征点筛选效果。

compare_variation_model 说明

将检测区域和差异模型输入,得到的就是与标准模型不同的区域

机器视觉Qt集成Halcon开发环境详解

00. 目录

01. 概述

Qt中集成Halcon开发环境有两种配置方案。第一种方案是使用环境变量来代替路径,并考虑平台移植问题。第二种方案是第三方库的使用,将用到的头文件和库直接打包到项目中,不用在客户机安装Halcon软件。

02. Halcon动态库配置方案一

配置简单,但移植后的机器需要安装Halcon软件。

2.1安装Halcon的环境变量

HALCONROOT代表当前环境下Halcon安装根目录。

HALCONARCH代表当前环境下Halcon的架构名称

2.2 配置Halcon头文件和库

# HALCON/Qt pattern matching and measure example
#
# (c) 2004-2019 MVTec Software GmbH

# matching.pro
#

CONFIG		+= qt debug
QT              += core gui  widgets


#defines
win32:DEFINES += WIN32

#includes  指定Halcon头文件所在目录
INCLUDEPATH   += "$$(HALCONROOT)/include"
INCLUDEPATH   += "$$(HALCONROOT)/include/halconcpp"

#libs 指定Halcon所需的库
QMAKE_LIBDIR  += "$$(HALCONROOT)/lib/$$(HALCONARCH)"
unix:LIBS     += -lhalconcpp -lhalcon -lXext -lX11 -ldl -lpthread
win32:LIBS    += "$$(HALCONROOT)/lib/$$(HALCONARCH)/halconcpp.lib" \\
               "$$(HALCONROOT)/lib/$$(HALCONARCH)/halcon.lib"


#sources
HEADERS	    += qhalconwindow.h
HEADERS	    += matching.h
SOURCES	    += qhalconwindow.cpp
SOURCES	    += matching.cpp
SOURCES	    += main.cpp

或者

# matching.pro
#

CONFIG		+= qt debug
QT              += core gui  widgets


#defines
win32:DEFINES += WIN32

#includes  指定Halcon头文件所在目录
INCLUDEPATH   += "$$(HALCONROOT)/include"
INCLUDEPATH   += "$$(HALCONROOT)/include/halconcpp"

#libs 指定Halcon所需的库
QMAKE_LIBDIR  += "$$(HALCONROOT)/lib/$$(HALCONARCH)"
unix:LIBS     += -lhalconcpp -lhalcon -lXext -lX11 -ldl -lpthread
win32:LIBS    += halconcpp.lib halcon.lib


#sources
HEADERS	    += qhalconwindow.h
HEADERS	    += matching.h
SOURCES	    += qhalconwindow.cpp
SOURCES	    += matching.cpp
SOURCES	    += main.cpp

2.3 编译测试

2.4 运行结果

温馨提示

配置时建议使用环境变量来代替路径,并考虑平台移植问题

温馨提示

C:\\Users\\Public\\Documents\\MVTec\\HALCON-19.11-Progress\\examples\\cpp\\qt\\Matching

03. Halcon动态库配置方案二

第三方库的使用,将用到的头文件和库直接打包到项目中,这种情况下不需要在客户机安装Halcon软件。

3.1在Qt项目目录中创建include和lib目录

3.2 将MVTec\\HALCON-19.11-Progress\\include目录下所有的文件拷贝到新建的include目录下。

3.3 将MVTec\\HALCON-19.11-Progress\\lib\\x64-win64目录下所有的文件拷贝到新建的lib目录下。

3.4 找到MVTec\\HALCON-19.11-Progress\\bin\\x64-win64与lib文件下*.lib文件重名的*.dll文件,并复制到新建的lib文件下

实际上只用到了一下几个文件

3.5 添加库

3.6 添加外部库,点击下一步

3.7 添加halconcpp库的配置

3.8 添加halcon库的配置

3.9 添加halcon相关头文件的目录

# matching.pro
#

CONFIG		+= qt debug
QT              += core gui  widgets

#defines
win32:DEFINES += WIN32

#sources
HEADERS	    += qhalconwindow.h
HEADERS	    += matching.h
SOURCES	    += qhalconwindow.cpp
SOURCES	    += matching.cpp
SOURCES	    += main.cpp

INCLUDEPATH += $$PWD/include
INCLUDEPATH += $$PWD/include/halconcpp

win32: LIBS += -L$$PWD/lib/ -lhalconcpp

INCLUDEPATH += $$PWD/lib
DEPENDPATH += $$PWD/lib

win32: LIBS += -L$$PWD/lib/ -lhalcon

INCLUDEPATH += $$PWD/lib
DEPENDPATH += $$PWD/lib

温馨提示

PWD指的是项目所在路径

3.10 编译,运行结果如下

04. 问题讨论

4.1 出现Error #5190: HALCON error #5190: Invalid window parameter错误

错误提示如下:

解决办法:

SetWindowParam函数需要依赖动态库文件hcanvas.dll,把该库从C:\\Program Files\\MVTec\\HALCON-19.11-Progress\\bin\\x64-win64拷贝到自己的项目路径lib目录下。

05. 附录

5.1 测试代码下载

下载:

5.2 参考博客

博客:Qt+Halcon笔记(1)—— 环境配置(两种方案,博主亲测)

以上是关于Halcon Variation_model 详解的主要内容,如果未能解决你的问题,请参考以下文章

机器视觉Halcon 20安装教程详解

机器视觉Halcon 20安装教程详解

机器视觉Qt集成Halcon开发环境详解

机器视觉Qt集成Halcon开发环境详解

上下双相机定位贴合(原理到应用,halcon源码详解)

机器视觉Qt集成Halcon开发环境详解