svm matlab 图像分割,勇哥的视觉实验:SVM分类器(二) 支持向量机的应用例子,图片分割...

前言:

==========================================================

分类器相对于深度学习来讲是一种古老传统的图片处理技术。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%被占用。

分类器相对于深度学习来讲不吃硬件,所以相对来讲算是轻量级的应用。

==========================================================

这个例子在前面讲gmm的时候用过。

原始图片

b7af339cff38c667e8737a9ba7d78484.png

分割前训练用的区域,共4个。

Sea  蓝色海面

Deck   红色甲板

Walls   白墙

Chimney 黑色烟囱

e8ea20bee8a1c9b963732b04b0d0a46d.png

然后经过svm训练后,分割出来的效果如下

88ccc38f382da7c27844d529c0e99275.png

这个结果要对比一下gmm的结果,才更有意义。

gmm的结果如下图,其中黑色的部分是“不属于任何分类”的部分。

也就是说gmm自动会有一个“例外分类”。这也是为啥gmm支持异常检测的原因。这个异常就是“例外分类”。

而上面的svm的结果,是不会有例外分类的,因为程序指定4类,所以图片中所有部分都被划入指定的4个分类时。

6ed8a1f85da5f712bf22bfe0c51d213e.png

源码:* 这个示例程序演示了如何用支持向量机分类器分割RGB图像。分类器使用四种不同的颜色进行训练。

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']

* 创建4个region做为采样区域

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 ()

* 创建SVM,添加样本

create_class_svm (3, 'rbf', 0.1, 0.0005, 4, 'one-versus-all', 'normalization', 3, SVMHandle)

add_samples_image_class_svm (Image, Classes, SVMHandle)

dev_display (Image)

Message := 'Training ...'

disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')

* 训练

train_class_svm (SVMHandle, 0.001, 'default')

Message := Message + ' ready.'

Message[1] := 'Segment image using the classifier ...'

disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')

* 分割图片,也可以说是分类图片的不同部分

classify_image_class_svm (Image, ClassRegions, SVMHandle)

region_to_mean (ClassRegions, Image, ImageClass)

dev_display (ImageClass)

Message[1] := Message[1] + ' ready.'

disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')

代码没啥子好讲的。

就这样了。

---------------------

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

收藏 | 0点赞 | 0打赏作者

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值