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分類器實現了橙子和檸檬 的分類。

后記

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python進階10 MySQL補充 編碼、別名、視圖、數據庫修改

python進階10 MySQL補充 編碼、別名、視圖、數據庫修改 一、編碼問題 #MySQL級別編碼 #修改位置&#xff1a; /etc/mysql/mysql.conf.d/mysqld.cnf default-character-set utf8character-set-server utf8 collation-server utf8_general_ci#最佳實踐 #1、無論mysql是否設…

教你如何剖析源碼

一、源碼閱讀需求 在學習中&#xff0c;我們會需要了解&#xff0c;學習&#xff0c;使用一個框架&#xff0c;一個新的函數庫。在工作中&#xff0c;因為業務需求&#xff0c;因為性能問題&#xff0c;可能通過一個更高性能的工具&#xff0c;架構去優化我們的程序。 那么&…

SPEL + 中的錯誤處理

SPEL 中的錯誤處理 如果在SPEL程序中發生錯誤&#xff0c;可以將執行轉到錯誤處理例程中進行錯誤處理。該例程必須在函數定義內。下一頁的表格顯示了用于錯誤處理的程序指令。 項目 目的 OnErr 使用OnErr語句定義錯誤處理…

HALCON示例程序classify_halogen_bulbs.hdev使用SVM分類器檢測鹵素燈泡的好壞

HALCON示例程序classify_halogen_bulbs.hdev使用SVM分類器檢測鹵素燈泡的好壞 示例程序源碼&#xff08;加注釋&#xff09; 得到halcon默認圖片存儲路徑 get_system (‘image_dir’, HalconImages) 獲得操作系統類型 get_system (‘operating_system’, OS) OS{0:2}的意思是…

php調用API支付接口(轉自劉68)

首先訪問 https://charging.teegon.com/ 注冊賬號&#xff0c; 找到開發配置 記下client_id和client_secret。 點擊 天工開放平臺 點擊天工收銀 點擊 SDK下載與使用 選擇php版下載 解壓后獲得 打開form.php這個是樣板文件可以用它來測試是否成功&#xff0c;測試前需要先修…

S3C2440 SPI驅動框架

S3C2440 SPI驅動代碼詳細解讀&#xff1a; https://www.linuxidc.com/Linux/2012-08/68402p4.htm 一、platform device and board_info /* /arch/arm/plat-s3c24xx*/static struct resource s3c_spi0_resource[] { [0] {.start S3C24XX_PA_SPI,.end S3C24XX_PA_SPI 0…

單目相機標定原理

一&#xff0e;相機標定主要涉及三個坐標系&#xff1a;圖像坐標系、攝像機坐標系和世界坐標系 【圖像坐標系】 攝像機采集的圖像變換為數字圖像后&#xff0c;每副數字圖像在計算機內為M x N數組&#xff0c;M行N列的圖像中每一個元素&#xff08;pixel&#xff09;數值就是圖…

HALCON示例程序classify_image_class_gmm.hdev使用GMM分類器分割彩色圖片

HALCON示例程序classify_image_class_gmm.hdev使用GMM分類器分割彩色圖片 示例程序源碼&#xff08;加注釋&#xff09; dev_update_off () dev_close_window () dev_open_window (0, 0, 735, 485, ‘black’, WindowHandle) set_display_font (WindowHandle, 14, ‘mono’, …

Android開始之 activity_lifecycle和現場保護

生命周期&#xff1a; oncreate—onstart—onresume&#xff0c;--onpause--onstop&#xff0c;——onrestart——onstart——onresume&#xff0c;。。onpause。。。onstop。。。ondestroy 現在保護---保存系統狀態 通過這個方法保存到數據庫中或者xml中&#xff0c;&#xff…

Apache啟動錯誤:could not bind to address[::]:443

Q&#xff1a;Windows環境下啟動apache報錯如下&#xff1a; 可是在httpd.conf文件中apache listen的明明是http 80端口&#xff0c;為什么會報443的錯誤&#xff1f; A&#xff1a;因為你的計算機安裝了VM&#xff0c;所有有個vm的進程一直占用著443端口&#xff0c;在命令行下…

針孔相機拍攝的圖像坐標和空間點的對應關系

一&#xff1a;攝像機成像原理 攝像機成像模型一般有三種&#xff1a;透鏡投影模型&#xff08;小孔攝像機模型&#xff09;、正交投影模型和透視投影模型 光學中最基本的高斯成像公式&#xff1a;1/u 1/v 1/f (式一) 原理圖如下&#xff1a; 二&#xff1a;認識三個…

window.onload中動態獲得img的高度

$(function(){}); window.οnlοadfunction(){} $(function(){}) 是在DOM結構渲染完成以后調用的&#xff0c;這時候網頁中一些資源還沒有加載&#xff0c;比如圖片等資源&#xff0c;但是DOM結構已經渲染成功了 window.onload是在網頁DOM結構渲染完成&#xff0c;而且資源已經…

HALCON關于顯示的函數與介紹(持續更新)

點擊下方直達算子藍色字體 目錄1、dev_update_off ()&#xff1b;dev_update_on2、dev_close_window ()3、dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle)4、set_display_font( : : WindowHandle, Size, Font, Bold, Slant : )5、dev_set_draw(…

python -- 三元運算符

格式 : a if 條件 else b 示例 : 在 return 中使用 def com(a,b): # 返回最大值return a if a > b else b賦值時使用: l 1 if 2 > 1 else 2轉載于:https://www.cnblogs.com/yanjingnan/p/6494786.html

矩陣乘法

矩陣乘法的通俗的我自己用的理解方式 CAB. 則Cij∑aikbkj (k屬于那個范圍)&#xff0c;所以首先矩陣相乘的必須是A矩陣的列數等于b矩陣的行數。 第二就是C的意義了&#xff0c;cij表示A的第i行與B的第j列每個數對應相乘&#xff0c;因為上面的條件&#xff0c;所以A的第i行的數…

HALCON示例程序classify_image_class_knn.hdev使用KNN分類器對多通道圖像進行分割

HALCON示例程序classify_image_class_knn.hdev使用KNN分類器對多通道圖像進行分割 示例程序源碼&#xff08;加注釋&#xff09; 顯示相關設置 dev_update_off () dev_close_window () dev_open_window (0, 0, 735, 485, ‘black’, WindowHandle) set_display_font (WindowH…

DELL XPS 9350 無線網卡DW1820A WIN7驅動異常解決

電腦型號:戴爾XPS 13 9350 故障現象: 安裝完其他驅動都正常,打上官網的無線藍牙一體驅動,只能驅動藍牙,無線網卡無法驅動 故障解決: 開機F2,到Wireless選項現將藍牙功能關閉,保存重啟到windows下,將官網的無線驅動解壓到文件夾,在設備管理器中選中未知的網絡設備點更新驅動,手動…

粥做得好不好,全憑一個良心!

粥做得好不好&#xff0c;全憑一個良心&#xff01; 工作不也是憑良心么&#xff01; 文章中的紅色字體表達了一切&#xff01; 霜降節氣的到來&#xff0c;意味著冬季的臨近&#xff0c;而霜降后氣溫的降低&#xff0c;利于蔬菜的淀粉沉淀&#xff0c;收漿后的蓮藕也變得更為…

內存分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc

很多地方都會使用內存&#xff0c;內存使用過程中操作不當就容易崩潰&#xff0c;無法運行程序&#xff0c;上網Google學習一下&#xff0c;了解整理下他們之間的區別以及使用 &#xff0c;獲益匪淺 0x01 各自的定義和理解 (1)先看GlobalAlloc() GlobalAlloc()主要用于Win32應用…

黑盒測試

引言&#xff1a; 什么是黑盒測試呢&#xff01;&#xff1f; 像我一樣的測試小白就會望文生義了&#xff1a;對黑盒子測試 那么黑盒子是什么&#xff01;? 思考5秒后&#xff0c;得出了這樣的答案&#xff1a;黑盒子就是黑色的盒子&#xff0c;嘿嘿&#xff01; 正文&#xf…