颜色识别基于高斯混合模型(GMM)的查找表分类器(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')

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 高斯混合模型GMM)聚类是一种机学习方法,它是将数据集分成多个高斯分布的集合的过程。MATLAB中有一个专门用于GMM聚类的函数gmdistribution,可以用来确定数据集中存在的高斯分布的数量。通过使用该函数,可以将数据集分成不同的聚类。当然,可以使用其他聚类方法,例如K均值聚类,但GMM聚类具有以下优点: 1. 在确定聚类的数量时更加灵活,因为可以使用概率模型来估计每个聚类的权重。 2. 可以处理非球形簇,这是K均值聚类无法处理的。 3. 可以估计聚类的不确定性。 为了使用gmdistribution函数进行聚类,需要将待聚类的数据集作为参数传递给函数。还必须指定每个高斯分布的数量。最后,gmdistribution函数需要一个初始值矩阵来初始化每个高斯分布。可以选择从数据集中选取初始值,也可以使用一组随机值来初始化。在运行gmdistribution函数后,将返回一个包含数据点所属聚类的向量。可以使用这些向量来进一步分析和可视化数据。 总之,GMM聚类是一种有用的机学习技术,可用于将数据集分成不同的聚类。MATLAB中的gmdistribution函数可帮助用户确定聚类的数量和每个高斯分布的初始值,聚类之后可以进一步分析和可视化数据点。 ### 回答2: 高斯混合模型GMM)是一种基于概率分布建立的聚类方法。它假设每个聚类都可以用多个高斯分布来拟合,而这些高斯分布的加权和就形成了整个数据集的概率密度函数。Matlab提供了GMM聚类算法的实现,可以方便地进行聚类操作。 在Matlab中,通过调用gmdistribution函数可以建立一个GMM模型,并用数据集进行初始化。该函数的参数包括聚类数目、协方差类型、初始化方式等。在得到GMM模型后,可以使用fit函数对数据集进行拟合。fit函数会返回每个数据点属于每个聚类的概率值。 在对数据进行聚类后,可以使用gmdistribution对象的其他函数进行分析和可视化,如pdf函数可以计算某个点属于每个聚类的概率密度值,cluster函数可以给出数据集中每个点所属的聚类,plot函数可以绘制聚类的概率密度函数。此外,Matlab还提供了一些有关GMM的其他函数,如gmdistribution.fit和gmdistribution.random,可以用来生成满足GMM模型的数据集和对新数据进行预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值