当前位置: 首页 > news >正文

Halcon 一维卡尺测量找点之模糊集测量法

        模糊测量是对标准测量的一种扩展,并不意味着测量是“模糊的”,而是用模糊隶属函数来控制边缘的选择。所谓的模糊隶属函数,就是将边缘的特征值转换为隶属度值,基于这些隶属值做出是否选择边缘的决定,即当隶属值大于你设定模糊阈值时,边缘就会被选中,反之则反。这种方法的优点是即使使用很低的最小阈值或平滑,也能灵活处理额外的边缘。

     常规操作流程为1创建模糊函数,2指定模糊函数,3执行测量

1,创建模糊函数

create _ funct _ ld _ pairs (:: XValues , YValues : Function )

功能:通过二维数组创建一个离散一维函数,即生成模糊函数。
 XValues :函数点的 x 值,指边缘特征。
 YValues :函数点的 y 值,指相应特征值的权重,0< y <1。
 Function :已创建的模糊函数。

2,指定模糊函数
 1)set _ fuzzy _ measure (: MeasureHandle , SetType , Function :)
功能:指定一个模糊函数。
 SetType :选择模糊集。
模糊集使得 fuzzy _ measure _ pos 和 fuzzy _ measure _ pairs / fuzzy _ measure _ pairing 算子够评估和选择检测到的候选边缘,主要有以下五种类型模糊集(其中 position _ pair 、 site gary 仅由 fuzzy _ measure _ pairs / fuzzy _ measure _ pairing 算子使用):
① contrast :使用模糊函数来评估候选边缘的振幅(一阶导数值)。在提取边缘对时,通两条边缘振幅的模糊分数的几何平均值来获得模糊评估。
② position :使用模糊函数评估每个候选边缘到测量对象的参考点的距离,参考点为量对象轮廓线的起点。而 position _ center 或 position _ end 将参考点设置为轮廓线的中点末端; position _ first _ edge / position _ last _ edge 将参考点设置为第一个/最后提取的边缘的置。当提取边缘对时,通过两条边缘位置的模糊分数的几何平均值来获得模糊评估。
③ position _ pair :与 position 相似,计算每个边缘对的中心点与测量对象的参考点之间距离。参考点可以分别由 position _ pair _ center , position _ pair _ end 和 position first _ paits,position _ last _ pair 来设置。
④ size :以像素为单位,用模糊函数评估边缘对内两条边缘的规定距离。
⑤ gray :使用模糊函数评估边缘对的两个边缘之间的平均投影灰度值。
 2)set _ fuzzy _ measure _ norm _ pair (:: MeasureHandle . PairSize . SetType , Function :)
功能:设置归一化的模糊隶属度函数,与 set _ fuzzy _ measure 算子不同,这些函数的横
坐标 x 必须由边缘对的预期宽度 s (在参数 PairSize 中传递)来定义。
 PairSize :边缘对的预期宽度。
 SetType :选择模糊集。选择模糊集主要有如下三种类型,即 size , position 和 position - pair .其中 position _ pair 仅由 fuzzy _ measure _ pairs 和 fuzzy _ measure _ pairing 算子使用
 size 模糊集以像素为单位,用模糊函数评估边缘对内两条边缘的归一化距离。这个模糊集也可以通过 size _ diff 指定为归一化的大小差异,或通过 size _ abs _ diff 指定为绝对归一化大小差异。另外两个模糊集 position 和 position _ pair 参考算子 set _ fuzzy _ measure 参数详解。

3,执行测量

1)fuzzy _ measure _ pos ( Image :: MeasureHandle , Sigma , AmpThresh , FuzzyThresh , Transition :
 RowEdge , ColumnEdge , Amplitude , FuzzyScore , Distance )
功能:提取垂直于矩形或扇环的直边,与 measure _ pos 不同的是,该算子使用模糊函数来判断和选择边缘 AmpThresh :最小的边缘梯度阈值,即边缘的一阶导数绝对值大于该值才会被选中。 FuzzyThresh :最小模糊阈值,即权重的几何平均值大于该值,边缘才会被选中。 RowEdge 、 ColumnEdge :边缘点的行、列坐标。
 Amplitude :边缘梯度幅值(带符号),即一阶导数值。
 FuzzyScore :边缘模糊评估的分数

 2)fuzzy _ measure _ pairs ( Image .: MeasureHandle , Sigma , AmpThresh , FuzzyThresh . Transition :
 RowEdgeFirst , ColumnEdgeFirst , AmplitudeFirst , RowEdgeSecond , ColumnEdgeSecond , AmplitudeSecond ,
 RowEdgeCenter , ColumnEdgeCenter , FuzzyScore , IntraDistance , InterDistance )
功能:提取垂直于矩形或扇环的直边对,与 measure _ pairs 不同的是,该算子使用模糊函数来判断和选择边缘对。
 RowEdgeCenter 、 ColumnEdgeCenter :边缘对的中心行、列坐标。

