图像处理之高斯混合模型

蔚落 2024-03-25 15:49 128阅读 0赞

一、高斯混合模型

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

二、步骤

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

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

  2. 定义特征类

    FuseColors := [‘红色’,’绿色’,’青色’,’蓝色’]

3.创建分类高斯模型

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

4.训练高斯混合模型

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

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

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

三、代码

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

8e1f87705dd94a83a05c44f5577f1147.png

  1. *此过程将dev_update_pcdev_update_vardev_update_window设置为“关闭”
  2. dev_update_off ()
  3. *关闭窗口
  4. dev_close_window ()
  5. *定义一个数组存放字符串
  6. FuseColors := ['红色','绿色','青色','蓝色']
  7. *创建一个空元组Classes
  8. gen_empty_obj (Classes)
  9. *读一张图像
  10. read_image (Image, 'C:/Users/Administrator/Desktop/101.png')
  11. *获得图像的宽和高
  12. get_image_size (Image, Width, Height)
  13. *打开一个和刚才获得的图像大小相同的窗口
  14. dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
  15. *窗口显示刚才读取的图像Image
  16. dev_display (Image)
  17. *定义区域的填充模式为边缘模式
  18. dev_set_draw('margin')
  19. *设置颜色为黑色
  20. dev_set_color ('black')
  21. *设置字体样式
  22. set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
  23. *在图片上显示消息
  24. disp_message (WindowHandle, '使用鼠标左键框选红色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')
  25. *画一个平行于坐标轴的矩形,包含图片中红色部分
  26. draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
  27. *用刚才选中的区域创建一个与坐标轴平行的矩形
  28. gen_rectangle1 (ROI_0, Row1, Column1, Row2, Column2)
  29. *连接两个标志性对象元组
  30. concat_obj (Classes, ROI_0, Classes)
  31. *显示Image图像
  32. dev_display (Image)
  33. *显示区域Classes
  34. dev_display (Classes)
  35. disp_message (WindowHandle, '使用鼠标左键框选绿色 ,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')
  36. *画一个平行于坐标轴的矩形,包含图片中绿色部分
  37. draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
  38. gen_rectangle1 (ROI_1, Row11, Column11, Row21, Column21)
  39. concat_obj (Classes, ROI_1, Classes)
  40. dev_display (Image)
  41. dev_display (Classes)
  42. disp_message (WindowHandle, '使用鼠标左键框选青色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')
  43. *画一个平行于坐标轴的矩形,包含图片中青色部分
  44. draw_rectangle1 (WindowHandle, Row12, Column12, Row22, Column22)
  45. gen_rectangle1 (ROI_2, Row12, Column12, Row22, Column22)
  46. concat_obj (Classes, ROI_2, Classes)
  47. dev_display (Image)
  48. dev_display (Classes)
  49. disp_message (WindowHandle, '使用鼠标左键框选蓝色,并按鼠标右键确定选择', 'window', 12, 12, 'black', 'false')
  50. *画一个平行于坐标轴的矩形,包含图片中蓝色部分
  51. draw_rectangle1 (WindowHandle, Row13, Column13, Row23, Column23)
  52. gen_rectangle1 (ROI_3, Row13, Column13, Row23, Column23)
  53. concat_obj (Classes, ROI_3, Classes)
  54. dev_display (Classes)
  55. *创建高斯混合模型进行分类
  56. create_class_gmm (3, 4, 1, 'spherical', 'normalization', 10, 42, GMMHandle)
  57. *将图像中的训练样本添加到高斯混合模型的训练数据中,其中Classes是被训练的区域
  58. add_samples_image_class_gmm (Image, Classes, GMMHandle, 0)
  59. *训练高斯混合模型
  60. train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)
  61. *使用高斯混合模型创建查找表以对字节图像进行分类
  62. create_class_lut_gmm (GMMHandle, [], [], ClassLUTHandle)
  63. *清除高斯混合模型
  64. clear_class_gmm (GMMHandle)
  65. *读一张图片放到Image1,然后识别其中的颜色
  66. read_image (Image1, 'C:/Users/Administrator/Desktop/102.png')
  67. *显示Image1
  68. dev_display (Image1)
  69. *使用查找表对字节图像进行分类
  70. classify_image_class_lut (Image1, ClassRegions, ClassLUTHandle)
  71. *For循环依次识别'红色','绿色','青色','蓝色'
  72. for Fuse := 1 to 4 by 1
  73. *复制HALCON数据库中的图标对象
  74. copy_obj (ClassRegions, ObjectsSelected, Fuse, 1)
  75. *用圆形结构元素关闭区域
  76. closing_circle (ObjectsSelected, RegionClosing, 3.5)
  77. *计算区域的连通分量
  78. connection (RegionClosing, ConnectedRegions)
  79. *借助形状特征选择区域
  80. select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
  81. *填补区域中的漏洞
  82. fill_up (SelectedRegions, RegionFillUp)
  83. *计算区域和区域中心
  84. area_center (RegionFillUp, Area, Row, Column)
  85. *变换区域的形状
  86. shape_trans (RegionFillUp, RegionTrans, 'convex')
  87. *元组中的对象数
  88. count_obj (RegionTrans, Number)
  89. *For循环将找到的颜色标注出来
  90. for j := 1 to Number by 1
  91. disp_message (WindowHandle, FuseColors[Fuse - 1], 'image', Row[j - 1] - 10, Column[j - 1] - 10, 'black', 'true')
  92. endfor
  93. endfor

识别

2cc1986ae795463b9f4cd4354687cf27.png

参考:

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

发表评论

表情:
评论列表 (有 0 条评论,128人围观)

还没有评论,来说两句吧...

相关阅读

    相关 图像处理混合模型

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

    相关 混合模型(GMM)

    1. 前言 高斯混合模型是使用高斯分布对原始数据进行估计,其中高斯函数的均值 μ \\mu μ和方差 σ \\sigma σ以及各个高斯函数分量占的比例 α \\alph