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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HALCON示例程序check_blister_mixed.hedv藥品膠囊缺陷檢測

示例程序源碼(加注釋)

  • 讀入圖片與顯示相關設置
    dev_close_window ()
    read_image (Image, ‘blister/blister_mixed_reference’)
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
    set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
    dev_update_off ()
    dev_display (Image)
    dev_set_draw (‘margin’)
  • 首先提取每個膠囊
    disp_message (WindowHandle, ‘Train gmm classifier on pill types’, ‘window’, -1, -1, ‘black’, ‘true’)
  • 注意注意敲黑板,劃重點。下邊的這個函數是halcon函數的封裝,里邊代碼有好多。內容是上一篇文章介紹過,大同小異,所以不理解的話看一下上一篇例子。下邊的代碼塊是extract_pill_types里邊的內容。
    extract_pill_types (Image, Chambers, ChambersUnion, Classes, PhiRef, RowRef, ColumnRef, PillTypeCount)
threshold (Image, Region, 90, 255) connection (Region, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 999999) shape_trans (SelectedRegions, Blister, 'convex') gen_empty_region (Chambers) for I := 0 to 4 by 1Row := 107 + I * 70for J := 0 to 2 by 1Column := 177 + J * 150gen_rectangle2 (Rectangle, Row, Column, 0, 64, 30)concat_obj (Chambers, Rectangle, Chambers)endfor endfor difference (Blister, Chambers, Pattern) union1 (Chambers, ChambersUnion) orientation_region (Blister, PhiRef) PhiRef := rad(180) + PhiRef area_center (Blister, Area, RowRef, ColumnRef)* +++ Extract pattern for classification +++ select_shape (Chambers, PillType1, 'row', 'and', 1, 145) union1 (PillType1, PillType1) select_shape (Chambers, PillType2, 'row', 'and', 145, 270) union1 (PillType2, PillType2) select_shape (Chambers, PillType3, 'row', 'and', 270, 390) union1 (PillType3, PillType3)* Extract color space of yellow pills reduce_domain (Image, PillType1, ImageReduced) decompose3 (ImageReduced, ImageR, ImageG, ImageB) threshold (ImageB, Region, 60, 95)* Extract color space of red pills reduce_domain (Image, PillType2, ImageReduced) decompose3 (ImageReduced, ImageR, ImageG, ImageB) * invert_image反轉圖像的灰度值 invert_image (ImageB, ImageInvert) * hysteresis_threshold使用遲滯閾值操作 * 函數原型:hysteresis_threshold(Image : RegionHysteresis : Low, High, MaxLength : ) * Image :輸入圖像;RegionHysteresis :輸出區域;Low:低于這個灰度不會被選中;High:高于這個灰度立刻被選中; * MaxLength :在Low與High之間的根據MaxLength 對比度進行選擇,和carry邊緣類似。 hysteresis_threshold (ImageInvert, RegionHysteresis2, 190, 200, 5)* Extract color space of green pills reduce_domain (Image, PillType3, ImageReduced) decompose3 (ImageReduced, ImageR, ImageG, ImageB) invert_image (ImageB, ImageInvert) hysteresis_threshold (ImageInvert, RegionHysteresis3, 180, 200, 10)* 求兩個區域的交集 intersection (Region, PillType1, PillType1) intersection (RegionHysteresis2, PillType2, PillType2) PillTypeCount := [3,6,6] intersection (RegionHysteresis3, PillType3, PillType3) concat_obj (PillType1, PillType2, Classes) concat_obj (Classes, PillType3, Classes) return ()

