图像处理之高斯混合模型

article/2025/10/12 8:58:52

一、高斯混合模型

现有的图像中目标的分类常用深度学习模型处理,但是深度学习需要大量模型处理。对于明显提取的目标,常常有几个明显特征,利用这几个明显特征使用少量图片便可以完成图像目标分类工作。这里介绍使用高斯混合模型GMM处理图像。

二、步骤

1. 先提取特征,提取区域特征(或者边缘,灰度特征等)

draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)  
*用刚才选中的区域创建一个与坐标轴平行的矩形  
gen_rectangle1 (ROI_0, Row1, Column1, Row2, Column2)  

2. 定义特征类

FuseColors := ['红色','绿色','青色','蓝色']  

3.创建分类高斯模型

creat_class_gmm(2,2,1,'spherical','normalization',10,42,GMMHandle)

4.训练高斯混合模型

train_class_gmm(GMMHandle,100,0.001,'training',0.0001,centers,Iter)

5.使用高斯混合模型分类

classify_class_gmm(GMMHandle,FeatureVector,1,classID,classProb,Density,KSigmaProb)

三、代码

下面两张简单的图,第一张用来训练,训练好后进行识别第二张的颜色;

*此过程将dev_update_pc、dev_update_var和dev_update_window设置为“关闭”  
dev_update_off ()  
*关闭窗口  
dev_close_window ()  
*定义一个数组存放字符串  
FuseColors := ['红色','绿色','青色','蓝色']  
*创建一个空元组Classes  
gen_empty_obj (Classes)  
*读一张图像  
read_image (Image, 'C:/Users/Administrator/Desktop/101.png')  
*获得图像的宽和高  
get_image_size (Image, Width, Height)  
*打开一个和刚才获得的图像大小相同的窗口  
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)  
*窗口显示刚才读取的图像Image  
dev_display (Image)  
*定义区域的填充模式为边缘模式  
dev_set_draw('margin')  
*设置颜色为黑色  
dev_set_color ('black')  
*设置字体样式  
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')  
*在图片上显示消息  
disp_message (WindowHandle, '使用鼠标左键框选红色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')  
*画一个平行于坐标轴的矩形,包含图片中红色部分  
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)  
*用刚才选中的区域创建一个与坐标轴平行的矩形  
gen_rectangle1 (ROI_0, Row1, Column1, Row2, Column2)  
*连接两个标志性对象元组  
concat_obj (Classes, ROI_0, Classes)  
*显示Image图像  
dev_display (Image)  
*显示区域Classes  
dev_display (Classes)  
disp_message (WindowHandle, '使用鼠标左键框选绿色 ,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')  
*画一个平行于坐标轴的矩形,包含图片中绿色部分  
draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)  
gen_rectangle1 (ROI_1, Row11, Column11, Row21, Column21)  
concat_obj (Classes, ROI_1, Classes)  
dev_display (Image)  
dev_display (Classes)  
disp_message (WindowHandle, '使用鼠标左键框选青色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')  
*画一个平行于坐标轴的矩形,包含图片中青色部分  
draw_rectangle1 (WindowHandle, Row12, Column12, Row22, Column22)  
gen_rectangle1 (ROI_2, Row12, Column12, Row22, Column22)  
concat_obj (Classes, ROI_2, Classes)  
dev_display (Image)  
dev_display (Classes)  
disp_message (WindowHandle, '使用鼠标左键框选蓝色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')  
*画一个平行于坐标轴的矩形,包含图片中蓝色部分  
draw_rectangle1 (WindowHandle, Row13, Column13, Row23, Column23)  
gen_rectangle1 (ROI_3, Row13, Column13, Row23, Column23)  
concat_obj (Classes, ROI_3, Classes)  
dev_display (Classes)  
*创建高斯混合模型进行分类  
create_class_gmm (3, 4, 1, 'spherical', 'normalization', 10, 42, GMMHandle)  
*将图像中的训练样本添加到高斯混合模型的训练数据中,其中Classes是被训练的区域  
add_samples_image_class_gmm (Image, Classes, GMMHandle, 0)  
*训练高斯混合模型  
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)  
*使用高斯混合模型创建查找表以对字节图像进行分类  
create_class_lut_gmm (GMMHandle, [], [], ClassLUTHandle)  
*清除高斯混合模型  
clear_class_gmm (GMMHandle)  
*读一张图片放到Image1,然后识别其中的颜色  
read_image (Image1, 'C:/Users/Administrator/Desktop/102.png')  
*显示Image1  
dev_display (Image1)  
*使用查找表对字节图像进行分类  
classify_image_class_lut (Image1, ClassRegions, ClassLUTHandle)  
*For循环依次识别'红色','绿色','青色','蓝色'  
for Fuse := 1 to 4 by 1  *复制HALCON数据库中的图标对象  copy_obj (ClassRegions, ObjectsSelected, Fuse, 1)  *用圆形结构元素关闭区域  closing_circle (ObjectsSelected, RegionClosing, 3.5)  *计算区域的连通分量  connection (RegionClosing, ConnectedRegions)  *借助形状特征选择区域  select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)  *填补区域中的漏洞  fill_up (SelectedRegions, RegionFillUp)  *计算区域和区域中心  area_center (RegionFillUp, Area, Row, Column)  *变换区域的形状  shape_trans (RegionFillUp, RegionTrans, 'convex')  *元组中的对象数  count_obj (RegionTrans, Number)  *For循环将找到的颜色标注出来  for j := 1 to Number by 1  disp_message (WindowHandle, FuseColors[Fuse - 1], 'image', Row[j - 1] - 10, Column[j - 1] - 10, 'black', 'true')  endfor  
endfor

 识别

 参考:

 (机器视觉)Halcon下颜色识别与联合C#撸代码!1 | 码农家园

 

 


