最近在学halcon的时候看到有个奇怪的代码程序。
halcon代码
* dev_get_window (WindowHandle)
* create_class_mlp (3, 7, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
* dev_set_color ('red')
* Image Acquisition 03: Code generated by Image Acquisition 03
* list_files ('D:/shijue/fangshuidai/dongfangyuhonhg2/reg', ['files','follow_links'], ImageFiles)
* tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
* for Index := 0 to |ImageFiles| - 1 by 1
* read_image (Image, ImageFiles[Index])
* dev_display (Image)
* draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
* gen_rectangle1 (Rectangle1, Row1, Column1, Row2, Column2)
* dev_display (Image)
* draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
* gen_rectangle1 (Rectangle2, Row11, Column11, Row21, Column21)
* concat_obj (Rectangle1, Rectangle2, Classes)
* add_samples_image_class_mlp (Image, Classes, MLPHandle)
* endfor
* train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
* write_class_mlp (MLPHandle, 'mlp3.gmc')
后面做项目的时候才了解到,这个和OpenCV的深度学习有点像,叫做Halcon分类器。在现实的项目应用中挺好用的,可以解决图片相似但是不一样的很多问题。
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
//分类器训练算子
分类器代码有一下几部分组成
list_files ('D:/shijue/fangshuidai/dongfangyuhonhg2/reg', ['files','follow_links'], ImageFiles)
* tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
* for Index := 0 to |ImageFiles| - 1 by 1
* read_image (Image, ImageFiles[Index])
读取训练图片的路径。
//绘制你所需要的区域
dev_display (Image)
* draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
* gen_rectangle1 (Rectangle1, Row1, Column1, Row2, Column2)
//绘制你区域的需要区域
* dev_display (Image)
* draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
* gen_rectangle1 (Rectangle2, Row11, Column11, Row21, Column21)
绘制区域。
//将2个绘制的区域进行合并
* concat_obj (Rectangle1, Rectangle2, Classes)
//将合并后的存放好
* add_samples_image_class_mlp (Image, Classes, MLPHandle)
分类器训练算子
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
写入和读取分类器
write_class_mlp (MLPHandle, 'mlp4.gmc')
read_class_mlp ('mlp3.gmc', MLPHandle)
现在展示一下绘制区域的区域怎么选择
对于第1个区域的选择,我们直接选取整张图片
对需要的区域进行绘制,对于这样子的项目图片而言,我需要的是定义包装袋的形状中心,但是包装袋的四个角会对识别出现很大的误差,所以我们在选取需要区域是可以将有影响的范围舍弃。
然后直接进行下一步执行到
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
分类器就会开始自己运算。
因为Halcon的分类器运算是选取CPU进行运算的,而且运算量会非常的大,运算时间非常的长,所以正常情况下往往只选取3-4张图片进行运算。
up自己的电脑是暗影精灵5,i7-9750h,对7张图片的运算耗时4万1千多秒约为11小时,所以在正常分类是根据具体情况具体分析。在视觉项目中,如果你用的是Halcon来处理图片分类器其实会很常用到,如果用OpenCV来处理图片更多会上图像标定和深度学习。从难易度上说Halcon明显比OpenCV简单,但是OpenCV的功能更为强大。