前言:
==========================================================
分类器相对于深度学习来讲是一种古老传统的图片处理技术。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://47.98.154.65/?id=1623
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路


















