Halcon分类器之高斯混合模型分类器_训练高斯混合模型分类器-程序员宅基地

技术标签: 分类器  机器视觉  图像相关  Halcon  

Halcon分类器示例自我理解
看了很多网上的例子,总有一种纸上得来终觉浅,绝知此事要躬行的感觉。说干就干,将Halcon自带分类器例子classify_metal_parts.hdev按照自己的理解重新写一遍,示例中的分类器是MLP(多层感知机),我将它改变为GMM(高斯混合模型)。希望可以帮助刚入门的同学学习理解,大神请绕路吧,当然也喜欢各位看官帮我找出不足之处,共同进步。谢谢!
分类效果如图:
在这里插入图片描述
下面是HDevelop代码,图片请自己寻找,是Halcon自带图片,*代码所用图片路径:C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/rings
#====================================================#

dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
*创建分类器(高斯混合模型)(依据6个特征分三类,每个分类的类的中心)
create_class_gmm (6, 3, 2, 'spherical', 'normalization', 10, 42, GMMHandle)
*定义要分类的类别
Class:=[0,1,2]
*添加样本1
list_files ('C:/Users/yanzhenwu/Desktop/TestPic/1', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    threshold (Image, Regions, 0,100)
    connection (Regions, ConnectedRegions)
    count_obj (ConnectedRegions, Number)
    for I := 1 to Number by 1
        Features:=[]
        select_obj (ConnectedRegions, ObjectSelected, I)
        *Region紧凑度
        roundness (ObjectSelected, Distance, Sigma, Roundness, Sides)
        *Region圆度
        circularity (ObjectSelected, Circularity)
        *图像高阶矩(可表示出Region的方向和大小特征,具体不是很懂)
        moments_region_central_invar (ObjectSelected, PSI1, PSI2, PSI3, PSI4)
        *将这些特征添加到元祖中,作为一个特征向量给训练用
        Features:=real([Roundness,Circularity,PSI1, PSI2, PSI3, PSI4])
        *添加训练样本:这里的Features一定要和创建的分类器中规定的特征维度一样
        add_sample_class_gmm (GMMHandle,  Features, Class[0], 0)
    endfor
    disp_message (3600, '添加样本一第'+int(Index+1)+'张图像', 'window', 12, 12, 'black', 'true')
    stop ()
endfor

*添加样本2
list_files ('C:/Users/yanzhenwu/Desktop/TestPic/2', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    threshold (Image, Regions, 0,100)
    connection (Regions, ConnectedRegions)
    count_obj (ConnectedRegions, Number)
    for I := 1 to Number by 1
        Features:=[]
        select_obj (ConnectedRegions, ObjectSelected, I)
        roundness (ObjectSelected, Distance, Sigma, Roundness, Sides)
        circularity (ObjectSelected, Circularity)
        moments_region_central_invar (ObjectSelected, PSI1, PSI2, PSI3, PSI4)
        Features:=[Roundness,Circularity,PSI1, PSI2, PSI3, PSI4]
        add_sample_class_gmm (GMMHandle, Features, Class[1], 0)
    endfor
    disp_message (3600, '添加样本二第'+int(Index+1)+'张图像', 'window', 12, 12, 'black', 'true')
    stop ()
endfor

*添加样本3
list_files ('C:/Users/yanzhenwu/Desktop/TestPic/3', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    threshold (Image, Regions, 0,100)
    connection (Regions, ConnectedRegions)
    count_obj (ConnectedRegions, Number)
    for I := 1 to Number by 1
        Features:=[]
        select_obj (ConnectedRegions, ObjectSelected, I)
        roundness (ObjectSelected, Distance, Sigma, Roundness, Sides)
        circularity (ObjectSelected, Circularity)
        moments_region_central_invar (ObjectSelected, PSI1, PSI2, PSI3, PSI4)
        Features:=[Roundness,Circularity,PSI1, PSI2, PSI3, PSI4]
        add_sample_class_gmm (GMMHandle, Features, Class[2], 0)
    endfor
    disp_message (3600, '添加样本三第'+int(Index+1)+'张图像', 'window', 12, 12, 'black', 'true')
    stop ()
endfor
*训练
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)
*这里注意:清理的是样本添加句柄,而不是分类句柄
clear_samples_class_gmm (GMMHandle)
*分类样本
list_files ('C:/Users/yanzhenwu/Desktop/TestPic/test', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    threshold (Image, Regions, 0,100)
    connection (Regions, ConnectedRegions)
    count_obj (ConnectedRegions, Number)
    for I := 1 to Number by 1
        Features:=[]
        select_obj (ConnectedRegions, ObjectSelected, I)
        area_center (ObjectSelected, Area, Row, Column)
        roundness (ObjectSelected, Distance, Sigma, Roundness, Sides)
        circularity (ObjectSelected, Circularity)
        moments_region_central_invar (ObjectSelected, PSI1, PSI2, PSI3, PSI4)
        Features:=[Roundness,Circularity,PSI1, PSI2, PSI3, PSI4]
        *这里注意,当前选的的对象的类别设置为1,ClassID则给出预先定义的Class类别中的一个,否则,给出不唯一达不到分类效果
        classify_class_gmm (GMMHandle, Features, 1, ClassID, ClassProb, Density, KSigmaProb)
        if(ClassID==Class[0])
            dev_set_color ('red')
            dev_display (ObjectSelected)
            disp_message (3600, '圆环', 'window', Row, Column, 'black', 'false')
        elseif(ClassID==Class[1])
            dev_set_color ('blue')
            dev_display (ObjectSelected)
            disp_message (3600, '六边形', 'window', Row, Column, 'black', 'false')
        else
            dev_set_color ('yellow')
            dev_display (ObjectSelected)
            disp_message (3600, '齿轮', 'window', Row, Column, 'black', 'false')
        endif
    endfor
    disp_message (3600, '用高斯混合分类器分类图像', 'window', 5, 5, 'black', 'true')
    stop ()
endfor
*清理分类句柄
clear_class_gmm (GMMHandle)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yzw1298023866/article/details/90645204

智能推荐

李开复揭密微软成功之道 寄语中国软件业(4)_在微软许多人都像我一样主动从事发现人才、跟踪人才和吸引人才的工作....-程序员宅基地

文章浏览阅读1k次。http://www.sina.com.cn 2005年04月07日 11:19 新浪科技  文/李开复  人才:微软的立业之本  微软公司把重视人才的管理理念视为公司的核心财富。在信息时代里,人才的价值尤为重要。在工业时代里,一个优秀技工和一个普通技工的效率差异可能是30%,但在信息时代里,一个高级程序员和一个普通程序员的效率差异可能高达10倍以上。 ad1= "打造校_在微软许多人都像我一样主动从事发现人才、跟踪人才和吸引人才的工作....

python量化交易pdf书籍微盘,python量化交易编程自学_python 量化交易 pdf 百度网盘-程序员宅基地

文章浏览阅读836次,点赞21次,收藏19次。大家好,小编为大家解答python量化交易教程电子书的问题。很多人还不知道python量化交易pdf书籍微盘,现在让我们一起来看看吧!_python 量化交易 pdf 百度网盘

OFDM802.11a的FPGA实现(七)一级交织:分组交织器(含verilog和matlab代码)

在前面的文章中讲解了卷积编码和删余,实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后,下一个部分就是交织。今天对交织进行具体实现。

移动硬盘无法读取?学会这3个方法,快速解决问题!_新硬盘无法识别-程序员宅基地

文章浏览阅读648次。移动硬盘在目前工作和学习中都是一个比较重要的工具。如果遇到移动硬盘无法读取的情况,应该如何解决呢?小编给大家总结了几个简单有效的操作方法,记得收藏起来哦!_新硬盘无法识别

微信小程序红包 php,如何用微信小程序发红包-程序员宅基地

文章浏览阅读250次。在目前的小程序版本尚不支持发红包这个功能,开发者们表面笑嘻嘻,心里妈卖批!在这里,提供一种已经实践过的解决思路。详细解析,就是下面的几个步骤1、首先是在小程序里面的领红包入口2、点击后跳转webview, 附带当前的小程序的token给webview验证,webview 的src 指向具备付款能力的服务号的一个获取openid页面,根据附加的token来判断用户是否可以领取红包,此时用户拥有两个o..._小程序 可以用微信支付 现金红包php

视频教程-跟一夫学UI设计 APPUI综合设计与图标实战案例视频教程 photoshop绘制icon案例-UI-程序员宅基地

文章浏览阅读104次。跟一夫学UI设计 APPUI综合设计与图标实战案例视频教程 photoshop绘制icon案例 ..._app风格案例视频

随便推点

在VSCode中配置多个版本的Python环境,并设置PYTHONHOME环境变量

另外,如果你想要在项目级别配置Python解释器,你可以在项目的根目录下创建一个.vscode文件夹(如果还没有的话),然后在这个文件夹中创建一个settings.json文件。在settings.json文件中,你可以添加类似于"python.pythonPath": "/path/to/python39"的设置来指定Python解释器的路径。这样,当你在VSCode中打开这个项目时,它会自动使用你在settings.json文件中指定的Python解释器。在弹出的对话框中,点击“环境变量”按钮。

VBOX报错"Kernel driver not installed(rc=-1908)"-程序员宅基地

文章浏览阅读129次。根据报错提示先安装dkms包[root@OS4 ~]# rpm-ivh dkms-2.2.0.3-3.2.noarch.rpm warning: dkms-2.2.0.3-3.2.noarch.rp..._vboxheadless: error -1908 in suplibosinit! vboxheadless: kernel driver not i

vue.js的手脚架vue-cli项目搭建的步骤-程序员宅基地

文章浏览阅读90次。手脚架是什么?众所周知,现在的前端项目发展得越渐越大,我们前端程序员要从0开始去搭建一套完整的项目很费时,所以这时候前端工程的手脚架就出现了。我用得vue-cli也是其中之一,还有其他的我也说不清,我就说一下我接触比较多的这款vue-cli,但是所有手脚架的核心:都是为了能够快速搭建一个完整的项目的结构,开发者只需要在生成的项目结构的基础上进行开发即可,非常简单高效。然后..._如何上线vue-cli手脚架项目到服务器

python进程和线程-程序员宅基地

文章浏览阅读794次,点赞19次,收藏19次。2、multiprocessing.Process类的join()方法可以阻塞主进程,当子进程没有进行完成的时候,主进程hold。2、threading.Thread类的join()方法可以阻塞主进程,当子线程没有进行完成的时候,主线程hold。3、可以通过继承multiprocessing.Process并重写run()函数的方法来实现多线程。1、线程通过multiprocessing.Process类的start()方法启动。1、线程通过threading.Thread类的start()方法启动。

使用OkHttp 缓存 API 调用提高Android应用性能

要能够将 API 调用的响应本地存储到缓存中,首先,我们需要定义缓存并通知客户端。在下面的代码片段中,我们使用 okhttp 库中的 Cache 类定义了缓存。我们将此缓存的最大大小设置为 5 MB。然后,在初始化 okhttpclient 参数时使用cache()函数。.build()如果设备连接到互联网:如果最后一次 API 响应是在不到 30 分钟之前检索的,则显示缓存的响应;否则,获取新的响应并将其存储在缓存中。如果设备离线:使用最多 1 天前的 API 响应以保持应用程序功能。

一键实现在VS Code中绘制流程图

而其较为出众的一点,就是较好的可拓展性,即丰富的插件应用,这些应用可以极大地提高生产效率,并优化日常使用。可以发现,其整体格局和我们常见的流程图编辑应用较为类似,其主题颜色也与我们的VS Code保持一致,在这里为了编辑方便,我们还是将编辑器主题改为浅色。当然,其功能仍存在局限,不能够完全代替我们传统的图形绘制工具,但也可以作为我们日常工作的有益补充,帮助我们完成一些特定情景下的项目。整体布局也十分明晰,与我们常用的Visio极为类似:左侧为形状选项卡,中间为画布容器,右侧为样式编辑。