http://chatgpt.dhexx.cn/article/mofFF4iu.shtml

相关文章

机器学习 高斯混合模型

高斯混合模型 前言高斯混合模型高斯分布混合模型高斯模型单高斯模型高斯混合模型高斯混合模型训练EM算法 应用图像背景的高斯混合模型智能监控系统 参考 前言 之前在一次技术讨论当中,针对文本处理的时候被问到高斯混合模型。当时我对“高斯混合模型”都是比较懵圈…

高斯混合模型GMM

1. 高斯混合模型概念 高斯混合模型(Gaussian Mixture Model)是一种聚类算法,它是多个高斯分布函数的线性组合,通常用于解决同一集合下的数据包含多种不同的分布情况。 2.高斯混合模型的一个例子 在校园里随机抽取2000个学生&#…

高斯混合模型

一、什么是高斯混合模型(GMM) 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,通常用于解决同一集合下的数据包含多个不同的分布的情况,如解决分类情况 如下图,明显分成两…

【技术分享】高斯混合模型

本文原作者:尹迪,经授权发布。 原文链接:https://cloud.tencent.com/developer/article/1480731 导语:现有的高斯模型有单高斯模型(SGM)和高斯混合模型(GMM)两种。从几何上讲&#…

高斯混合模型(GMM)

高斯混合模型 k-means 聚类模型非常简单并且易于理解,但是它的简单性也为实际应用带 来了挑战。特别是在实际应用中,k-means 的非概率性和它仅根据到簇中心点的距离来指 派簇的特点将导致性能低下。这一节将介绍高斯混合模型,该模型可以被看…

机器学习笔记 - 什么是高斯混合模型(GMM)?

1、高斯混合模型概述 高斯混合模型 (GMM) 是一种机器学习算法。它们用于根据概率分布将数据分类为不同的类别。高斯混合模型可用于许多不同的领域,包括金融、营销等等!这里要对高斯混合模型进行介绍以及真实世界的示例、它们的作用以及何时应该使用GMM。 高斯混合模型 (GMM) …

机器学习算法(二十九):高斯混合模型(Gaussian Mixed Model,GMM)

目录 1 混合模型(Mixture Model) 2 高斯模型 2.1 单高斯模型 2.2 高斯混合模型 3 模型参数学习 3.1 单高斯模型 3.2 高斯混合模型 4 高斯混合模型与K均值算法对比 1 混合模型(Mixture Model) 混合模型是一个可以用来表示在总…

重启虚拟机异常:Unmount and run xfs_repair

重启虚拟机异常:Unmount and run xfs_repair 解决办法: 原因:看出来应该是sda3分区损坏,修复就可以了 1:启动虚拟机E进入单用户模式 2:在linux16开头的哪一行后面添加rd.break,ctrlx进入救援模式…

Unmount and run xfs_repair

开启虚拟机报错:Unmount and run xfs_repair 从错误可以查看到是vda3错误。 解决办法: 1、umount /dev/vda3 2、xfs_repair -L /dev/vda3 3、reboot 就ok了。

