HALCON示例程序measure_ball_bond.hdev電路板焊點位置測量

HALCON示例程序measure_ball_bond.hdev電路板焊點位置測量

示例程序源碼(加注釋)

  • 關于顯示類函數解釋
    dev_update_off ()
    dev_close_window ()
    FileName := ‘bonds/ball_bond_ccd_’
    read_image (Image, FileName + 1$‘02’)
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
    dev_set_line_width (2)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    get_system (‘store_empty_region’, StoreEmptyRegion)
    set_system (‘store_empty_region’, ‘false’)
  • 定義變量并初始化
    NumImages := 6
    for Index := 1 to NumImages by 1
    read_image (Image, FileName + Index$‘02’)
    dev_display (Image)
    • 獲得運行時間
      count_seconds (S1)
    • 二值化
      threshold (Image, Region, 135, 255)
    • 分割連通域
      connection (Region, ConnectedRegions)
    • 使用寬度高度面積進行區域篩選
      select_shape (ConnectedRegions, SelectedRegions, [‘width’,‘height’,‘area’], ‘and’, [115,115,5000], [130,130,15000])
      fill_up (SelectedRegions, RegionFillUp)
      shape_trans (RegionFillUp, Pads, ‘convex’)
    • 求取內孔區域
      difference (Pads, RegionFillUp, RegionDifference)
    • 開運算
      opening_rectangle1 (RegionDifference, BondWire, 10, 10)
    • 求取最大內切圓
      shape_trans (BondWire, BallBonds, ‘inner_circle’)
    • select_shape_proto基于區域之間的某些關系選擇區域,這里使用重疊區域
    • select_shape_proto(測量區域,對比區域:篩選出的區域:關系,最小值,最大值:)
      select_shape_proto (Pads, BallBonds, MissingBonds, ‘overlaps_rel’, 0, 0)
      count_seconds (S2)
      Time := (S2 - S1) * 1000
    • 膨脹
      dilation_circle (BallBonds, RegionDilation2, 10)
    • 求交集
      intersection (RegionDilation2, BondWire, RegionIntersection)
    • 求邊緣的老方法了,之前的貼子傳送門
      boundary (RegionIntersection, RegionBorder, ‘inner’)
      dilation_circle (RegionBorder, RegionDilation, 3.5)
      union1 (RegionDilation, RegionUnion)
      reduce_domain (Image, RegionUnion, ImageReduced)
      edges_sub_pix (ImageReduced, Edges, ‘canny’, 1, 20, 70)
    • union_adjacent_contours_xld - 計算端點靠近的輪廓的并集。
    • union_adjacent_contours_xld(邊緣:合并的邊緣:端點最大絕對閾值,端點最大相對閾值,模式:)
      union_adjacent_contours_xld (Edges, UnionContours, 10, 1, ‘attr_keep’)
    • 篩選XLD輪廓
      select_contours_xld (UnionContours, SelectedContours, ‘contour_length’, 20, 20000, -0.5, 0.5)
    • 通過XLD輪廓擬合圓形
      fit_circle_contour_xld (SelectedContours, ‘atukey’, -1, 0, 0, 5, 7, CircleRow, CircleColumn, Radius, StartPhi, EndPhi, PointOrder)
    • 繪制XLD輪廓圓形
      gen_circle_contour_xld (ContCircle, CircleRow, CircleColumn, Radius, 0, 6.28318, ‘positive’, 1)
      count_obj (BondWire, NBonds)
      gen_empty_obj (MeasureArrows)
    • 下邊這些就非常簡單的啦
      dev_display (Image)
      dev_set_color (‘cyan’)
      dev_display (ContCircle)
      dev_set_color (‘magenta’)
      area_center (RegionDilation2, Area, Row, Column)
      area_center (MissingBonds, AreaM, RowM, ColumnM)
      select_shape_proto (Pads, BallBonds, BallTooClose, ‘distance_contour’, 0, 10)
      area_center (BallTooClose, AreaB, RowB, ColumnB)
      dev_set_color (‘yellow’)
      dev_display (Pads)
      if (|AreaM| > 0 or |AreaB| > 0)
      dev_set_color (‘red’)
      dev_display (MissingBonds)
      dev_display (BallTooClose)
      for IndexE := 0 to |AreaM| - 1 by 1
      NRow := RowM[IndexE]
      NCol := ColumnM[IndexE]
      disp_message (WindowHandle, ‘Ball bond\nis missing’, ‘image’, NRow - 150, NCol - 110, ‘red’, ‘true’)
      endfor
      for IndexE := 0 to |AreaB| - 1 by 1
      NRow := RowB[IndexE]
      NCol := ColumnB[IndexE]
      disp_message (WindowHandle, ‘Ball bond is too\nclose to border’, ‘image’, NRow - 150, NCol - 150, ‘red’, ‘true’)
      endfor
      endif
      for IndexM := 1 to NBonds by 1
      select_obj (ContCircle, ObjectSelected, IndexM)
      • 求取XLD輪廓的最小外接矩形
        smallest_rectangle1_xld (ObjectSelected, minY, minX, maxY, maxX)
      • 求取XLD輪廓中心
        area_center_xld (ObjectSelected, Area1, Ybb, Xbb, PointOrder1)
      • 繪制XLD箭頭
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, minY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, maxY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        dev_set_color (‘green’)
        dev_display (MeasureArrows)
        select_obj (ContCircle, ObjectSelected, IndexM)
        area_center_xld (ObjectSelected, Area2, Ybb, Xbb, PointOrder2)
        disp_message (WindowHandle, (2 * Radius[IndexM - 1])KaTeX parse error: Expected 'EOF', got '\nin' at position 129: …ond(s) detected\?n?i?n? ?' + Time’.2f’ + ’ ms’, ‘window’, 12, 12, ‘black’, ‘true’)
    • Evaluate and display results
      if (Index != NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor
      set_system (‘store_empty_region’, StoreEmptyRegion)

處理思路

這個例子是主要講解了使用blob分析方法,結合XLD輪廓擬合,對電路焊點的檢測與測量。count_seconds計時算子select_shape_proto、union_adjacent_contours_xld、select_contours_xld、fit_circle_contour_xld、gen_circle_contour_xld、gen_arrow_contour_xld、smallest_rectangle1_xld、area_center_xld、gen_arrow_contour_xld

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

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

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

相關文章

rank()over 函數的使用

1. over()是分析函數,可以和rank()函數配合使用,也可以和其他函數配合使用。取每個學科排名前三的分數,sql語句如下: select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T where T.rk&…

天梯賽2016-L2

L2-001. 緊急救援 作為一個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連接城市的快速道路。每個城市的救援隊數量和每一條連接兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助電話給你的時候,你…

伺服系統控制網絡的重要性! 現場總線的重要性! SSCNET運動控制系統與發展趨勢

引言:在2010年的時候,在北京的一個數控公司工作。產品采用的是通過運動控制卡發脈沖的方式,控制機床的X、Y、Z軸進行加工。 機床在加工產品的時候,一直存在著精度的問題,例如DMG的機床可以達到0.01的加工精度&#x…

apache配置

wamp環境安裝需要VC運行庫的支持 apache如果需要外網訪問,在其配置文件中尋找127.0.0.1然后替換為all 外網訪問需要關閉防火墻?轉載于:https://www.cnblogs.com/gremlin/p/5581486.html

TCP/IP 通信示例

TCP/IP 通信示例 Global String ReadData_P_All$, ReadData_P$(10), data$ Global Preserve Double x Global Integer foundnumber_PFunction TCPServerSetNet #201, "192.168.0.1", 4000, CRLF, NONE, 0OpenNet #201 As ClientWaitNet #201Print "TCP Connect…

MySQL分庫分表總結參考

單庫單表 單庫單表是最常見的數據庫設計,例如,有一張用戶(user)表放在數據庫db中,所有的用戶都可以在db庫中的user表中查到。 單庫多表 隨著用戶數量的增加,user表的數據量會越來越大,當數據量達到一定程度的時候對u…

小兔伴伴家庭動物園AR智能早教產品上市

2016年6月,經過樂卓大家庭所有人的共同努力,公司旗下首款新品——小兔伴伴之《家庭動物園》3D智能學習卡正式面世。 每個孩子都應該在合適的時間去體驗豐富的聲音、色彩和動作,《家庭動物園》,專為2-6歲兒童貼心設計,是…

EPSON 自帶CCD圖像處理包使用舉例

EPSON 機器人可以購買CCD圖像處理包選項,CCD圖像處理包與SPEL語言高度結合,可以非常快的將項目投入應用,舉例說明CCD圖像處理包與SPEL的聯合使用。 EPSON 以視覺序列定義圖像處理的一個項目,視覺序列是一組按照特定順序排列的視覺…

索引使用原則

前兩篇文章我總結了一些SQL數據庫索引的問題,這篇主要來分析下索引的優缼點,以及如何正確使用索引。 索引的優點:這個顯而易見,正確的索引會大大提高數據查詢,對結果進行排序、分組的操作效率。 索引的缺點…

根據時間變換頁面背景

1.概述 有些時侯為了豐富頁面的顯示效果,將頁面制作成根據時間變換頁面背景的樣式,這樣會使瀏覽者對此網站不會感覺厭倦,同時也會覺得網站制作的非常新穎。本實例通過Date對象的getHours()方法獲得當前系統時間的小時,然后根據不同…

EPSON 自帶CCD圖像處理包的典型應用框架

EPSON 自帶CCD圖像處理包的典型應用框架 Function main ******************************************** Very important statement below: Use the * //非常重要的是在實際運行時,用合適的Z數值代替預定義的 ZHeight 。Z height which you wrote down earlier in *…

EPSON 利用CCD圖像處理包標定工具坐標系

EPSON 利用CCD圖像處理包標定工具坐標系 仰視式安裝的相機可以用來計算工具偏移,下例使用仰視式相機來計算工具偏移。該功能首先運行一個序列來定位工具的尖端。然后計算出工具偏移(前提是CCD已標定)。 Function CalcTool Boolean foundReal…

掛馬方式研究、掛馬檢測技術研究

1. 掛馬定義 所謂的掛馬,就是黑客通過各種手段,包括SQL注入,網站敏感文件掃描,服務器漏洞,網站程序0day, 等各種方法獲得網站管理員賬號,然后登陸網站后臺,通過數據庫"備份/恢復"或者…

大幅面多相機高精度定位及測量解決方案

隨著機器視覺應用的日益廣泛,大幅面多相機視覺系統的需求越來越多,主要應用方向為大幅面高精度的定位與測量和場景拼接等。多相機視覺系統的難點在于多相機坐標系的統一,可以分為兩類,一是相機視野間無重疊部分,二是相…

Hadoop 使用FileSystem API 讀取數據

代碼: package com.hadoop;import java.io.IOException; import java.io.InputStream; import java.net.URI;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.…

EPSON 機器人多任務下的互鎖處理

在很多時候,有多個任務具有動作命令指令。為了防止多個任務運行動作命令時,對僅有的一個機器人產生的控制沖突,有必要進行連鎖處理。一個任務進行機器人控制時,另一個任務則會等待控制權。這樣,各任務就可以完全按照預…

mysql高可用方案MHA介紹

mysql高可用方案MHA介紹概述MHA是一位日本MySQL大牛用Perl寫的一套MySQL故障切換方案,來保證數據庫系統的高可用.在宕機的時間內(通常10—30秒內),完成故障切換,部署MHA,可避免主從一致性問題,節…

SQL遞歸查詢(with as)

SQL遞歸查詢(with cte as) with cte as( select Id,Pid,DeptName,0 as lvl from Department where Id 2 union all select d.Id,d.Pid,d.DeptName,lvl1 from cte c inner join Department d on c.Id d.Pid)select * from cte1 表結構Id Pid …

庖丁解牛TLD(一)——開篇

最近在網上多次看到有關Zdenek Kalal的TLD的文章,說他做的工作如何的帥,看了一下TLD的視頻,感覺確實做的很好,有人夸張的說他這個系統可以和Kniect媲美,我倒是兩者的工作可比性不大,實現的方法也不同。但這…