Halcon木板纹理识别

模板纹理识别的步骤
特征提取
图像处理(二值化选中感兴趣区域,灰度共生矩阵(原图和感兴趣区域)得到特征,sobel得到轮廓,灰度直方图得到特征)
创建分类器,添加特征,保存,识别
1.文件夹遍历
list_image_files(::ImageDirector,Options:ImageFiles)
ImageDirector:文件夹路径;
Options:搜索选项(‘default’默认值为’files’)
‘files’ 指定搜索的格式为文件
‘directories’ 指定走所得格式为文件夹
‘recursive ’ 指定可以遍历文件夹下的文件
‘follow_links’
‘max_depth 5’ 指定遍历的深度
‘max_files 1000’ 指定遍历的最大文件数目
Files:文件(文件的路径)
Eg. list_files (‘D:/资料库/Downloads’, [‘files’,’follow_links’], ImageFiles)
2.文件格式筛选
tuple_regexp_select(::Data,Expression:Selection)
Data:被选择的文件路径数组
Expression:文件格式的摘选规则
\. 转义
(bmp|JPG)筛选的文件格式
‘ignore_case’ 忽略大小写
Selection 选择出的文件路径的数组
Eg. tuple_regexp_select (ImageFiles,[‘\.(tif|tiff|gif|bmp|jpg)$’,’ignore_case’], ImageFiles)
3.图像的灰度共生矩阵
cooc_feature_image(Regions, Image : : LdGray, Direction : Energy, Correlation, Homogeneity, Contrast)
Regions:区域
Image :图像
LdGray:要区分灰度值的数量(默认值6)
List of value:1,2,3,4,5,6,7,8
Direction :计算矩阵的方向(默认0)
List of value :0,45,90,135,’mean‘
Energy:能量(是灰度共生矩阵各元素值的平方和,是对图像纹理的灰度变化稳定程度的度量,反映了图像灰度分布均匀程度和纹理粗细度。能量值大表明当前纹理是一种规则变化较稳定的纹理)
Correlation:相关性,用来度量图像的灰度级在行或列方向上的相关性程度,值越大相关性越大
Homogeneity:熵,是图像包含信息量的随机性度量,当共生矩阵中所有值均相等或者像素值表现出最大的随机性时,熵最大,熵值越大图像越复杂。
Contrast:反差,对比度(度量矩阵的值是如何分布的和图像中局部变化的多少,反映了图形的清晰度和纹理的沟纹深浅。纹理的沟纹越深,反差越大,效果清晰)
Eg.cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
4.sobel_amp(Image : EdgeAmplitude : FilterType, Size : )
Eg.sobel_amp(Image,EdgeAmplitude,’sum_abs’,3)
Sobel算子得到的一次导数计算得到的图像边缘
5.灰度直方图
Gray_histo_abs(Regions,Image::Quantization:AbsoluteHisto)
Quantization:灰度值的量化(将256分成几份)
AbsoluteHisto:得到的值
Eg. gray_histo_abs(EdgeAmplitude,EdgeAmplitude,8,AbsoluteHistoEdgeAmplitude)
6.创建分类器
create_class_mlp(::NumInput,NumHidden,NumOutPut,OutputFunction,Preprocessing,NumComponents,RandSeed:MLPHandle)
NumInput:输入变量的个数
NumHidden:隐藏层的单元数
NumOutPut:输出变量的数目
OutputFunction:输出层激励函数的类型’softmax’,’linear’,
‘logistic’(默认softmax)
Preprocessing:转换特征向量的处理方法
NumComponents:转换特征的数目
RandSeed:初始化多层感知器的随机数种子
MLPHandle:
Eg.create_class_mlp (NumFeatures, 15, 5, ‘softmax’, ‘normalization’, 10, 42, MLPHandle)
7.添加训练集
add_sample_class_mlp(::MLPHandle,Features,Target:)
MLPHandle:训练器
Features:被储存的特征值
Target:指定的类别或期望的返回向量
Eg. add_sample_class_mlp (MLPHandle, FeatureVector, i)
8.训练分类器
Train_class_mlp(::MLPHandle,MaxIterations,WeightTolerance,ErrorTolerance:Error,ErrorLog)
MLPHandle:
MaxIterations:优化算法的最大迭代次数
WeightTolerance:最优算法在两次迭代的不同权重的阈值
ErrorTolerance:在训练数据上最优算法在两次迭代的平均错误的差值阈值
Error:训练数据的平均误差
ErrorLog:作为一个优化算法的迭代次数函数在训练数据上的平均错误
Eg. train_class_mlp(MLPHandle,200,1,0.0001,Error,ErrorLog)

9.保存训练数据
Write_class_mlp(::MLPHandle,FileName:)
Eg. write_class_mlp(MLPHandle, ‘D://1.gmc’)
10.识别
classify_class_mlp(::MLPHandle,Features,Num:Class,Confidence)
Features:特征向量
Num:确定所属类的上限(选出几个结果)
Class:特征向量根据多层神经网络的分类结果(得到的结果)
Confidence:分类结果的置信度
Eg.
classify_class_mlp(MLPHandle,FeatureVector,1,FoundClassIDs, k)
本文识别了5个木板图片

list_files ('E:/HA/网络启蒙班二十讲/picture', ['files','follow_links'], Files)
tuple_regexp_select(Files,['\\.(jpg)$','ignore_case'],selection)
for Index := 0 to |Files|-1 by 1
dev_close_window ()
read_image (Image, Files[Index])
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
classes:=['1','2','3','4','5']
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 22, 254)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10000, 60000)
cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
gray_histo_abs (SelectedRegions, EdgeAmplitude, 8, AbsoluteHisto)
featureValue:=[Energy, Correlation, Homogeneity, Contrast,AbsoluteHisto]
cooc_feature_image (SelectedRegions, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
featureValue:=[featureValue,Energy, Correlation, Homogeneity, Contrast,AbsoluteHisto]
featureNum:=|featureValue|
featureVector:=real(featureValue)
if (Index=0)
*5为图片数目
create_class_mlp (featureNum, 10, 5, 'softmax', 'normalization', 10, 42, MLPHandle)
endif
add_sample_class_mlp (MLPHandle, featureVector,Index)
endfor
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
stop()
write_class_mlp (MLPHandle, 'D://2.gmc')
read_image (Image, 'E:/HA/网络启蒙班二十讲/picture/2.jpg')
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 22, 254)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10000, 60000)
cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
gray_histo_abs (SelectedRegions, EdgeAmplitude, 8, AbsoluteHisto)
featureValue:=[Energy, Correlation, Homogeneity, Contrast,AbsoluteHisto]
cooc_feature_image (SelectedRegions, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
featureValue:=[featureValue,Energy, Correlation, Homogeneity, Contrast,AbsoluteHisto]
featureVector:=real(featureValue)
classify_class_mlp (MLPHandle, featureVector, 1, Class, Confidence)
dev_display (Image)
disp_message (WindowHandle, classes[Class[0]], 'window', 12, 12, 'black', 'true')

猜你喜欢

转载自blog.csdn.net/weixin_43216599/article/details/82723045
今日推荐