日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HALCON示例程序classify_citrus_fruits.hdev应用常规gmm分类器进行水果分类

發布時間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HALCON示例程序classify_citrus_fruits.hdev应用常规gmm分类器进行水果分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HALCON示例程序classify_citrus_fruits.hdev應用常規gmm分類器進行水果分類

示例程序源碼(加注釋)

  • 讀入圖片、顯示與顯示相關設置
    read_image (Image, ‘color/citrus_fruits_01’)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, ‘white’, WindowHandle)
    set_display_font (WindowHandle, 12, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    dev_set_line_width (2)
    dev_display (Image)
    dev_update_window (‘off’)
    dev_update_pc (‘off’)
    dev_update_var (‘off’)

  • 定義變量數組
    FeaturesArea := []
    FeaturesCircularity := []
    ClassName := [‘orange’,‘lemon’]

  • 創建一個GMM分類器,這個函數之前的帖子介紹過
    create_class_gmm (2, 2, 1, ‘spherical’, ‘normalization’, 10, 42, GMMHandle)

  • 為分類器增加例子
    for i := 1 to 4 by 1
    read_image (Image, ‘color/citrus_fruits_’ + i$’.2d’)
    dev_display (Image)

    • 自定義函數
      get_regions (Image, SelectedRegions)
      將彩色圖像分割成RGB三個通道,并使用簡單bolo方法進行分析
      decompose3 (Image, ImageRed, ImageGreen, ImageBlue)
      dev_set_color (‘white’)
      threshold (ImageRed, Region, 50, 255)
      fill_up (Region, RegionFillUp)
      connection (RegionFillUp, ConnectedRegions)
      select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 50, 999999)
      return ()
    • 顯示SelectedRegions區域
      dev_display (SelectedRegions)
    • 對區域SelectedRegions進行計數
      count_obj (SelectedRegions, NumberObjects)
      for j := 1 to NumberObjects by 1
      • 選取數組當中的指定元素
        select_obj (SelectedRegions, ObjectSelected, j)
      • 自定義函數
        get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
        得到ObjectSelected區域的圓度值
        circularity (ObjectSelected, Circularity)
        求取ObjectSelected的面積與中心坐標
        area_center (ObjectSelected, Area, Row, Column)
        dev_set_color (‘white’)
        return ()

        FeaturesArea := [FeaturesArea,Area]
        FeaturesCircularity := [FeaturesCircularity,Circularity]
      • real將輸入數組元素轉換為浮點數形式
        FeatureVector := real([Circularity,Area])
        if (i <= 2)
        • add_sample_class_gmm - 將訓練樣本添加到高斯混合模型的訓練數據中
        • add_sample_class_gmm(:: GMM句柄,樣本要素向量,類別ID,隨機噪聲:)
          add_sample_class_gmm (GMMHandle, FeatureVector, 0, 0)
        • 顯示信息
          disp_message (WindowHandle, ‘Add to Class:’ + ClassName[0], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
          else
          add_sample_class_gmm (GMMHandle, FeatureVector, 1, 0)
          disp_message (WindowHandle, ‘Add to Class:’ + ClassName[1], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
          endif
          endfor
    • 顯示按F5繼續
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endfor
      dev_clear_window ()
  • 構建可視化空間,即二維坐標系
    visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[0:5], FeaturesCircularity[0:5], ‘dim gray’, 18)
    dev_set_color (‘black’)
    OriginOfGraph := [Height - 0.1 * Height,0.1 * Width]
    畫箭頭
    disp_arrow (WindowID, OriginOfGraph[0], OriginOfGraph[1], OriginOfGraph[0], Width - 0.2 * Width, 2)
    disp_arrow (WindowID, OriginOfGraph[0], OriginOfGraph[1], 0.1 * Height, OriginOfGraph[1], 2)
    顯示橫縱坐標的名稱
    set_tposition (WindowID, OriginOfGraph[0], Width - 0.2 * Width)
    write_string (WindowID, ‘Area’)
    set_tposition (WindowID, 0.07 * Height, OriginOfGraph[1])
    write_string (WindowID, ‘Circularity’)
    dev_set_color (ColorFeatureVector)
    ExtentOfGraph := Height - 0.3 * Height
    RangeC := 0.5
    RangeA := 24000
    ScaleC := ExtentOfGraph / RangeC
    ScaleA := ExtentOfGraph / RangeA
    MinC := 0.5
    MinA := 20000
    NumberFeatureVectors := |FeaturesA|
    for i := 0 to NumberFeatureVectors - 1 by 1
    DiffC := ScaleC * (FeaturesC[i] - MinC)
    DiffA := ScaleA * (FeaturesA[i] - MinA)
    RowFeature := OriginOfGraph[0] - DiffC
    ColumnFeature := OriginOfGraph[1] + DiffA
    畫X號
    gen_cross_contour_xld (Cross, RowFeature, ColumnFeature, CrossSize, 0.785398)
    dev_display (Cross)
    endfor
    return ()

  • 檸檬的自定義函數
    visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[6:11], FeaturesCircularity[6:11], ‘light gray’, 18)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

  • 訓練分類器train_class_gmm(:: 分類器句柄,最大迭代次數,閾值,計算方法,規范單一協方差矩陣:類中心數量,每個類的迭代次數)
    train_class_gmm (GMMHandle, 100, 0.001, ‘training’, 0.0001, Centers, Iter)

  • 分類
    for i := 1 to 15 by 1
    read_image (Image, ‘color/citrus_fruits_’ + i$’.2d’)
    dev_display (Image)

    • 和上文get_regions含義一致
      get_regions (Image, SelectedRegions)
      dev_display (SelectedRegions)
      count_obj (SelectedRegions, NumberObjects)
      for j := 1 to NumberObjects by 1
      select_obj (SelectedRegions, ObjectSelected, j)
      get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
      FeaturesArea := [FeaturesArea,Area]
      FeaturesCircularity := [FeaturesCircularity,Circularity]
      FeatureVector := real([Circularity,Area])
      • classify_class_gmm - 通過高斯混合模型計算特征向量的類。
      • 函數原型classify_class_gmm(:: 分類器句柄,特征向量,確定的最佳類數:分類結果,類的后驗概率,概率密度,歸一化概率)
        classify_class_gmm (GMMHandle, FeatureVector, 1, ClassID, ClassProb, Density, KSigmaProb)
      • 顯示
        disp_message (WindowHandle, 'Class: ’ + ClassName[ClassID], ‘window’, RowRegionCenter, ColumnRegionCenter - 100, ‘black’, ‘true’)
        disp_message (WindowHandle, 'KSigmaProb: ’ + KSigmaProb, ‘window’, RowRegionCenter + 30, ColumnRegionCenter - 100, ‘black’, ‘true’)
        endfor
        if (i != 15)
        disp_continue_message (WindowHandle, ‘black’, ‘true’)
        endif
        stop ()
        endfor
  • 清除訓練句柄
    clear_class_gmm (GMMHandle)

處理思路

這個例子介紹了GMM分類器的使用方法,步驟是create_class_gmm 、add_sample_class_gmm、train_class_gmm、classify_class_gmm 先創建分類器,為分類器添加樣本,訓練分類器,使用分類器對進行分類。一個全面介紹GMM分類器使用的一個例子。通過GMM分類器實現了橙子和檸檬 的分類。

后記

大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。

總結

以上是生活随笔為你收集整理的HALCON示例程序classify_citrus_fruits.hdev应用常规gmm分类器进行水果分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。