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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

示例程序源碼(加注釋)

  • 讀入圖片與顯示相關(guān)設(shè)置
    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’)
  • 首先提取每個(gè)膠囊
    disp_message (WindowHandle, ‘Train gmm classifier on pill types’, ‘window’, -1, -1, ‘black’, ‘true’)
  • 注意注意敲黑板,劃重點(diǎn)。下邊的這個(gè)函數(shù)是halcon函數(shù)的封裝,里邊代碼有好多。內(nèi)容是上一篇文章介紹過(guò),大同小異,所以不理解的話看一下上一篇例子。下邊的代碼塊是extract_pill_types里邊的內(nèi)容。
    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反轉(zhuǎn)圖像的灰度值 invert_image (ImageB, ImageInvert) * hysteresis_threshold使用遲滯閾值操作 * 函數(shù)原型:hysteresis_threshold(Image : RegionHysteresis : Low, High, MaxLength : ) * Image :輸入圖像;RegionHysteresis :輸出區(qū)域;Low:低于這個(gè)灰度不會(huì)被選中;High:高于這個(gè)灰度立刻被選中; * MaxLength :在Low與High之間的根據(jù)MaxLength 對(duì)比度進(jìn)行選擇,和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)* 求兩個(gè)區(qū)域的交集 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|

  • 創(chuàng)建創(chuàng)建高斯混合模型

  • 輸入?yún)?shù): NumDim:幾個(gè)特征;NumClasses:樣本分類個(gè)數(shù);NumCenters:類中心的個(gè)數(shù);CovarType:

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

  • NumComponents:預(yù)處理參數(shù),轉(zhuǎn)換特征數(shù);RandSend:迭代次數(shù),初始化GMM;

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

  • 含義:增加訓(xùn)練樣本(圖片區(qū)),放入GMM 進(jìn)行訓(xùn)練數(shù)據(jù)

  • 輸入?yún)?shù):Image:訓(xùn)練的圖像(多通道);ClassRegions:圖像中用于訓(xùn)練的類區(qū)域;

  • GMMHandle:高斯混合模型;Randomize:高斯噪聲標(biāo)準(zhǔn)差
    add_samples_image_class_gmm (Image, Classes, GMMHandle, 0)

  • 含義:訓(xùn)練高斯混合模型

  • 輸入?yún)?shù):GMMHandle:高斯混合模型;MixIter: 期望最大值算法中迭代最大數(shù);

  • Threshold:期望誤差閾值,超過(guò)此值,計(jì)算取消;

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

  • Regularize:調(diào)整值,為了防止計(jì)算中出現(xiàn)奇異協(xié)方差矩陣。增加到協(xié)方差矩陣的對(duì)角線上的一個(gè)很小的值

  • 輸出參數(shù):Centers:每個(gè)類的中心個(gè)數(shù)

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

  • 檢測(cè)膠囊
    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)
    • 面積對(duì)區(qū)域篩選
      select_shape (ConnectedRegions, SelectedRegions, ‘a(chǎn)rea’, ‘a(chǎn)nd’, 5000, 9999999)
    • 求取最大區(qū)域邊緣
      shape_trans (SelectedRegions, RegionTrans, ‘convex’)
    • 利用橢圓變換,得出區(qū)域角度
      orientation_region (RegionTrans, Phi)
      if (abs(Phi) > rad(90))
      Phi := rad(180) + Phi
      endif
    • 求取區(qū)域面積與中心坐標(biāo)
      area_center (RegionTrans, Area1, Row, Column)
    • 創(chuàng)建平移旋轉(zhuǎn)變換矩陣
      vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, PhiRef, HomMat2D)
    • 使用仿射變換矩陣進(jìn)行任意仿射變換
      affine_trans_image (Image, ImageAffinTrans, HomMat2D, ‘constant’, ‘false’)
    • 減少圖像定義域
      reduce_domain (ImageAffinTrans, ChambersUnion, ImageReduced)
    • 將圖片分為rgb三通道圖像
      decompose3 (ImageAffinTrans, ImageR, ImageG, ImageB)
    • 對(duì)每個(gè)膠囊進(jìn)行識(shí)別檢測(cè)
    • 含義:使用GMM分類一個(gè)圖像
    • 輸入?yún)?shù):Image:訓(xùn)練的圖像(多通道);GMMHandle:GMM模型;
    • RejectionThreshold:分類拒絕閾值,如果圖像所有的像素概率低于此值將不會(huì)分類任何類。
    • 輸出參數(shù):ClassRegions:分類的各個(gè)區(qū)域
      classify_image_class_gmm (ImageReduced, ClassRegions, GMMHandle, 0.005)
    • 對(duì)ClassRegions進(jìn)行計(jì)數(shù)
      count_obj (ClassRegions, Number)
    • 生成空區(qū)域
      gen_empty_obj (FinalClasses)
    • 分割連通域
      connection (Chambers, ChambersRemaining)
      for Index := Number to 1 by -1
      dev_clear_window ()
      • 選擇ClassRegions區(qū)域中的第Index個(gè)對(duì)象
        select_obj (ClassRegions, Region, Index)
      • 求交集
        intersection (ChambersRemaining, Region, Region)
      • 使用面積與寬度進(jìn)行區(qū)域篩選
        select_shape (Region, PillsOfOneType, [‘a(chǎn)rea’,‘width’], ‘a(chǎn)nd’, [200,40], [3000,68])
      • 求取兩個(gè)區(qū)域的差集
        difference (ChambersUnion, PillsOfOneType, RegionDifference)
      • 分割連通域
        connection (RegionDifference, ConnectedRegions)
      • 使用面積進(jìn)行區(qū)域篩選
        select_shape (ConnectedRegions, SelectedRegions, ‘a(chǎn)rea’, ‘a(chǎn)nd’, 0, 7868)
      • 求取區(qū)域的最大邊緣
        shape_trans (SelectedRegions, SelectedRegions, ‘convex’)
      • 聯(lián)合區(qū)域
        union1 (SelectedRegions, SelectedRegions)
      • 求取區(qū)域差集
        difference (ChambersRemaining, SelectedRegions, ChambersRemaining)
      • 聯(lián)合兩個(gè)區(qū)域
        concat_obj (SelectedRegions, FinalClasses, FinalClasses)
        endfor
    • 得出結(jié)果進(jìn)行處理得出結(jié)論
      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高斯分類器進(jìn)行膠囊識(shí)別識(shí)別,因?yàn)橐话嫠幧嫌卸鄠€(gè)種類的藥片。

后記

大家有什么問(wèn)題可以向我提問(wèn)哈,我看到了第一時(shí)間回復(fù),希望在學(xué)習(xí)的路上多多結(jié)交良師益友。

總結(jié)

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

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