700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > svm matlab 图像分割 勇哥的视觉实验:SVM分类器(二) 支持向量机的应用例子 图片分割...

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

时间:2021-07-17 21:26:18

相关推荐

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的时候用过。

原始图片

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

Sea 蓝色海面

Deck 红色甲板

Walls 白墙

Chimney 黑色烟囱

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

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

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

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

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

源码:*这个示例程序演示了如何用支持向量机分类器分割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:=['indianred','cornflowerblue','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:='Trainingregionsforthecolorclassifier'

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]:='Segmentimageusingtheclassifier...'

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

来源:

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。