step1:准备数据
在图像选择区域作为训练集,可以是矩形,也可以是任意形状的区域。
step2:创建一个MLP
step3:添加训练数据
step4:查看训练样本数量(非必须)
step5:训练
step6:映射颜色表
step7:使用
step8:看效果
参考:classify_image_class_luthdev,texture_laws_mlphdev,segment_citrus_fruitshdev
参考:create_class_mlp (Operator)
1、将MLP模型写入文件
write_class_mlp( : : MLPHandle, FileName : )
2、从文件中读入一个MLP模型
read_class_mlp( : : FileName : MLPHandle)
3、清除MLP
clear_class_mlp( : : MLPHandle : )
halcon摄像机初始参数设置
StartCamParam (input_control)数阵-> (实数/整数) Camer type 为: 'area_scan_division' 'area_scan_polynomial,
Halcon对三角形进行开运算的算子是"opening_shape"。它可以对二值图像中的三角形进行开运算 *** 作,即先进行腐蚀 *** 作,再进行膨胀 *** 作,用于去除小的噪点和连接不完整的三角形。
对于规则形状的识别,可以使用不同的特征值来描述不同的形状。对于圆形,可以使用圆形度(circularity)作为特征值,圆形度定义为轮廓面积除以其最小外接圆面积。而对于三角形,可以使用诸如边长、内角、周长、面积等特征值来描述。Halcon中可以使用函数"shape_features"来计算形状的特征值,该函数可以计算诸如面积、周长、中心、方向、最小外接矩形等多种特征值。
最近看到一个例子,来自一个论坛,提问者想要计算图中木头的数量,悬赏了分值但是没人回复,我看到的时候这帖子已经过去好几年了。作为一个肤浅的初学者,我觉得这问题很有趣,所以打算从这个例子入手,研究下Halcon中的图像处理。
首先,从二值化开始,这张图在刚开始二值化之后出现一些问题。阈值设的高了,会弱化边角一些木头的局部区域,设的低了,会造成一些粘连。而且图像中还有一些干扰。如何在保留边角局部信息的情况下尽可能的防止粘连,是个问题。
结合这个问题,我的思路是分两步走。先把边角一些小的木头区域提取出来,再专门解决粘连的问题,问题得到了解决。
区分大小的依据主要是面积,在做了一些基本的预处理之后,可以把较小的一部分区域图像,如靠近四个边的部分木头,先分割出来了。这个过程中,需要对木头边缘做一些处理,去掉外圈的树皮,和一些干扰的区域,提取出木头截面的大块部分。
得到下图:
这一步就比较简单了,没有小面积区域的顾虑,可以做下腐蚀,让边缘更加清晰。这样就分割开来了。
把上一部分割出的大小区域分别合并,即得到木头的总数了。
btw:这个例子我也做过分水岭算法的测试,但是效果不尽如人意,主要是分割出来的区域太多了,比如图中那片白色的干扰物、右小方的竹棍等,也分割出来了。而边角一些木头的边缘区域又很难顾及到。也可能是参数设置的不够好,所以这个算法我还在研究。
以上是我自己的一些浅薄的思路,希望随着学习的深入,能发现更好的方式。
在上一步,完成了网络的创建和数据的预处理。接下来准备对这个网络进行训练,通过训练得到一个可以用于目标检测的深度学习网络模型。这里首先要确定上一步输出的模型和数据集的存放路径是可用的,否则训练环节会因为缺少输入而报错。
Halcon的参考样例detect_pills_deep_learning_2_trainhdev详述了这一过程,这里做一些学习记录。
设置输入路径,主要是两个,一是上一步的预训练的以hdl结尾的模型,另一个是数据集和样本数据字典的存放路径。
输出路径也是两个,一是存放最佳评估模型的路径,一个是最终训练完成的模型路径。
首先用check_files_availability验证预处理模型和数据集路径是否正确。没有问题的话可以开始读取。
使用read_dl_model读取前一步初始化后的网络模型,得到模型的句柄DLModelHandle。
接着用read_dict读取预处理后的数据集,得到数据字典句柄DLDataset。
设置模型参数主要通过set_dl_model_param算子,以修改属性值的方式改变关键参数的值。该算子原型如下:
set_dl_model_param( : : DLModelHandle, GenParamName, GenParamValue : )
输入三个参数:
注意,如果将'runtime'的值改为了’gpu’,则要确定cuDNN和cuBLAS已经成功安装了。
通过set_dl_model_param算子,可以将本文开头提到的设置的模型的基本参数传递给模型句柄DLModelHandle。如将'batch_size'设为之前的batch_size的值等等。
1)创建训练参数。
这里使用create_dl_train_param算子创建一个训练参数的字典,用于存放训练参数和训练效果可视化的参数。这些参数可以做个说明:
2)训练网络
接下来是最耗时的部分,即使用train_dl_model算子进行深度学习网络模型的训练。算子如下:
train_dl_model( : : DLDataset, DLModelHandle, TrainParam, StartEpoch : TrainResults, TrainInfos,EvaluationInfos)
前四个参数是输入参数,后三个是输出参数。
接着到了第三步,即验证模型的部分。
以上就是关于halcon多层感知器MLP的使用全部的内容,包括:halcon多层感知器MLP的使用、Halcon中提取二维码的参数有哪些、halcon对三角形进行开运算的算子是什么,对规则形状进行识别,圆用圆形度,三角形应该用什么特征值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)