Halcon例程代碼解讀:安全環檢測(附源碼|圖像下載鏈接)

安全環檢測核心思路與代碼詳解

項目目標

本項目的目標是檢測圖像中的安全環位置和方向。通過形狀匹配技術,從一張模型圖像中提取安全環的特征,并在后續圖像中識別多個實例,完成檢測和方向標定。


實現思路

安全環檢測分為以下核心步驟:

  1. 模型圖像加載與處理: 讀取包含安全環的模型圖像,并定義感興趣區域 (ROI),以減少背景干擾。
  2. 形狀模型創建: 基于感興趣區域提取特征,訓練通用形狀模型(Generic Shape Model)。
  3. 目標匹配檢測: 在待檢測圖像中搜索安全環,輸出位置、方向和檢測結果。
  4. 結果可視化: 通過繪制輪廓和方向箭頭,直觀展示安全環的位置和方向信息。

代碼講解

以下是完整代碼的逐步解析,重點放在每個步驟的核心功能和邏輯。


1. 初始化

* 關閉窗口更新以優化性能
dev_update_window ('off')* 加載模型圖像
read_image (ModelImage, 'image/rings_01')* 獲取圖像尺寸
get_image_size (ModelImage, Width, Height)* 打開窗口并設置顯示區域
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)* 顯示模型圖像
dev_display (ModelImage)
  • 核心功能:
    • 關閉窗口更新 (dev_update_window ('off')) 以提高運行性能。
    • 讀取模型圖像并獲取圖像尺寸,為后續顯示做準備。
    • 打開一個適配圖像尺寸的顯示窗口。

2. 定義感興趣區域 (ROI)

* 設置安全環的ROI
Row := 251
Column := 196
Radius := 103* 創建圓形區域作為ROI
gen_circle (ModelROI, Row, Column, Radius)* 顯示ROI
dev_display (ModelROI)
  • 核心功能:
    • 使用 gen_circle 函數定義圓形區域,圈定包含安全環的區域。
    • 通過 ROI 減少背景干擾,確保模型訓練的準確性。

3. 檢查并創建形狀模型

檢查模型區域
* 裁剪圖像,僅保留ROI部分
reduce_domain (ModelImage, ModelROI, ImageROI)* 檢查ROI的形狀特征
inspect_shape_model (ImageROI, ShapeModelImage, ShapeModelRegion, 1, 30)* 顯示檢查結果
dev_clear_window ()
dev_display (ShapeModelRegion)
  • 核心功能:
    • 使用 reduce_domain 裁剪圖像,只保留 ROI。
    • 調用 inspect_shape_model 檢查模型區域的形狀特征,確保模型質量。
創建形狀模型

在這里插入圖片描述

* 創建并訓練通用形狀模型
create_generic_shape_model (ModelID)
set_generic_shape_model_param (ModelID, 'metric', 'ignore_global_polarity')
train_generic_shape_model (ImageROI, ModelID)* 提取模型輪廓
get_generic_shape_model_object (ShapeModel, ModelID, 'contours')

在這里插入圖片描述

  • 核心功能:
    • 調用 create_generic_shape_model 創建模型,隨后通過 train_generic_shape_model 基于 ROI 圖像訓練模型。
    • 設置模型參數 ignore_global_polarity,忽略極性變化,增強魯棒性。

4. 目標匹配與檢測

* 設置形狀匹配參數
set_generic_shape_model_param (ModelID, 'max_overlap', 0.55)
set_generic_shape_model_param (ModelID, 'min_score', 0.4)* 遍歷待檢測圖像
for i := 1 to 7 by 1read_image (SearchImage, 'image/rings_' + (i + 1)$'02')dev_display (SearchImage)* 進行形狀匹配find_generic_shape_model (SearchImage, ModelID, MatchResultID, NumMatchResult)* 如果檢測到物體if (NumMatchResult > 0)set_tposition (WindowHandle, 20, 24)write_string (WindowHandle, '檢測到目標數量:'+NumMatchResult)* 遍歷所有檢測結果for j := 0 to NumMatchResult - 1 by 1* 獲取目標輪廓get_generic_shape_model_result_object (Objects, MatchResultID, j, 'contours')dev_set_color ('cyan')dev_display (Objects)* 獲取位置和方向信息get_generic_shape_model_result (MatchResultID, j, 'row', Row)get_generic_shape_model_result (MatchResultID, j, 'column', Column)get_generic_shape_model_result (MatchResultID, j, 'hom_mat_2d', HomMat2D)* 計算方向箭頭終點affine_trans_pixel (HomMat2D, -120, 0, RowArrowHead, ColumnArrowHead)dev_set_color ('blue')disp_arrow (WindowHandle, Row, Column, RowArrowHead, ColumnArrowHead, 2)endforelse* 未檢測到目標set_tposition (WindowHandle, 20, 20)write_string (WindowHandle, '未檢測到物體!')endif
endfor
  • 核心功能:
    1. 目標匹配:
      • 使用 find_generic_shape_model 在每張圖像中搜索目標。
      • 匹配結果包括目標數量、位置(行、列坐標)和方向(仿射矩陣)。
    2. 顯示檢測結果:
      • 高亮顯示目標輪廓,并繪制箭頭標注方向。
      • 若檢測不到目標,則顯示“未檢測到物體”的提示。
        -在這里插入圖片描述
        在這里插入圖片描述

在這里插入圖片描述


5. 清理資源與結束程序

* 恢復窗口更新
dev_update_window ('on')* 清理形狀模型
clear_shape_model (ModelID)
  • 核心功能:
    • 恢復窗口更新。
    • 釋放形狀模型資源,避免內存占用。

項目核心思路總結

  1. 模型訓練:
    使用感興趣區域提取安全環的形狀特征,生成通用形狀模型。

  2. 多圖像匹配:
    遍歷多張待檢測圖像,利用形狀模型進行目標匹配,輸出目標位置和方向信息。

  3. 結果可視化:
    通過高亮輪廓和繪制箭頭,直觀展示安全環的位置與方向。


適用場景

該項目適用于以下應用場景:

  • 工業生產中的零件檢測: 如汽車輪轂、機械零件中的環狀目標檢測。
  • 視覺質量控制: 檢測物體位置和方向是否符合預期。

代碼與資源

通過網盤分享的文件:安全環
鏈接: https://pan.baidu.com/s/1gAHHtwL53Sow00jUHD_Z2g?pwd=jkcf 提取碼: jkcf

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

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

相關文章

Java——多線程進階知識

目錄 一、常見的鎖策略 樂觀鎖VS悲觀鎖 讀寫鎖 重量級鎖VS輕量級鎖 總結: 自旋鎖(Spin Lock) 公平鎖VS非公平鎖 可重入鎖VS不可重入鎖 二、CAS 何為CAS CAS有哪些應用 1)實現原子類 2)實現自旋鎖 CAS的ABA…

ubuntu18.04升級到ubuntu20.04

為了使用qt6,在ubuntu18.04上各種折騰失敗,無奈只能升級到ubuntu20.04, 按照網上的教程沒成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…

【Blender】【源碼詳解】BLI_mesh_boolean 實現詳解

1. 背景: 最近因為項目需要,需要閱讀 Blender 中關于 mesh boolean 的源碼;因此,對 blender 中的 mesh boolean 源碼進行解讀; Github 上源碼下載很慢,一般使用 Gitee: gitee Blender 源碼 2. Mesh Boole…

qcow2鏡像大小壓縮

本文擬對qcow2進行壓縮進行簡單介紹 背景 qcow2鏡像在使用一段時間后,總是會不斷膨脹變大,所以在導出分享時一般都需要進行壓縮以縮減占用空間。 清除空洞 qcow2方式也有稀疏的問題,在磁盤級別上看,鏡像會有大量連續的相同空洞…

達夢 本地編碼:PG_GBK, 導入文件編碼:PG_UTF8錯誤

問題 達夢 本地編碼:PG_GBK, 導入文件編碼:PG_UTF8錯誤 解決 右鍵管理服務器 查看配置 新建一個數據庫實例,配置跟之前的保持一致 新建一個用戶,跟以前的用戶名一樣 在用戶上,右鍵導入,選擇dmp的位置 導…

深度學習卷積神經網絡CNN之MobileNet模型網絡模型詳解說明(超詳細理論篇)

1.MobileNet背景 2.MobileNet V1論文 3. MobileNett改進史 4. MobileNet模型結構 5. 特點(超詳細創新、優缺點及新知識點) 一、MobileNet背景 隨著移動設備的普及,深度學習模型的應用場景逐漸擴展至移動端和嵌入式設備。然而,傳統…

垂起固定翼無人機大面積森林草原巡檢技術詳解

垂起固定翼無人機大面積森林草原巡檢技術是一種高效、精準的監測手段,以下是對該技術的詳細解析: 一、垂起固定翼無人機技術特點 垂起固定翼無人機結合了多旋翼和固定翼無人機的優點,具備垂直起降、飛行距離長、速度快、高度高等特點。這種無…

kubernates實戰

使用k8s來部署tomcat 1、創建一個部署,并指定鏡像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod狀態 kubectl get pods # 獲取default名稱空間下的pods kubectl get pods --all-namespaces # 獲取所有名稱空間下的pods kubect…

數據挖掘之認識數據

在數據挖掘過程中,數據的認識是非常重要的一步,它為后續的數據分析、建模、特征選擇等工作奠定基礎。以鳶尾花數據集(Iris Dataset)數據集之鳶尾花數據集(Iris Dataset)-CSDN博客為例,下面將介紹…

Java 優化springboot jar 內存 年輕代和老年代的比例 減少垃圾清理耗時 如調整 -XX:NewRatio

-XX:NewRatio 是 Java Virtual Machine (JVM) 的一個選項,用于調整 年輕代(Young Generation)和 老年代(Old Generation)之間的內存比例。 1. 含義 XX:NewRatioN 用于指定 老年代 與 年輕代 的內存比例。 N 的含義&…

統信UOS 1071 AI客戶端接入本地大模型配置手冊

文章來源:統信UOS 1071本地大模型配置手冊 | 統信軟件-知識分享平臺 1. OS版本確認 1.1. 版本查看 要求:計算機,屬性,查看版本(1070,構建號> 101.100) 2. UOS AI版本確認 UOS AI,設置&am…

定時任務——定時任務技術選型

摘要 本文深入探討了定時任務調度系統的核心問題、技術選型,并對Quartz、Elastic-Job、XXL-Job、Spring Task/ScheduledExecutor、Apache Airflow和Kubernetes CronJob等開源定時任務框架進行了比較分析,包括它們的特點、適用場景和技術棧。文章還討論了…

【ArcGIS Pro微課1000例】0064:柵格目錄、柵格數據集、鑲嵌數據集

一、柵格目錄與柵格數據集 1. 定義 柵格目錄:是一個用于管理和組織柵格數據集的結構,通常包含多個柵格數據集的元數據和索引信息。它相當于一個文件夾,里面可以存放多個柵格文件。可以將工作空間轉柵格目錄。 柵格數據集:是指單個的柵格數據文件,包含了具體的空間數據,…

Java基礎 | 數據庫的命名規范

數據庫的命名規范 1. 基本原則2. 命名規范詳解2.1 命名禁止項2.2 命名規范3. 通用字段規范4. 特殊表命名建議 1. 基本原則 統一性:全庫采用一致的命名規范簡潔性:在表達清晰的前提下盡量簡短規范性:遵循數據庫標準規范可讀性:命名…

麒麟操作系統服務架構保姆級教程(二)sersync、lsync備份和NFS持久化存儲

如果你想擁有你從未擁有過的東西,那么你必須去做你從未做過的事情 上篇文章我們說到rsync雖好,但是缺乏實時性,在實際應用中,咱們可以將rsync寫進腳本,然后寫進定時任務去備份,如果每天凌晨1:00…

青少年編程與數學 02-004 Go語言Web編程 16課題、并發編程

青少年編程與數學 02-004 Go語言Web編程 16課題、并發編程 一、并發編程并發編程的關鍵概念包括: 二、并發與并行并發編程(Concurrency)并行計算(Parallelism)區別 三、Go語言并發編程1. 協程(Goroutine&am…

均值聚類算法

K-均值聚類算法是一種常用的無監督學習算法,用于將數據集劃分為K個簇或聚類。它的基本思想是通過迭代將數據點分配到簇中,使得每個數據點都屬于最近的簇中心,并且使得簇內的數據點之間的距離最小化。 算法步驟如下: 1. 初始化K個…

wtforms+flask_sqlalchemy在flask-admin視圖下實現日期的修改與更新

背景: 在flask-admin 的modelview視圖下實現自定義視圖的表單修改/編輯是件不太那么容易的事情,特別是想不自定義前端view的情況下。 材料: wtformsflask_sqlalchemy 制作: 上代碼 1、模型代碼 from .exts import db from …

【AIGC-ChatGPT進階副業提示詞】末日生存指南 2.0:瘋狂科學家的荒誕智慧

引言 在這個不斷變化的世界中,末日似乎總是lurking在角落。但是,親愛的幸存者們,不要害怕!因為我,瘋狂科學家2099,正在這里為你們帶來最新版本的末日生存指南。這不是你祖母的應急手冊,而是一本…

BiLSTM:深度學習中的雙向長短期記憶網絡

目錄 ?編輯 1. BiLSTM原理 2. BiLSTM的應用案例 3. BiLSTM研究進展 4. BiLSTM技術挑戰 5. BiLSTM未來趨勢 6. BiLSTM的實際應用示例 6.1 數據準備 6.2 構建BiLSTM模型 6.3 訓練模型 6.4 評估模型 6.5 可視化訓練過程 7. 結論 在深度學習的浪潮中,BiLS…