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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev

發(fā)布時間:2023/12/10 ChatGpt 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、例程簡介

該例程比較有代表性,屬于Halcon里的分類方法之一,直接調(diào)用Halcon封裝好的GMM分類器(高斯混合模型)對橘子和檸檬進行分類。GMM屬于概率分類方法,屬于P(Y|X),通過對樣本的概率密度分布進行估計,然后對模型進行加權(quán)求和,并通過投影,最后選取概率最大的類所為判決結(jié)果,這種分類方法只在不同檢測類之間有明顯的區(qū)別(在兩類物體圓度和面積有較大區(qū)別)的情況下適用。 具體原理可以詳見有位大佬的解釋說明,鏈接如下: [原理]https://blog.csdn.net/weixin_42555080 后面我也會針對機器學(xué)習(xí)的相關(guān)方法進行分享,求點贊評論哦。

二、代碼詳解(對每一步進行注釋)

第一篇注釋下,后面再寫就只注釋關(guān)鍵部分了。

*讀取圖片 read_image (Image, 'color/citrus_fruits_01') *返回輸入圖像對象Image的第一個通道的Pointer(指示器)。另外,這個算子也返回圖像類型和圖像的大小(width和height)。 get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'white', WindowHandle) *用來設(shè)置當(dāng)前窗口的字體屬性,參數(shù)意思為字體大小為12,字體類型為“Courier New字體”,粗體,不傾斜。 set_display_font (WindowHandle, 12, 'mono', 'true', 'false') * 定義region的填充模式, 如果參數(shù)DrawMode設(shè)置為'fill',region顯示為填充,如果設(shè)置為'margin',則只顯示輪廓。 dev_set_draw ('margin') *設(shè)置線寬 dev_set_line_width (2) *顯示圖片 dev_display (Image) *其實以下幾句可以寫為一句dev_update_off () dev_update_window ('off') dev_update_pc ('off') dev_update_var ('off') * 為特征量(區(qū)域的面積,圓度,和分類名)賦值 FeaturesArea := [] FeaturesCircularity := [] ClassName := ['orange','lemon']* 創(chuàng)建GMM分類器(特征數(shù)量,樣本分類個數(shù),類中心的個數(shù),協(xié)方差矩陣的形式,預(yù)處理的形式,轉(zhuǎn)換特征數(shù),隨機種子初始化GMM,GMM句柄) create_class_gmm (2, 2, 1, 'spherical', 'normalization', 10, 42, GMMHandle) * * 添加訓(xùn)練樣本 for I := 1 to 4 by 1read_image (Image, 'color/citrus_fruits_' + I$'.2d')dev_display (Image)* 自定義函數(shù),將圖片進行預(yù)處理,得到區(qū)域特征。get_regions (Image, SelectedRegions)*將彩色圖片分離為三個單通道圖片(decompose3 (Image, ImageRed, ImageGreen, ImageBlue)*用于區(qū)域?qū)ο蟮念伾O(shè)為白dev_set_color ('white')*對單通道圖片進行閾值處理,得到灰度值在50-255區(qū)間的圖片threshold (ImageRed, Region, 50, 255)*將區(qū)域進行填充fill_up (Region, RegionFillUp)*用來計算輸入?yún)^(qū)域中的所有連通域connection (RegionFillUp, ConnectedRegions)*根據(jù)形狀特征(這里是面積)對區(qū)域進行篩選,對于大于50小于999999的形狀保留。select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 999999)return ())dev_display (SelectedRegions)*計算區(qū)域數(shù)量count_obj (SelectedRegions, NumberObjects)*對三個目標(biāo)進行遍歷,獲取特征for J := 1 to NumberObjects by 1*從一個對象元組中選擇一個區(qū)域,區(qū)域的排序索引應(yīng)該是根據(jù)上面計算連通域的時候完成的。select_obj (SelectedRegions, ObjectSelected, J)*自定義函數(shù),分別對圓度和面積進行計算,并返回區(qū)域中心點的坐標(biāo)值。get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)(circularity (ObjectSelected, Circularity)area_center (ObjectSelected, Area, Row, Column)dev_set_color ('white')return ())* 對變量賦值FeaturesArea := [FeaturesArea,Area]FeaturesCircularity := [FeaturesCircularity,Circularity]*將元組的數(shù)值轉(zhuǎn)換為浮點型FeatureVector := real([Circularity,Area])*該方法已提前將樣本分為兩類,每類數(shù)量已提前設(shè)定好,橘子和檸檬各兩張圖片if (I <= 2)*將訓(xùn)練樣本添加到訓(xùn)練數(shù)據(jù)中(GMM句柄,特征向量,類別ID為0,不添加高斯噪聲)add_sample_class_gmm (GMMHandle, FeatureVector, 0, 0)*此過程在圖形窗口“窗口句柄”中的位置(Row,Column)顯示文本。(文本顯示Add to Class加類名,行坐標(biāo),列坐標(biāo),黑色,box參數(shù)為ture,表示文本顯示在橙色框中)disp_message (WindowHandle, 'Add to Class:' + ClassName[0], 'window', RowRegionCenter, ColumnRegionCenter - 100, 'black', 'true')else*ID為1add_sample_class_gmm (GMMHandle, FeatureVector, 1, 0)disp_message (WindowHandle, 'Add to Class:' + ClassName[1], 'window', RowRegionCenter, ColumnRegionCenter - 100, 'black', 'true')endifendfor*顯示 'Press Run (F5) to continue' 在屏幕的右下角disp_continue_message (WindowHandle, 'black', 'true')stop () endfor dev_clear_window () * * 自定義函數(shù),構(gòu)建可視化空間,可以顯示圓度和面積的二維坐標(biāo)系,里面內(nèi)容有點復(fù)雜,包括畫坐標(biāo)系,顯示特征值兩部分,有興趣的同學(xué)可以仔細(xì)看看里面的代碼來復(fù)現(xiàn)一遍,這里就不細(xì)述。兩個特征變量里面分別有12個值,對應(yīng)每個對象的特征值,將其放到坐標(biāo)系中,橘子為深灰,檸檬為淺灰色。 visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[0:5], FeaturesCircularity[0:5], 'dim gray', 18) * 'oranges', 40, 440 visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[6:11], FeaturesCircularity[6:11], 'light gray', 18) * 'lemons', 70, 440 disp_continue_message (WindowHandle, 'black', 'true') stop () * * 訓(xùn)練分類器(句柄,最大迭代次數(shù),閾值,計算方法,防止協(xié)方差矩陣異常的正則化值,類中心數(shù)量,每個類的迭代次數(shù))這里就是halcon的便利之處,直接將大量的代碼封裝,我們只需要更改幾個關(guān)鍵參數(shù)即可,但也要對GMM訓(xùn)練算法有所了解,后面會專門寫一篇GMM算法的文章。 train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter) * * 分類,下面的基本就是上面提取特征值的過程,沒啥特殊的,就不每行注釋了。 for I := 1 to 15 by 1read_image (Image, 'color/citrus_fruits_' + I$'.2d')dev_display (Image)* 'Classify Image', 10, 10get_regions (Image, SelectedRegions)dev_display (SelectedRegions)count_obj (SelectedRegions, NumberObjects)for J := 1 to NumberObjects by 1select_obj (SelectedRegions, ObjectSelected, J)get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)FeaturesArea := [FeaturesArea,Area]FeaturesCircularity := [FeaturesCircularity,Circularity]FeatureVector := real([Circularity,Area])*應(yīng)用上面訓(xùn)練的模型對測試數(shù)據(jù)的特征進行分類(句柄,特征向量,最佳類數(shù)(我的理解是指返回一種結(jié)果),分類結(jié)果(橘子是0,檸檬是1),后驗概率,概率密度,歸一化概率(通過這個概率進行判斷))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*如果測試圖片數(shù)量不等于15,顯示暫停。if (I != 15)disp_continue_message (WindowHandle, 'black', 'true')endifstop () endfor * 清除分類器內(nèi)存 clear_class_gmm (GMMHandle)

三、總結(jié)

Halcon進行GMM分類的全過程包括以下幾部分:

  • 預(yù)處理,包括閾值處理,二值化,提取區(qū)域或者輪廓特征等;
  • 提取樣本特征;可以是圓度,面積,也可以是顏色,輪廓,主要看那種特征適合分類。
  • 用add_sample_class_gmm將樣本特征添加到分類器,對特征進行訓(xùn)練,得到最終GMM模型。
  • 提取測試樣本的特征。
  • 應(yīng)用分類器對測試數(shù)據(jù)進行分類,這里Halcon把代碼封裝了,大家可以去看看C++或python版本的分類代碼,會對這個分類方法有更深的了解,至于先驗后驗概率密度之類的東西,大家自己查下吧,哈哈,要慢慢理解。
    第一次寫博客,希望將自己的學(xué)習(xí)過程記錄下來,也分享給大家,希望共同進步。必須強調(diào)一點,一🗡三連。
  • 總結(jié)

    以上是生活随笔為你收集整理的Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。