NumClasses := |PillTypeCount|

  • 創建創建高斯混合模型

  • 輸入參數: NumDim:幾個特征;NumClasses:樣本分類個數;NumCenters:類中心的個數;CovarType:

  • 協方差矩陣(‘Spherical’,‘diag’,‘full’);Preprocessing:預處理是否使用,及特征向量轉換類型;

  • NumComponents:預處理參數,轉換特征數;RandSend:迭代次數,初始化GMM;

  • 輸出參數:GMMHandle:高斯混合模型
    create_class_gmm (3, 3, [1,5], ‘spherical’, ‘normalization’, 10, 42, GMMHandle)

  • 含義:增加訓練樣本(圖片區),放入GMM 進行訓練數據

  • 輸入參數:Image:訓練的圖像(多通道);ClassRegions:圖像中用于訓練的類區域;

  • GMMHandle:高斯混合模型;Randomize:高斯噪聲標準差
    add_samples_image_class_gmm (Image, Classes, GMMHandle, 0)

  • 含義:訓練高斯混合模型

  • 輸入參數:GMMHandle:高斯混合模型;MixIter: 期望最大值算法中迭代最大數;

  • Threshold:期望誤差閾值,超過此值,計算取消;

  • ClassPriors:類的先驗概率類型;(‘training’,‘uniform’)'uniform’表示使用相同的權重,1/NumClasses;'training’表示類發生的概率是依據樣本中的概率推斷。

  • Regularize:調整值,為了防止計算中出現奇異協方差矩陣。增加到協方差矩陣的對角線上的一個很小的值

  • 輸出參數:Centers:每個類的中心個數

  • Iter:每個類的迭代次數
    train_class_gmm (GMMHandle, 100, 0.001, ‘training’, 0.0001, Centers, Iter)

  • 檢測膠囊
    Count := 12
    for FileIndex := 1 to Count by 1

    • 讀入圖片
      read_image (Image, ‘blister/blister_mixed_’ + FileIndex$‘02’)
    • 閾值分割
      threshold (Image, Region, 90, 255)
    • 分割連通域
      connection (Region, ConnectedRegions)
    • 面積對區域篩選
      select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 5000, 9999999)
    • 求取最大區域邊緣
      shape_trans (SelectedRegions, RegionTrans, ‘convex’)
    • 利用橢圓變換,得出區域角度
      orientation_region (RegionTrans, Phi)
      if (abs(Phi) > rad(90))
      Phi := rad(180) + Phi
      endif
    • 求取區域面積與中心坐標
      area_center (RegionTrans, Area1, Row, Column)
    • 創建平移旋轉變換矩陣
      vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, PhiRef, HomMat2D)
    • 使用仿射變換矩陣進行任意仿射變換
      affine_trans_image (Image, ImageAffinTrans, HomMat2D, ‘constant’, ‘false’)
    • 減少圖像定義域
      reduce_domain (ImageAffinTrans, ChambersUnion, ImageReduced)
    • 將圖片分為rgb三通道圖像
      decompose3 (ImageAffinTrans, ImageR, ImageG, ImageB)
    • 對每個膠囊進行識別檢測
    • 含義:使用GMM分類一個圖像
    • 輸入參數:Image:訓練的圖像(多通道);GMMHandle:GMM模型;
    • RejectionThreshold:分類拒絕閾值,如果圖像所有的像素概率低于此值將不會分類任何類。
    • 輸出參數:ClassRegions:分類的各個區域
      classify_image_class_gmm (ImageReduced, ClassRegions, GMMHandle, 0.005)
    • 對ClassRegions進行計數
      count_obj (ClassRegions, Number)
    • 生成空區域
      gen_empty_obj (FinalClasses)
    • 分割連通域
      connection (Chambers, ChambersRemaining)
      for Index := Number to 1 by -1
      dev_clear_window ()
      • 選擇ClassRegions區域中的第Index個對象
        select_obj (ClassRegions, Region, Index)
      • 求交集
        intersection (ChambersRemaining, Region, Region)
      • 使用面積與寬度進行區域篩選
        select_shape (Region, PillsOfOneType, [‘area’,‘width’], ‘and’, [200,40], [3000,68])
      • 求取兩個區域的差集
        difference (ChambersUnion, PillsOfOneType, RegionDifference)
      • 分割連通域
        connection (RegionDifference, ConnectedRegions)
      • 使用面積進行區域篩選
        select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 0, 7868)
      • 求取區域的最大邊緣
        shape_trans (SelectedRegions, SelectedRegions, ‘convex’)
      • 聯合區域
        union1 (SelectedRegions, SelectedRegions)
      • 求取區域差集
        difference (ChambersRemaining, SelectedRegions, ChambersRemaining)
      • 聯合兩個區域
        concat_obj (SelectedRegions, FinalClasses, FinalClasses)
        endfor
    • 得出結果進行處理得出結論
      gen_empty_obj (MissingPills)
      gen_empty_obj (WrongPills)
      gen_empty_obj (WrongNumberOfPills)
      difference (ChambersUnion, FinalClasses, LeftOvers)
      area_center (LeftOvers, Area, Row1, Column1)
      if (Area > 0)
      connection (LeftOvers, LeftOvers)
      count_obj (LeftOvers, Number)
      for Index := 1 to Number by 1
      select_obj (LeftOvers, ObjectSelected, Index)
      intensity (ObjectSelected, ImageB, Mean, Deviation)
      if (Deviation > 40)
      concat_obj (WrongPills, ObjectSelected, WrongPills)
      else
      concat_obj (MissingPills, ObjectSelected, MissingPills)
      endif
      endfor
      endif
    • Compute histogram
      CountFinalClass := []
      for Index := 1 to NumClasses by 1
      select_obj (FinalClasses, ObjectSelected, Index)
      connection (ObjectSelected, ObjectSelected)
      count_obj (ObjectSelected, Size)
      CountFinalClass := [CountFinalClass,Size]
      endfor
    • Display classification results and output allover statistic
      display_results (ImageAffinTrans, LeftOvers, FinalClasses, WrongPills, CountFinalClass, PillTypeCount, WindowHandle)
      if (FileIndex < Count)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      endif
      stop ()
      endfor
  • Clear classifier handle
    clear_class_gmm (GMMHandle)

處理思路

此例子使用GMM高斯分類器進行膠囊識別識別,因為一版藥上有多個種類的藥片。

后記

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

總結

以上是生活随笔為你收集整理的HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测的全部內容,希望文章能夠幫你解決所遇到的問題。

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