halcon-轴断面检测定位

2024-04-14 15:20
文章标签 检测 定位 halcon 断面

本文主要是介绍halcon-轴断面检测定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

通常情况下轴检测时,通常会检测轴的各个阶段的长度。但是由于各种原因,在轴断面的区域现实不明显,无法正确提取,这时候需要根据轴断面的突出部分进行检测,但是由于部分轴的粗轴和细轴区域的宽度差距相当接近,所以就需要通过另外的处理,将轴的断面进行单独提取

1.halcon程序

* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/2024Work/work/4.12断层检测', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])*gen_rectangle1 (ROI_0, 707.927, 631.228, 1072.01, 1398.08)*gen_rectangle1 (ROI_0, 735.583, 1488.93, 1089.37, 2298.93)gen_rectangle1 (ROI_0, 761.136, 824.068, 1021.81, 1090.71)reduce_domain (Image, ROI_0, ImageReduced)*矫正图像binary_threshold (ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)erosion_circle (Region, RegionErosion,1)smallest_rectangle2 (RegionErosion, Row, Column, Phi2, Length1, Length2)vector_angle_to_rigid (Row, Column, Phi2, Row, Column, 1.5707963, HomMat2D)affine_trans_image (ImageReduced, ImageAffineTrans, HomMat2D, 'constant', 'false')reduce_domain (ImageAffineTrans, ROI_0, ImageReduced2)*获取断面下半部分binary_threshold (ImageReduced2, Region2, 'smooth_histo', 'dark', UsedThreshold1)*将上下断面进行联合shape_trans (Region2, RegionTrans, 'convex')*取区域的最大内接矩形inner_rectangle1 (RegionTrans, Row1, Column1, Row2, Column2)*创建矩形区域。根据实际情况,可以对内接矩形的左右列坐标进行修改,使得较粗的部分可以较多*较细的部分尽可能的少gen_rectangle1 (Rectangle1, Row1, Column1-4, Row2, Column2-3)*求取差值,将轴区域与内接矩形区域求差值,可得粗轴外轮廓difference (Region2, Rectangle1, RegionDifference)*剔除细轴多余的区域opening_circle (RegionDifference, RegionOpening1, 1)connection (RegionOpening1, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 200.96, 10000)union1 (SelectedRegions, RegionUnion)*进行横向闭运算,将粗轴进行相连接。closing_rectangle1 (RegionUnion, RegionClosing, 1000000000, 1)opening_circle (RegionClosing, RegionOpening, 5)connection (RegionOpening, ConnectedRegions1)    select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10833.3, 363400.6)shape_trans (SelectedRegions1, RegionTrans1, 'convex')*获取断面上半部分*做差值提取到断面上半部分,剔除多余的噪点difference (Region2, RegionTrans1, RegionDifference2)connection (RegionDifference2, ConnectedRegions3)   select_shape (ConnectedRegions3, SelectedRegions3, 'area', 'and', 5196.22, 500000)opening_circle (SelectedRegions3, RegionOpening2, 3.5)*上下部分*对上下部分进行膨胀取交集dilation_circle (RegionOpening2, RegionDilation2, 1)dilation_circle (RegionTrans1, RegionDilation3, 3)intersection (RegionDilation2, RegionDilation3, RegionIntersection1)*结果显示skeleton (RegionIntersection1, Skeleton)junctions_skeleton (Skeleton, EndPoints, JuncPoints)get_region_points (EndPoints, Rows1, Columns1)gen_cross_contour_xld (Cross, Rows1[0], Columns1[0], 50, 0)gen_cross_contour_xld (Cross1, Rows1[1], Columns1[1], 50, 0)dev_display (ImageAffineTrans)dev_display (Cross)dev_display (Cross1)stop ()
endfor

在这里插入图片描述

2.程序解析

2.1图像矫正

在进行检测前,需要将图像矫正在垂直状态,在几何图像中是最大内接矩形是不容易判断的,例如在圆中的最大内接矩形是无限个。所以halcon并没有提供带角度的最大内接矩形,只是提供了垂直角度下的最大内接矩形。所以,我们需要对图像进行矫正到垂直。

    *矫正图像binary_threshold (ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)erosion_circle (Region, RegionErosion,1)smallest_rectangle2 (RegionErosion, Row, Column, Phi2, Length1, Length2)vector_angle_to_rigid (Row, Column, Phi2, Row, Column, 1.5707963, HomMat2D)affine_trans_image (ImageReduced, ImageAffineTrans, HomMat2D, 'constant', 'false')reduce_domain (ImageAffineTrans, ROI_0, ImageReduced2)

2.2获取断面粗轴部分

本文中以,断面的下半部分作为轴的粗轴部分。首先是将上下断面区域进行联合,取区域的内接矩形,做差值后,就可以提取出粗轴的部分。
在这里插入图片描述
在这里插入图片描述

*获取断面下半部分binary_threshold (ImageReduced2, Region2, 'smooth_histo', 'dark', UsedThreshold1)*将上下断面进行联合shape_trans (Region2, RegionTrans, 'convex')*取区域的最大内接矩形inner_rectangle1 (RegionTrans, Row1, Column1, Row2, Column2)*创建矩形区域。根据实际情况,可以对内接矩形的左右列坐标进行修改,使得较粗的部分可以较多*较细的部分尽可能的少gen_rectangle1 (Rectangle1, Row1, Column1-4, Row2, Column2-3)*求取差值,将轴区域与内接矩形区域求差值,可得粗轴外轮廓difference (Region2, Rectangle1, RegionDifference)*剔除细轴多余的区域opening_circle (RegionDifference, RegionOpening1, 1)connection (RegionOpening1, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 200.96, 10000)union1 (SelectedRegions, RegionUnion)*进行横向闭运算,将粗轴进行相连接。closing_rectangle1 (RegionUnion, RegionClosing, 1000000000, 1)opening_circle (RegionClosing, RegionOpening, 5)connection (RegionOpening, ConnectedRegions1)    select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10833.3, 363400.6)shape_trans (SelectedRegions1, RegionTrans1, 'convex')

2.3获取断面细轴部分

将整个轴的区域减去粗轴的区域,获得的就是断面区域

    difference (Region2, RegionTrans1, RegionDifference2)connection (RegionDifference2, ConnectedRegions3)   select_shape (ConnectedRegions3, SelectedRegions3, 'area', 'and', 5196.22, 500000)opening_circle (SelectedRegions3, RegionOpening2, 3.5)

2.4获取断面并显示

对上下部分进行膨胀,膨胀后取交集,即可获取到断面区域的。可以根据实际情况条件膨胀的参数使得结果在所需要的位置

*上下部分*对上下部分进行膨胀取交集dilation_circle (RegionOpening2, RegionDilation2, 1)dilation_circle (RegionTrans1, RegionDilation3, 3)intersection (RegionDilation2, RegionDilation3, RegionIntersection1)*结果显示skeleton (RegionIntersection1, Skeleton)junctions_skeleton (Skeleton, EndPoints, JuncPoints)get_region_points (EndPoints, Rows1, Columns1)gen_cross_contour_xld (Cross, Rows1[0], Columns1[0], 50, 0)gen_cross_contour_xld (Cross1, Rows1[1], Columns1[1], 50, 0)dev_display (ImageAffineTrans)dev_display (Cross)dev_display (Cross1)

总结

断面检测的核心在于对区域的内接矩形和差值的运用。通过内接矩形剔除细轴的区域,在不断通过差值进行计算即可。

这篇关于halcon-轴断面检测定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903340

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数: