颜色识别基于高斯混合模型(GMM)的查找表分类器(LUT)

news2025/1/12 15:47:54

文章目录

  • create_class_gmm 创建高斯混合模型(GMM)以进行分类任务
  • add_samples_image_class_gmm 提取训练样本,并将其添加到高斯混合模型 (GMM) 的训练数据集中
  • train_class_gmm 训练一个高斯混合模型 (GMM)
  • clear_class_gmm 清除模型
  • create_class_lut_gmm 基于已训练的高斯混合模型 (GMM) 创建一个查找表 (LUT),用于分类字节图像
  • classify_image_class_lut 使用查找表 (LUT) 分类器对字节图像进行分类。
  • clear_class_lut 清除分类器
  • 示例

create_class_gmm 创建高斯混合模型(GMM)以进行分类任务

create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)
    NumDim (输入控制):指定特征空间的维度数量。这是用来对数据点进行分类的特征或属性的数量。
    NumClasses (输入控制):定义 GMM 应该能够区分的不同类别的数量。每个类别代表分类任务中的一个不同的类别或标签。
    NumCenters (输入控制):为每个类别指定中心的数量。这些中心代表每个类别的高斯分布的均值位置。可以为每个类别指定不同的中心数量。
    CovarType (输入控制):设置协方差矩阵的类型。这决定了每个高斯分布形状的复杂度。可选值包括:
        'spherical':球形协方差,表示各方向上的方差相同。
        'diag':对角线协方差,表示各方向上的方差不同但相互独立。
        'full':完全协方差,表示各个方向上都有不同的方差并且方向之间有相关性。
    Preprocessing (输入控制):指定用于变换特征向量的预处理类型。预处理可以改善分类性能。可选值包括:
        'normalization':归一化,将所有特征缩放到相同的尺度。
        'principal_components':主成分分析,使用主成分分析来减少特征维数。
        'canonical_variates':规范变量,使用规范变量分析来减少特征维数并最大化类别间的差异。
        'none':不进行预处理。
    NumComponents (输入控制):如果选择了 'principal_components''canonical_variates' 预处理方法,则需要指定转换后的特征数量。当预处理为 'none''normalization' 时,此参数被忽略。
    RandSeed (输入控制):设置随机数生成器的种子值,用于初始化 GMM 的随机值。这有助于复现实验结果。
    GMMHandle (输出控制):返回创建的 GMM 的句柄,以便后续操作使用。

add_samples_image_class_gmm 提取训练样本,并将其添加到高斯混合模型 (GMM) 的训练数据集中

add_samples_image_class_gmm(Image, ClassRegions : : GMMHandle, Randomize : )
    Image (输入对象): 这是用于训练的图像。通常是一张或多张通道的图像,如灰度图像、彩色图像等。
    ClassRegions (输入对象): 这是包含各个类别区域的区域数组。每个区域对应于图像中的一个类别或类别的一部分。这些区域通常是由用户手动标注或者通过其他方法自动分割得到的。
    GMMHandle (输入控制, 状态被修改): 这是之前使用 create_class_gmm 创建的 GMM 的句柄。此操作符会修改这个 GMM 的状态,即向其中添加训练样本。

    Randomize (输入控制): 这是一个实数值,表示要添加到训练数据中的高斯噪声的标准差。默认情况下为 0.0,意味着不添加任何噪声。可以通过添加一定标准差的高斯噪声来增强模型的鲁棒性,使其能够在面对噪声数据时有更好的表现。

train_class_gmm 训练一个高斯混合模型 (GMM)

train_class_gmm( : : GMMHandle, MaxIter, Threshold, ClassPriors, Regularize : Centers, Iter)


    GMMHandle (输入控制, 状态被修改): 这是之前使用 create_class_gmm 创建的 GMM 的句柄。此操作符会修改这个 GMM 的状态,即对其进行训练。

    MaxIter (输入控制): 指定期望最大化算法的最大迭代次数。这是一个整数值,用于控制训练过程中的最大迭代轮数。

    Threshold (输入控制): 设置期望最大化算法终止的相对误差阈值。当连续两次迭代之间的变化小于这个阈值时,算法将停止。这是一个实数值,取值范围为 [0.0, 1.0]ClassPriors (输入控制): 确定类别先验概率的方式。可以选择以下两种模式:
        'training': 根据训练数据中的类别频率计算先验概率。
        'uniform': 所有类别的先验概率相等。

    Regularize (输入控制): 为了防止协方差矩阵奇异而使用的正则化值。这是一个实数值,用于调整协方差矩阵中的对角元素,以确保其非奇异。取值范围为 [0.0, 1.0)Centers (输出控制): 训练完成后每个类别找到的中心数量。这是一个整数数组,长度与类别数量相同。

    Iter (输出控制): 每个类别执行的实际迭代次数。这也是一个整数数组,长度与类别数量相同。

clear_class_gmm 清除模型

clear_class_gmm( : : GMMHandle : )

create_class_lut_gmm 基于已训练的高斯混合模型 (GMM) 创建一个查找表 (LUT),用于分类字节图像

create_class_lut_gmm( : : GMMHandle, GenParamName, GenParamValue : ClassLUTHandle)


    GMMHandle (输入控制): 这是已经使用 train_class_gmm 训练好的 GMM 的句柄。该 GMM 用于生成 LUT 分类器的基础。

    GenParamName (输入控制): 一个字符串数组,包含通用参数的名字,这些参数可以在创建 LUT 分类器时进行调整。可选的参数名称包括:
        'bit_depth': 表示用于创建 LUT 的位深度。
        'class_selection': 控制如何选择类别进行分类。例如,可以选择“fast”快速选择或者“best”最佳选择。
        'rejection_threshold': 设置拒绝阈值,用于确定哪些像素应该被拒绝分类。

    GenParamValue (输入控制): 一个数组,包含与 GenParamName 中指定的通用参数相对应的值。这些值可以根据具体的应用场景进行调整。

    ClassLUTHandle (输出控制): 返回创建的 LUT 分类器的句柄,用于后续的分类任务。

classify_image_class_lut 使用查找表 (LUT) 分类器对字节图像进行分类。

classify_image_class_lut(Image : ClassRegions : ClassLUTHandle : )

    Image (输入对象): 这是需要分类的输入字节图像。也可以接受多通道图像。

    ClassRegions (输出对象): 输出的是分割出的区域数组,代表图像中分类后的各个区域。每个区域对应于图像中的一个分类结果。

    ClassLUTHandle (输入控制): 这是之前使用 create_class_lut_gmm 创建的 LUT 分类器的句柄。此操作符使用该分类器对图像进行分类。

clear_class_lut 清除分类器

clear_class_lut( : : ClassLUTHandle : )

示例

在这里插入图片描述

* In this example five different color fuses are segmented with
* a look-up table classifier (LUT) based on a Gaussian Mixture
* Model (GMM).
* 读取图片
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 800, 600, 'white', WindowHandle)
dev_set_draw ('margin')
ImageRootName := 'color/color_fuses_0'
FuseTypes := [5,10,15,20,30]
FuseColors := ['Orange','Red','Blue','Yellow','Green']
FuseHighlight := ['orange','red','blue','goldenrod','forest green']
DisplayTextShift := [85,65,75,85,85]
dev_set_color ('white')
dev_set_line_width (2)
read_image (Image, ImageRootName + '0')
dev_display (Image)
* 
* Define ROIs for the training data of the classifier
* 定义ROI 进行颜色分类
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
gen_rectangle1 (FuseOrange, 195, 90, 230, 120)
dev_display (FuseOrange)
disp_message (WindowHandle, 'Orange Fuse', 'image', 160, 90 - 65, 'black', 'true')
gen_rectangle1 (FuseRed, 191, 280, 226, 310)
dev_display (FuseRed)
disp_message (WindowHandle, 'Red Fuse', 'image', 160, 280 - 55, 'black', 'true')
gen_rectangle1 (FuseBlue, 190, 470, 225, 500)
dev_display (FuseBlue)
disp_message (WindowHandle, 'Blue Fuse', 'image', 160, 470 - 60, 'black', 'true')
gen_rectangle1 (FuseYellow, 192, 672, 227, 702)
dev_display (FuseYellow)
disp_message (WindowHandle, 'Yellow Fuse', 'image', 160, 672 - 70, 'black', 'true')
gen_rectangle1 (FuseGreen, 197, 880, 232, 910)
dev_display (FuseGreen)
disp_message (WindowHandle, 'Green Fuse', 'image', 160, 880 - 65, 'black', 'true')
* 产生一个空的分类
gen_empty_obj (Classes)
* 将颜色逐一访日
concat_obj (FuseOrange, FuseRed, Classes)
concat_obj (Classes, FuseBlue, Classes)
concat_obj (Classes, FuseYellow, Classes)
concat_obj (Classes, FuseGreen, Classes)
disp_message (WindowHandle, 'ROIs for the training data', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 
* Create the GMM classifier, add the samples, and train it
* 创建模型
create_class_gmm (3, 5, 1, 'full', 'none', 3, 42, GMMHandle)
* 将图片和归类放入模型
add_samples_image_class_gmm (Image, Classes, GMMHandle, 0)
disp_message (WindowHandle, 'Training GMM classifier...', 'window', 48, 12, 'black', 'true')
* 进行高斯训练
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.001, Centers, Iter)
* 
* Create the GMM-based LUT classifier
disp_message (WindowHandle, 'Creating LUT classifier...', 'window', 84, 12, 'black', 'true')
* 创建分类器
create_class_lut_gmm (GMMHandle, ['bit_depth','rejection_threshold'], [6,0.03], ClassLUTHandle)
* 清除高斯句柄
clear_class_gmm (GMMHandle)
* 
* Segment images with LUT classifier
for Img := 0 to 3 by 1
    read_image (Image, ImageRootName + Img)
    count_seconds (T1)
    * 进行分类
    classify_image_class_lut (Image, ClassRegions, ClassLUTHandle)
    count_seconds (T2)
    TimeToClassify := (T2 - T1) * 1000
    dev_display (Image)
    dev_set_line_width (3)
    for Fuse := 1 to 5 by 1
        * 
        * Perform post-processing on returned classes
        copy_obj (ClassRegions, ObjectsSelected, Fuse, 1)
        * 闭运算先膨胀再腐蚀
        closing_circle (ObjectsSelected, RegionClosing, 3.5)
        * 形成单独的连通域
        connection (RegionClosing, ConnectedRegions)
        * 选取像素点的大小
        select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2500, 99999)
        *进行填充
        fill_up (SelectedRegions, RegionFillUp)
        * 获取坐标点的位置
        area_center (RegionFillUp, Area, Row, Column)
        * 包凸
        shape_trans (RegionFillUp, RegionTrans, 'convex')
        dev_set_color (FuseHighlight[Fuse - 1])
        dev_display (RegionTrans)
        * 
        disp_message (WindowHandle, FuseColors[Fuse - 1] + ' ' + FuseTypes[Fuse - 1] + ' A', 'image', Row - 10, Column - DisplayTextShift[Fuse - 1], FuseHighlight[Fuse - 1], 'white')
    endfor
    disp_message (WindowHandle, TimeToClassify$'.1f' + ' ms', 'window', 12, 12, 'black', 'true')
    if (Img < 3)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop ()
    endif
endfor
* 
clear_class_lut (ClassLUTHandle)
disp_message (WindowHandle, 'No more lines to execute', 'window', 50, 12, 'black', 'true')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载客流统计大揭秘——双目客流统计

