程序练习5:MLP的纹理识别程序

*********************************木板的纹理识别程序
**********************************本程序知识量太大,需要多多研究!
***定义变量
FeaturesExtended:=[]
FeaturesExtended1:=[]
Classes := ['apple','beech','cherry','maple','oak']
NumberClasses := |Classes|
**加载图像文件
list_files ('F:/7.机器视觉/Halcon/halcon学习/纹理识别专题', ['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)
**初始化窗口
dev_close_window ()
read_image (Image, ImageFiles[0])
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)

for i := 0 to |ImageFiles| - 1 by 1
**1.提取特征
    read_image (Image, ImageFiles[i])
    rgb1_to_gray (Image, GrayImage)
    threshold (GrayImage, Region, 31, 254)
    connection (Region, ConnectedRegions)    
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)       
    **灰度共生矩阵,目的是提取纹理特征后面四个变量
    cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
    
    *sobel边缘检测
    sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
    **获得灰度直方图,8是量化因子
    gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHisto)
    FeaturesExtended:=[Energy, Correlation, Homogeneity, Contrast]
    **向特征数组中添加一个特征AbsoluteHisto
    FeaturesExtended:=[FeaturesExtended,AbsoluteHisto]
    cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
    
    *sobel边缘检测
    sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
    **获得灰度直方图,8是量化因子
    gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHisto)
    FeaturesExtended1 := [FeaturesExtended,Energy, Correlation, Homogeneity, Contrast]
    **向特征数组中添加一个特征AbsoluteHisto
    FeaturesExtended1 := [FeaturesExtended1,AbsoluteHisto]  
    **生成特征向量
    FeatureVector := real(FeaturesExtended1)
    **如果是第一张图像,则创建分类器。
    if(i == 0)
        ***2.创建分类器
        NumberFeatures := |FeaturesExtended1|
        create_class_mlp (NumberFeatures, 15, 5, 'softmax', 'normalization', 10, 42, MLPHandle)
    endif
    **3.添加样本到分类器中
    add_sample_class_mlp (MLPHandle, FeatureVector, i)
    stop()
endfor

**4.训练分类器
train_class_mlp (MLPHandle, 200, 1, 000.01, Error, ErrorLog)
stop()
**写入分类器
write_class_mlp (MLPHandle, 'D://1.gmc')

**5.分类器识别特征向量
for i := 0 to |ImageFiles|-1 by 1
    **提取测试样本的特征向量
    read_image (Image, ImageFiles[i])
    rgb1_to_gray (Image, GrayImage)
    threshold (GrayImage, Region, 31, 254)
    connection (Region, ConnectedRegions)
    
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
    Classes := ['apple','beech','cherry','maple','oak']
    **灰度共生矩阵,目的是提取纹理特征后面四个变量
    cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
    
    *sobel边缘检测
    sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
    **获得灰度直方图,8是量化因子
    gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHisto)
    FeaturesExtended:=[Energy, Correlation, Homogeneity, Contrast]
    **向特征向量中添加一个特征AbsoluteHisto
    FeaturesExtended:=[FeaturesExtended,AbsoluteHisto]
    cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
    
    *sobel边缘检测
    sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
    **获得灰度直方图,8是量化因子
    gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHisto)
    FeaturesExtended1 := [FeaturesExtended, Energy, Correlation, Homogeneity, Contrast]
    **向特征向量中添加一个特征AbsoluteHisto
    FeaturesExtended1 := [FeaturesExtended1,AbsoluteHisto]        
    **得到测试样本的特征向量
    FeatureVector := real(FeaturesExtended1)
    
    **识别测试样本的特征向量
    classify_class_mlp (MLPHandle, FeatureVector, 1, ClassIDs, Confidence)
    dev_display (Image)
    ImageFiles1 :='founde classes ' + Classes[ClassIDs[0]]
    disp_message (WindowHandle, ImageFiles1, 'image', 12, 12, 'black', 'true')
    stop()
endfor
disp_message (WindowHandle, '所有测试样本都已经识别完成...', 'window', 12, 12, 'black', 'true')
stop()

disp_message (WindowHandle, '所有工作完成...', 'window', 12, 12, 'black', 'true')
stop()

        

        这个程序虽然和之前的程序一样使用了MLP,但是这个程序涉及到了一个概念:特征向量。特征提取和特征识别始终贯穿了机器视觉的学习和使用,是核心中的核心。

    **灰度共生矩阵,目的是提取纹理特征后面四个变量
    cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)
        特征相加,相当于数组的加法:
    FeaturesExtended:=[FeaturesExtended,AbsoluteHisto]


猜你喜欢

转载自blog.csdn.net/shenseyoulan/article/details/80996852