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高斯分類器進行膠囊識別識別,因為一版藥上有多個種類的藥片。

后記

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

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

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

相關文章

php類與對象

1.類與對象 對象&#xff1a;實際存在該類事物中每個實物的個體。$a new User(); 實例化后的$a 引用&#xff1a;php的別名&#xff0c;兩個不同的變量名字指向相同的內容 封裝: 把對象的屬性和方法組織在一個類&#xff08;邏輯單元&#xff09;里 繼承&#xff1a;以原有的類…

【深度學習系列】基礎知識、模型學習

基礎知識 原創 【深度學習】——訓練過程 原創 【深度學習】——BN層&#xff08;batch normalization&#xff09; 原創 【深度學習】——激活函數&#xff08;sigmoid、tanh、relu、softmax&#xff09; 原創 【深度學習】——損失函數 原創 【深度學習】——梯度下…

史陶比爾機器人的 LLI (Low Level Interface)

史陶比爾機器人的 LLI &#xff08;Low Level Interface&#xff09; 史陶比爾機器人擁有 Low Level Interface (LLI)接口選項. 在CS8C控制器的時代&#xff0c;LLI 接口仍然可用。這是一個選項接口。.這是除了VAL3編程語言之外的替代操作系統。通過C程序替代你的程序。 這里的…

陽獅集團與阿里巴巴全域營銷伙伴關系再升級:數據和業務合作將更緊密

3月6日&#xff0c;阿里巴巴集團與全球領先的廣告傳播集團陽獅集團在上海開啟了主題為“新局面新高度”新階段的合作溝通&#xff0c;未來雙方將進行更緊密的數據和業務層面的合作。阿里巴巴集團CMO、阿里媽媽總裁董本洪及陽獅媒體大中華區首席執行官張敬鸞就開放共贏達成共識&…

HALCON示例程序check_bottle_crate.hdev啤酒箱內酒瓶數檢測

HALCON示例程序check_bottle_crate.hdev啤酒箱內酒瓶數檢測 示例程序源碼&#xff08;加注釋&#xff09; 獲取系統關于“空白區域儲存的設置” get_system (‘store_empty_region’, StoreEmptyRegion)系統“空白區域儲存”設置為 ‘false’ set_system (‘store_empty_regi…

#undef 標識符

#undef 是在后面取消以前定義的宏定義 該指令的形式為 #undef 標識符 其中&#xff0c;標識符是一個宏名稱。如果標識符當前沒有被定義成一個宏名稱&#xff0c;那么就會忽略該指令。一旦定義預處理器標識符&#xff0c;它將保持已定義狀態且在作用域內&#xff0c;直到程序結束…

[轉]OpenGL庫介紹

原帖地址&#xff1a;http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx 開發基于OpenGL的應用程序&#xff0c;必須先了解OpenGL的庫函數。它采用C語言風格&#xff0c;提供大量的函數來進行圖形的處理和顯示。OpenGL庫函數的命名方式非常有規律。所有OpenGL函數…

SQL Server優化50法

查詢速度慢的原因很多&#xff0c;常見如下幾種&#xff1a; 1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題&#xff0c;是程序設計的缺陷) 2、I/O吞吐量小&#xff0c;形成了瓶頸效應。 3、沒有創建計算列導致查詢不優化。 4、內存不足 5、網絡速度慢 …

HALCON示例程序check_fish_stick_dimension.hdev生魚棒尺寸測量;基于形態學的像素級精度尺寸測量

HALCON示例程序check_fish_stick_dimension.hdev基于形態學的像素級精度尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關閉實時顯示更新 dev_update_off () 關閉窗口 dev_close_window () 讀入圖片 read_image (Image, ‘food/fish_sticks_raw_01’) 根據給定長寬…

單片機平臺的最小偏差圓弧插補算法

在CNC機床的G代碼中&#xff0c;最常見的有G0、G1、G2、G3代碼&#xff0c;分別表示直線和圓弧插補&#xff0c;直線插補對于單片機來說&#xff0c;比較容易實現&#xff0c;只需要將位移增量轉換為脈沖增量然后輸出給步進電機就可以了&#xff0c;但對于圓弧插補&#xff0c;…

javascript基礎--數組排序

字符串的排序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>數組排序</title><script>var arr [fliar, asdf, dfe, loii, yhhl];arr.sort();alert(arr);</script> </head>&…

【轉】JS跨域(ajax跨域、iframe跨域)解決方法及原理詳解(jsonp)

這里說的js跨域是指通過js在不同的域之間進行數據傳輸或通信&#xff0c;比如用ajax向一個不同的域請求數據&#xff0c;或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同&#xff0c;都被當作是不同的域。 下表給出了相對http://store.…

Lua基本語法-lua與C#的交互(相當簡單詳細的例子)

lua腳本 與 C#的交互 本文提供全流程&#xff0c;中文翻譯。Chinar堅持將簡單的生活方式&#xff0c;帶給世人&#xff01;&#xff08;擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互準備工作 2C# Create Lu…

漫談程序員系列:千奇百怪的程序員

干開發時間長了&#xff0c;遇見好多好玩兒的程序員。 看看你躺槍了沒。 博客之星評選&#xff0c;點擊投我一票&#xff0c;謝謝。投過了也可以點哦&#xff0c;每天都可以投投一票。 留一手 有個哥們兒&#xff0c;在一合資公司做程序員&#xff0c;能力挺強&#xff0c;寫…

HALCON示例程序check_hazelnut_wafers.hdev威化餅干質量檢測(完整與否,是否破碎)

HALCON示例程序check_hazelnut_wafers.hdev威化餅干質量檢測&#xff08;完整與否&#xff0c;是否破碎&#xff09; 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘food/hazelnut_wafer_01’) 關閉窗口 dev_close_window () 根據給定的長寬比…

Windows Media Center .MCL文件代碼執行漏洞(MS16-059)

blast 2016/06/21 13:180x00 簡介漏洞作者EduardoBraun Prado在今年早期發現了WMP的.MCL文件又存在一個可以導致遠程代碼執行的漏洞。為什么要說又呢&#xff0c;因為這個東西實在是“不爭氣”&#xff0c;同一個地方出現了多次繞過導致遠程代碼執行的問題。0x01 歷史A――MS1…

SCARA機器人與 DELTA機器人

1、SCARA機器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文譯名&#xff1a;選擇順應性裝配機器手臂&#xff09;是一種圓柱坐標型的特殊類型的工業機器人。1978年&#xff0c;日本山梨大學牧野洋發明SCARA&#xff0c;該機器人具有四個軸和四個…

一直以來都沒直視的輪播-_-

一直以來做項目碰到輪播圖我都是去網站上找現成插件拿來用&#xff0c;現成的插件1是省時間&#xff0c;拿來改改尺寸改改參數就能直接用&#xff0c;2是現在的插件確實很強大&#xff0c;對于我一個剛剛學習前端的人來說&#xff0c;牛人寫的輪播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev邊界輪廓的圓形擬合

HALCON示例程序circles.hdev邊界輪廓的圓形擬合 小哥哥小姐姐覺得有用點個贊唄&#xff01; 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企業號辦公系統-流程設計--保存與發布

如果流程未設計完時可以先保存&#xff0c;以后再打開接著設計。點擊工具欄上的保存按鈕即可保存當前流程設計: 如果下次要接著設計&#xff0c;則可以打開該流程繼續設計&#xff1a; 如果流程設計完成&#xff0c;可以點擊安裝按鈕來發布流程&#xff0c;流程安裝成功后即加入…