客流统计大揭秘——双目客流统计 随着科技的飞速发展和商业竞争的加剧&#xff0c;客流统计已成为商业运营中不可或缺的一环。在众多客流统计技术中&#xff0c;双目客流统计以其高精度和高效率逐渐受到广大商家的青睐。本文将带您一探双目客流统计的奥秘。 一、什么是双目客流…

axure10的安装与使用教程,问题整理

前言&#xff1a; axure10的安装与激活使用教程。 1、百度网盘下载相关资料 链接&#xff1a;https://pan.baidu.com/s/1OSD9J1wVuIptGxeRzwjlpA?pwddkbj 提取码&#xff1a;dkbj 2、开始安装&#xff0c;点击setup的安装包 除了更改地址外&#xff0c;其他的默认就行&…

平台总线驱动和设备的匹配流程分析

参考文章:https://blog.csdn.net/qq_44182115/article/details/123231576 1、宏module_platform_driver // include/linux/platform_device.h 展开为 static int __init __platform_driver_init(void) \ {\return platform_driver_register(&

谷粒商城实战笔记-84-商品服务-API-新增商品-获取分类关联的品牌

文章目录 一&#xff0c;品牌查询接口的后台实现二&#xff0c;编码经验总结1&#xff0c;Controller层的作用1.1 参数处理1.2 调用Service1.3 处理Service返回结果实例 2&#xff0c;VO的封装时机3&#xff0c;Service中最好注入Service&#xff0c;不要直接依赖Dao 问题记录 …

BUGKU-CTF-WEB 源代码

URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 看看源码 存在script&#xff1a; <script> var p1 %66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65…

基于Gunicorn、Flask和Docker的高并发应用部署指南

一、简介 随着互联网的发展&#xff0c;现代应用程序需要处理越来越多的并发请求&#xff0c;高并发应用程序的需求促使开发者寻找可靠且高效的解决方案来管理和优化服务器负载。在这种背景下&#xff0c;Gunicorn、Flask和Docker成为构建和部署高并发应用的理想组合。 首先&…

一分钟了解VMware虚拟机三种网络模式区别

VMware虚拟机提供了三种主要的网络模式&#xff0c;分别是桥接模式&#xff08;Bridged Mode&#xff09;、网络地址转换模式&#xff08;NAT Mode&#xff09;和仅主机模式&#xff08;Host-Only Mode&#xff09;。这三种模式各有其特点和适用场景&#xff0c;以下是对它们之…

mysql的回表查询

大家好&#xff0c;我是程序媛雪儿&#xff0c;今天咱们聊mysql的回表查询&#xff0c;在mysql慢查询那篇文章中我们知道&#xff0c;当extra那一列显示&#xff0c;Using index condition&#xff0c;表示直接使用了索引&#xff0c;但是需要回表查询数据&#xff0c;这种情况…

GaussDB关键技术原理|高可用:逻辑复制

GaussDB关键技术原理|高可用&#xff1a;DCF&双集群容灾从DCF与双集群容灾技术两方面对GaussDB的高可用能力进行了介绍&#xff0c;本篇将从逻辑复制方面继续解读GaussDB高可用能力。 目录 3 逻辑复制 3.1 基本概念 3.2 逻辑解码 3.3 备机解码 3.4 并行解码 3.5 一致…

docker中使用nginx配置https访问

1.申请ssl证书: https://www.joyssl.com/certificate/select/free.html 免费的ssl证书&#xff08;一般有效期是90天&#xff09;到期后&#xff0c;则需要重新申请 申请完之后下载证书 然后到验证信息中 然后到自己的域名控制台 添加解析记录(这是ssl相关的,后面还要添加自…

电测量数据交换DLMSCOSEM组件第53部分:DLMSCOSEM应用层(上)