3) fuzzy _ measure _ pairing ( Image :: MeasureHandle , Sigma . AmpThresh , FuzzyThresh . Transition , Pairing , NumPairs : RowEdgeFirst , ColumnEdgeFirst , AmplitudeFirst , RowEdgeSecond , ColumnEdge - Second , AmplitudeSecond , RowPairCenter , ColumnPairCenter , FuzzyScore , IntraDistance )
功能:提取垂直于矩形或扇环的直边对。提取算法与 fuzzy _ measure _ pairs 相同,但该算子可以使用参数 Pairing 来提取彼此相交或者包含的边缘对。
 Pairing :配对约束。
 NumPairs :返回边缘对的数量。
 RowPairCenter 、 ColumnPairCenter :边缘对的中心行、列坐标。

案例:

read_image (Image1, 'E:/Halcon数据/资源图片/123.png')rgb1_to_gray (Image1, Image)get_image_size (Image, Width, Height)
dev_get_window (WindowHandle)
dev_set_draw ('margin')
gen_rectangle2 (ROI_0, 315.308, 506.206, rad(-0.340442), 426.008, 19.2722)
Row := 315.308
Col:= 506.206
Phi := rad(-0.340442)
Length1 := 426.008
Length2 := 19.2722
gen_measure_rectangle2 (Row, Col, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
create_funct_1d_pairs ([40,75,110], [0.5,1.0,0.1], FuzzyAbsSizeDiffFunction)
* set_fuzzy_measure_norm_pair (MeasureHandle, 3, 'position_pair_end', FuzzyAbsSizeDiffFunction)
set_fuzzy_measure (MeasureHandle, 'size', FuzzyAbsSizeDiffFunction)
fuzzy_measure_pairs (Image, MeasureHandle, 1, 30, 0.5, 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, RowEdgeMiddle1, ColumnEdgeMiddle1, FuzzyScore1, IntraDistance1, InterDistance1)
PRows:=[RowEdgeFirst1,RowEdgeSecond1]
PCols:=[ColumnEdgeFirst1,ColumnEdgeSecond1]PSize := Length2 * 0.5
RowStart := Row + sin(Phi) * Length1
RowEnd := Row - sin(Phi) * Length1
ColStart := Col - cos(Phi) * Length1
ColEnd := Col + cos(Phi) * Length1
for idx := 0 to |PRows| - 1 by 1gen_contour_polygon_xld (CPoint, [PRows[idx] - sin(rad(90) + Phi) * PSize,PRows[idx] - sin(Phi - rad(90)) * PSize], [PCols[idx] + cos(rad(90) + Phi) * PSize,PCols[idx] + cos(Phi - rad(90)) * PSize])dev_set_color ('red')dev_set_line_width (3)dev_display (CPoint)
endforfor I := 0 to |ColumnEdgeFirst1| - 1 by 1MRow := (RowEdgeSecond1[I] +RowEdgeFirst1[I])/2MCol := (ColumnEdgeSecond1[I] +ColumnEdgeFirst1[I])/2dev_set_color ('white')gen_cross_contour_xld (Cross, MRow , MCol, 10, 0)dev_display (Cross)disp_message (WindowHandle, Pin, 'image', MRow-20 , MCol, 'black', 'false')Pin := Pin + 1disp_message (WindowHandle, IntraDistance1[I]$'.2f' +'Pix,'+ ' score:' + FuzzyScore1[I]$'.2f', 'image', MRow+10, MCol-30, 'black', 'false')endfor


http://www.mrgr.cn/news/63904.html

相关文章:

  • c 到 c++ 过渡
  • 【LeetCode】原地移除元素、删除排序数组中的重复项
  • 前端常见错误
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,途游游戏,埃科光电25秋招内推
  • 正则表达式---元字符
  • Three.js 开源项目及入门教程分享
  • 【C++】1968. 输出ascii码对应的字符
  • 【常用数据结构】开发中常用的数据结构?
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(2)
  • Web大学生网页作业成品——游戏战地介绍设计与实现(HTML+CSS)(4个页面)
  • HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解
  • openGauss数据库-头歌实验1-1 初识openGauss
  • 【rust实战】rust博客系统4_连接数据库及查询数据
  • 华为 HCIP-Datacom H12-821 题库 (41)
  • nodejs入门教程8:nodejs EventEmitter
  • HTML 基础标签——表单标签<form>
  • 基于java+SpringBoot+Vue的学生网上选课系统设计与实现
  • 1014:与圆相关的计算
  • 使用onnxruntime-web 运行yolov8-nano推理
  • 查缺补漏----关于计组两道题辨析
  • Leetcode 剑指 Offer II 100.三角形最小路径和
  • OR63 删除公共字符
  • 【JAVA 笔记】10 ch07_oop_fundamentals 面向对象编程(基础部分)
  • Linux网络配置与管理:掌握访问与管理的关键技能
  • C++ | Leetcode C++题解之第526题优美的排列
  • 闪存学习_1:Flash-Aware Computing from Jihong Kim