HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷檢測

HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷檢測

示例程序源碼(加注釋)

  • 定義變量并初始化
    SmoothX := 501
    ThresholdOffset := 25
    MinDefectSize := 50
    PolarResolution := 640
    RingSize := 70
    get_system (‘store_empty_region’, StoreEmptyRegion)
    set_system (‘store_empty_region’, ‘false’)
    read_image (Image, ‘bottles/bottle_mouth_01’)

  • 關于顯示類函數解釋
    dev_update_off ()
    dev_close_window ()
    dev_close_window ()
    dev_open_window_fit_image (Image, 0, 0, 640, 512, WindowHandle1)
    set_display_font (WindowHandle1, 16, ‘mono’, ‘true’, ‘false’)
    dev_display (Image)
    dev_set_draw (‘margin’)
    dev_set_line_width (3)
    dev_open_window_fit_size (0, 648, RingSize, PolarResolution, 150, 512, WindowHandle)
    dev_set_draw (‘margin’)
    dev_set_line_width (3)
    dev_set_color (‘red’)
    for Index := 1 to 16 by 1
    read_image (Image, ‘bottles/bottle_mouth_’ + Index$’.02’)

    • 使用形態學檢測瓶口
    • 使用多個閾值來分割單通道圖像
      auto_threshold (Image, Regions, 2)
    • 選取灰度值最小的分割區域
      select_obj (Regions, DarkRegion, 1)
    • 開運算
      opening_circle (DarkRegion, RegionOpening, 3.5)
    • 閉運算
      closing_circle (RegionOpening, RegionClosing, 25.5)
    • 填充孔洞
      fill_up (RegionClosing, RegionFillUp)
    • 提取區域邊界
      boundary (RegionFillUp, RegionBorder, ‘outer’)
    • 膨脹邊界
      dilation_circle (RegionBorder, RegionDilation, 3.5)
    • 將膨脹邊界提取出
      reduce_domain (Image, RegionDilation, ImageReduced)
    • 通過擬合圓形找到瓶口中心
    • 關于edges_sub_pix算子解釋傳送門
      edges_sub_pix (ImageReduced, Edges, ‘canny’, 0.5, 20, 40)
    • 分割XLD輪廓,算子解釋傳送門
      segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 5, 4, 2)
    • union_cocircular_contours_xld - 計算屬于同一個圓的輪廓的并集。
    • union_cocircular_contours_xld(輪廓:合并的輪廓:兩個圓弧的最大角距離,兩個圓弧的最大重疊,連接線與圓弧切線之間的最大角度,兩個圓弧之間間隙的最大長度,兩個圓弧的最大半徑差,兩個圓弧的最大中心距離,是否合并沒有擬合圓的小輪廓,迭代次數:)
      union_cocircular_contours_xld (ContoursSplit, UnionContours, 0.9, 0.5, 0.5, 200, 50, 50, ‘true’, 1)
    • XLD輪廓長度
      length_xld (UnionContours, Length)
    • sort_index - 對元組的元素進行排序并返回已排序元組的索引。取最長輪廓
      select_obj (UnionContours, LongestContour, sort_index(Length)[|Length| - 1] + 1)
    • 擬合圓形
      fit_circle_contour_xld (LongestContour, ‘ahuber’, -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    • 使用極坐標變換將瓶口圓環展開成矩形
    • 畫圓
      gen_circle (Circle, Row, Column, Radius)
    • 膨脹
      dilation_circle (Circle, RegionDilation, 5)
    • 腐蝕
      erosion_circle (Circle, RegionErosion, RingSize - 5)
    • 求不同
      difference (RegionDilation, RegionErosion, RegionDifference)
    • 縮減定義域
      reduce_domain (Image, RegionDifference, ImageReduced)
    • polar_trans_image_ext - 將圖像進行極坐標變換。
    • polar_trans_image_ext(圖片:極坐標變換圖,弧中心行坐標,弧中心列坐標,起始角度,結束角度,起始半徑,結束半徑,寬度,高度,差值方法:)
      polar_trans_image_ext (ImageReduced, ImagePolar, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, ‘nearest_neighbor’)
    • 使用動態閾值尋找缺陷
      scale_image_max (ImagePolar, ImageScaleMax)
      mean_image (ImageScaleMax, ImageMean, SmoothX, 3)
      dyn_threshold (ImageScaleMax, ImageMean, Regions1, 55, ‘not_equal’)
      connection (Regions1, Connection)
      select_shape (Connection, SelectedRegions, ‘height’, ‘and’, 9, 99999)
    • 消除噪聲區域
      closing_rectangle1 (SelectedRegions, RegionClosing1, 10, 20)
      union1 (RegionClosing1, RegionUnion)
    • 反極坐標變換
      polar_trans_region_inv (RegionUnion, XYTransRegion, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 1280, 1024, ‘nearest_neighbor’)
    • 顯示結果
      dev_set_window (WindowHandle1)
      dev_display (Image)
      dev_set_color (‘blue’)
      dev_display (RegionDifference)
      dev_set_color (‘red’)
      dev_display (XYTransRegion)
    • 顯示極坐標變換區域
      dev_set_window (WindowHandle)
    • 圍繞圖像中心旋轉圖像
      rotate_image (ImagePolar, ImageRotate, 90, ‘constant’)
      dev_display (ImageRotate)
      count_obj (RegionUnion, Number)
      if (Number > 0)
      • 鏡像區域
        mirror_region (RegionUnion, RegionMirror, ‘diagonal’, PolarResolution)
        mirror_region (RegionMirror, RegionMirror, ‘row’, PolarResolution)
        dev_display (RegionMirror)
        disp_message (WindowHandle1, ‘Not OK’, ‘window’, -1, -1, ‘red’, ‘false’)

    else
    disp_message (WindowHandle1, ‘OK’, ‘window’, -1, -1, ‘forest green’, ‘false’)
    endif
    if (Index < 16)
    disp_continue_message (WindowHandle1, ‘black’, ‘true’)
    stop ()
    endif
    endfor

  • 恢復系統參數
    set_system (‘store_empty_region’, StoreEmptyRegion)

處理思路

這個例子是主要講解了使用極坐標變換進行缺陷檢測的例子。
auto_threshold 、select_obj ,自動閾值分割。
boundary提取區域邊緣edges_sub_pix、segment_contours_xld、union_cocircular_contours_xld、length_xld、select_obj 、fit_circle_contour_xld 邊界的提取、分割、合并、求長、選取、擬合。
polar_trans_image_ext極坐標變換polar_trans_region_inv反極坐標變換
mirror_region鏡像區域

后記

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

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

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

相關文章

靜態主席樹總結(靜態區間的k大)

靜態主席樹總結(靜態區間的&#xff4b;大) 首先我們先來看一道題 給定N個正整數構成的序列&#xff0c;將對于指定的閉區間查詢其區間內的第K小值。 輸入格式&#xff1a; 第一行包含兩個正整數N、M&#xff0c;分別表示序列的長度和查詢的個數。 第二行包含N個正整數&a…

Java中MySQL事務處理舉例

實例&#xff08;以sql語句中的insert語句為例&#xff09; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;/*** 事務的基本用法**/ …

永磁交流伺服電機的工作原理與更換新編碼器后的常規零位校正方法

http://wuhuotun.blog.163.com/blog/static/73085450200910655748516/ 永磁交流伺服電機的編碼器相位為何要與轉子磁極相位對齊 其唯一目的就是要達成矢量控制的目標&#xff0c;使d軸勵磁分量和q軸出力分量解耦&#xff0c;令永磁交流伺服電機定子繞組產生的電磁場始終正交于…

理解Java中字符流與字節流的區別

1. 什么是流 Java中的流是對字節序列的抽象&#xff0c;我們可以想象有一個水管&#xff0c;只不過現在流動在水管中的不再是水&#xff0c;而是字節序列。和水流一樣&#xff0c;Java中的流也具有一個“流動的方向”&#xff0c;通常可以從中讀入一個字節序列的對象被稱為輸入…

HALCON示例程序inspect_solar_fingers.hdev太陽能電池板電路缺陷檢測

HALCON示例程序inspect_solar_fingers.hdev太陽能電池板電路缺陷檢測 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () dev_close_window () ImageName : ‘solar_cell/solar_cell_’ read_image (Image, ImageName ‘01’) dev_open_win…

C++多線程 例子

C多線程 例子2008-08-21 15:11//這是2個線程模擬賣火車票的小程序#include <windows.h>#include <iostream.h>DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread dataDWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread dataintindex0;inttickets10;HANDLE hM…

2018/03/25

2019獨角獸企業重金招聘Python工程師標準>>> March 25 2018 Sunday Weather&#xff1a;cloudy 1、需求&#xff1a; a0.5 b3 ca*b 求c的值&#xff1a; [rootDasoncheng sbin]# cat a.sh #!/bin/bash a0.5 b3 cecho $a*$b |bc echo $canswer referred&#xff1a;…

統計字符串中每種字符類型的個數demo

/** 統計字符串中每中字符類型的個數&#xff0c;思路&#xff1a;* 1、鍵盤錄入一個字符串* 2、獲取到每個字符&#xff0c;遍歷字符串* for (int i 0; i < s.length(); i) {char ch s.charAt(i);* 3、判斷每個字符屬于哪種類型&#xff0c;對應的個數*/package cn.strin…

css3 圖片放大縮小閃爍效果

直接把圖片替換就可以了&#xff0c;我的圖片是透明的&#xff0c;所以body設置為黑色的&#xff0c;不不要可以去掉 <!doctype html><html lang"en"><head> <meta charset"UTF-8"> <title>css3 圖片放大縮小閃爍效果</t…

HALCON示例程序max_connection.hdev確定分割區域的最大區域數目

HALCON示例程序max_connection.hdev確定分割區域的最大區域數目 示例程序源碼&#xff08;加注釋&#xff09; read_image (Image, ‘monkey’) get_system (‘max_connection’, Information) set_system (‘max_connection’, 0) threshold (Image, Region, 128, 255) 區域…

elasticsearch分詞聚合查詢demo

2019獨角獸企業重金招聘Python工程師標準>>> 我們在通過elasticsearch查詢text類型的字段時&#xff0c;我們使用aggs進行聚合某個text類型field。這時elasticsearch會自動進行分詞將分詞后的結果進行聚合。獲取每一個分詞出現在文檔的文檔個數。注意&#xff1a;是…

軟件工程進度條-第十五周

第十五周 所花時間&#xff08;包括上課&#xff09; 23 代碼量&#xff08;行&#xff09; 1200 博客量&#xff08;篇&#xff09; 6 了解到的知識點 1、了解ListView的基本用法&#xff0c;并改變焦點觸碰事件&#xff1b; 2、理解團隊開發后進行軟件項目總結的益處…

Spring實戰第七章

一、SpringMVC配置代替方案 1自定DispatcherServlet 按照AbstractAnnotationConfigDispatcherServletInitializer的定義&#xff0c;它會創建DispatcherServlet和ContextLoaderListener。 AbstractAnnotationConfigDispatcherServletInitializer有三個方法是必須要重載的abstra…

EPSON TCP/IP 通信

EPSON SCARA機器人TCP/IP 通信時&#xff0c;涉及到的相關指令說明。 14.3 TCP/IP命令。 OpenNet //打開TCP/IP端口。 ChkNet //返回端口狀態&#xff1a;等待讀取的字節數或錯誤條件。 CloseNet //關閉TCP/IP端口。 SetNet //運行時或從命令窗口中設置通信端…

JDBC(九)DatabaseMetaData 數據庫元數據

通過java.sql.DatabaseMetaData 接口&#xff0c;我們能獲取到數據庫的列表、列等信息。 DatabaseMetaData 接口包含了許多方法&#xff0c;這里值介紹常用的。 ###獲取 DatabaseMetaData 實例對象 DatabaseMetaData databaseMetaData connection.getMetaData(); 復制代碼###獲…

C++多線程(一)

C多線程&#xff08;一&#xff09; WIN 多線程API一 簡單實例比較簡單的代碼&#xff0c;創建10個線程&#xff0c;其中使第4個線程在一創建就掛起&#xff0c;等到其他的線程執行的差不多的時候再使第4個線程恢復執行。#include <stdio.h>#include <stdlib.h>#i…

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

HALCON示例程序measure_ball_bond.hdev電路板焊點位置測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () dev_close_window () FileName : ‘bonds/ball_bond_ccd_’ read_image (Image, FileName 1$‘02’) dev_open_window_fit_imag…

rank()over 函數的使用

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

天梯賽2016-L2

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

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

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