1.范围 本部分规定了DLMS/COSEM客户机和服务器的DLMS/COSEM应用层的结构、服务和协议。同时,定义规则规定DLMS/COSEM通信配置。 它定义了用于建立和释放应用程序连接的服务,以及用于访问GB/T17215.662中使用逻辑名称(LN)或短名称(SN)引用定义的COSEM接口对象的方法和属性…

Django实战:开启数字化任务管理的新纪元

&#x1f680; Django实战&#xff1a;开启数字化任务管理的新纪元 &#x1f310; &#x1f4d6; 引言 在数字化转型的浪潮中&#xff0c;任务管理的智能化成为提升组织效能的关键。今天&#xff0c;我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…

【算法刷题日志】信封嵌套问题

俄罗斯套娃信封问题 信封嵌套问题可以转换为最长递增子序列的问题。每次合法的嵌套都是大的套小的&#xff0c;就相当于找一个最长递增子序列&#xff0c;长度就是能嵌套的最多个数&#xff0c;所以我们可以先对宽度进行升序排序&#xff0c;如果宽度相同就按高度降序排序&…

动态SLAM:如何判断一个特征是动态特征(对极几何)

文章目录 1.什么是极线、极点和极面2.如何判断其为动态点特征3.如何判断其为动态线特征 1.什么是极线、极点和极面 由图可知&#xff0c;C1,C2,X(X1,X2)组成了一个三角平面&#xff0c;这个三角所在的平面就是极面 在这个极平面中&#xff0c;和成像平面相交的线是极线&#xf…

“2024青岛软博会”助力打造“世界工业互联网之都”

在数字经济浪潮的推动下&#xff0c;青岛国际软件融合创新展&#xff08;简称青岛软博会&#xff09;作为年度科技盛宴&#xff0c;不仅全面展示了青岛软件产业发展的辉煌成果&#xff0c;更聚焦于工业软件这一核心领域&#xff0c;为青岛乃至全国的软件产业转型升级注入了强劲…

【gmid】设计一个CS放大器

1.电路原理图 & 电路指标 设计指标&#xff1a; 负载电容CL2 pF增益带宽积GBW100 MHz增益 Av10gm/Id10 2. 根据电路指标进行 手算 2.1 确定 gm 2.2 确定负载电阻 RD 2.3 确定 Id Vov > 150mVgm/id < 10MOS管处于 强反型区Vov < 0gm/id 较大MOS管处于 亚阈值区0…

深入解析 Go 语言 GMP 模型:并发编程的核心机制

前言 本章是Go并发编程的起始篇章&#xff0c;在未来几篇文章中我们会围绕Go并发编程进行理论和实战的学习&#xff0c;欢迎关注我哦&#xff01; 本章主要以介绍GMP模型为主&#xff0c;偏向于面试和八股&#xff0c;目的是让小伙伴们注重于知识本身&#xff0c;面向面试&am…

昇思25天学习打卡营第20天|CV-ResNet50图像分类

打卡 目录 打卡 图像分类 ResNet网络介绍 数据集准备与加载 可视化部分数据集 残差网络构建 Building Block 结构 代码实现 Bottleneck结构 代码实现 构建ResNet50网络 代码定义 模型训练与评估 可视化模型预测 重点&#xff1a;通过网络层数加深&#xff0c;感知…

Windows系统使用Docker搭建Focalboard项目管理工具详细教程

目录 前言 1. 使用Docker本地部署Focalboard 1.1 在Windows中安装 Docker 1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具 3. 实现公网访问Focalboard 4. 固定Focalboard公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给…

TCP为什么需要四次挥手?

tcp为什么需要四次挥手&#xff1f; 答案有两个&#xff1a; 1.将发送fin包的权限交给被动断开发的应用层去处理&#xff0c;也就是让程序员处理 2.接第一个答案&#xff0c;应用层有了发送fin的权限&#xff0c;可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…