前言:
==========================================================
分类器相对于深度学习来讲是一种古老传统的图片处理技术。halcon中常见的有四类分类器:
MLP(多层神经网络neural Nets)
SVM(支持向量机)
K-NN(K-最邻近)
GMM(高斯混合类型)
分类器的应用领域主要是下面这些:
image segmentation 图像分割
object recognition 对象识别
quality control 质量控制
novelty detection 缺陷检测
optical character recognition(OCR) 光学字符识别
勇哥第一次见到分类器的视觉项目是锂电池的极片缺陷检测,效果还不错。
这两年深度学习火起来后,发现深度学习完成上面所说的领域的应用更容易,效果也更好。
但深度学习对硬件要求太高,你把IPC加装个一百多W的显卡很多时候是不现实的。
如果你用cpu来跑,会发现速度乎快乎慢,cpu全部内核会100%被占用。
分类器相对于深度学习来讲不吃硬件,所以相对来讲算是轻量级的应用。
==========================================================
(一)首先创建4个区域,它代表四个要分割的特征
分别为蓝、红、黑、白四个区域
(二)分割结果如下图。
其中黑色部分为不属于以上四种特征的部分。
程序:
* This example program shows how to segment an RGB image with a GMM * classifier. The classifier is trained with four different colors. In contrast to * other classifiers, colors that have not been trained can be rejected easily. dev_update_off () dev_close_window () dev_open_window (0, 0, 735, 485, 'black', WindowHandle) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_set_draw ('margin') dev_set_colored (6) dev_set_line_width (3) read_image (Image, 'patras') dev_display (Image) Color := ['indian red','cornflower blue','white','black','yellow'] * Create regions that contain the training samples of the four classes gen_rectangle1 (Sea, 10, 10, 120, 270) gen_rectangle2 (Deck, [170,400], [350,375], [-0.56,-0.75], [64,104], [26,11]) union1 (Deck, Deck) gen_rectangle1 (Walls, 355, 623, 420, 702) gen_rectangle2 (Chimney, 286, 623, -0.56, 64, 33) concat_obj (Sea, Deck, Classes) concat_obj (Classes, Walls, Classes) concat_obj (Classes, Chimney, Classes) dev_set_color (Color[0]) dev_display (Deck) dev_set_color (Color[1]) dev_display (Sea) dev_set_color (Color[2]) dev_display (Walls) dev_set_color (Color[3]) dev_display (Chimney) Message := 'Training regions for the color classifier' disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true') disp_continue_message (WindowHandle, 'black', 'true') stop () * Create the classifier and add the samples. create_class_gmm (3, 4, [1,10], 'full', 'none', 2, 42, GMMHandle) add_samples_image_class_gmm (Image, Classes, GMMHandle, 2.0) dev_display (Image) Message := 'Training ...' disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true') * Train the classifier. train_class_gmm (GMMHandle, 500, 1e-4, 'uniform', 1e-4, Centers, Iter) Message := Message + ' ready.' Message[1] := 'Segment image using the classifier ...' disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true') * Segment (classify) the image. classify_image_class_gmm (Image, ClassRegions, GMMHandle, 0.0001) region_to_mean (ClassRegions, Image, ImageClass) dev_display (ImageClass) Message[1] := Message[1] + ' ready.' disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
注意下面的代码:
create_class_gmm (3, 4, [1,10], 'full', 'none', 2, 42, GMMHandle)
第三个参数是个数组,含义:GMM由每个类的NumCenters高斯中心组成。 NumCenters不仅可以是要使用的确切中心数目,而且可以根据参数的数目指定中心数目的上限和下限。
详细见:http://www.skcircle.com/?id=1623
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