Linux mount/unmount命令

开机自动挂载 如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。 文件挂载的配置文件:/etc/fstab 查看此文件可知 每行定义一个要挂载的文件系统; 其每行的格式如下 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项…

android.permission.MOUNT_UNMOUNT_FILESYSTEMS添加权限报错

<!--这是在sd卡内创建和删除文件权限--> <uses-permission android:name"android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name"android.permission.WRITE_SETTINGS" /> 出现报错有两种解决方法&#xff1…

Centos7 虚拟机非法关机导致系统无法启动报Unmount and run xfs_repair的解决方法

1&#xff0c;电脑不正常启动导致我的虚拟机无法启动&#xff0c;报以下错误Unmount and run xfs_repair&#xff0c;大概意思是xfs文件系统出现问题了&#xff0c;导致无法挂载&#xff0c;需要使用xfs_repair进行修复。 2&#xff0c;执行如下命令 xfs_repair /dev/mapper/c…

linux下unmount了移动硬盘之后,硬盘灯还是常亮并且硬盘还在一直转动

linux下unmount了移动硬盘之后&#xff0c;硬盘灯还是常亮并且硬盘还在一直转动 ​ 参考:https://www.zhihu.com/question/23362385 希捷2T移动硬盘 在windows下卸载硬盘之后硬盘灯就不亮了&#xff0c;手摸也没有震动感。 在ubuntu下卸载硬盘之后&#xff0c;硬盘灯仍然常…

centos7异常断电,重启提示Unmount and run xfs_repair

周末服务器由于阵列卡问题&#xff0c;异常重启&#xff0c;重启后前台异常报错&#xff0c;提示磁盘元数据问题&#xff0c;需要修复 如故障图所示&#xff0c;sdb1&#xff0c;sdf1&#xff0c;sdi1 3块磁盘出现问题&#xff0c; 下面的解决办法&#xff1a; 解决办法&…

Android/C/C++ 中解决 USB UnMount(禁止USB端口)

引&#xff1a;因为某些特殊需求&#xff0c;需要在某些设备接入车机的时候&#xff0c;动态UnMount USB设备&#xff0c;因为代码其中有一些方法是自定义过的&#xff0c;所以该文章仅供思路参考。 &#xff08;20200319 更新&#xff09;&#xff1a;在后续跟进中&#xff0…

linux移动硬盘unmount报错处理

备份数据用的移动硬盘unmount时报&#xff1a; 通过fuser命令来kill掉设备进程&#xff0c;再unmount移动设备 先看fuser命令帮助信息&#xff1a; [rootathenadb2 ~]# fuser -helpUsage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME... [ - ] [ -n SPAC…

虚拟机 报错:Unmount and run xfs_repair

1&#xff0c;启动虚拟机的时候&#xff0c;摁 E 键 找到linux16 这一行(在fi下一行) 的最后&#xff0c;添加&#xff1a; rd.break 摁 &#xff1a;ctrlx进入救援模式 2&#xff0c;执行&#xff1a;umount /dev/sda3 xfs_repair -L /dev/sda3 …

VMware 安装Centos7 虚拟机 报Unmount and run xfs_repair

VMware 安装Centos7 虚拟机 报Unmount and run xfs_repair 问题描述 安装完虚拟机后重启无法进入用户登录界面 报错&#xff1a;Unmount and run xfs_repair 原因&#xff1a; dm-0分区损坏 解决办法 卸载目录 umount /dev/mapper/centos-root 修复目录 xfs_repair -L…

linux 开机遇见unmount and run xfs_repair

vmware 开机提示 看不懂反正提示 dm-0 没有正确挂载&#xff0c;需要修复 直接上干货执行如下两条命令 ls -l /dev/mapper xfs_repair /dev/mapper/cl_root 或是 xfs_repair -L /dev/mapper/cl_root echo $? 如果返回零&#xff0c;代表成功 最后重启服务器即可 init 6

Linux虚拟机(lvm)报Unmount and run xfs_repair

原因&#xff1a;因为突然断电&#xff0c;导致机器关闭 结果&#xff1a;发现有一台虚拟机无法启动&#xff0c;一直报错 Unmount and run xfs_repair 分析&#xff1a;主机异常掉电后里面的虚拟机无法启动&#xff0c;主要是损坏的分区 解决办法&#xff1a; 原因&#x…