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

news2024/12/23 0:27:50

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

     常规操作流程为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 1
    gen_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)
endfor
 
 for I := 0 to |ColumnEdgeFirst1| - 1 by 1
    MRow := (RowEdgeSecond1[I] +RowEdgeFirst1[I])/2
    MCol := (ColumnEdgeSecond1[I] +ColumnEdgeFirst1[I])/2
    dev_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 + 1
    disp_message (WindowHandle, IntraDistance1[I]$'.2f' +'Pix,'+ ' score:' + FuzzyScore1[I]$'.2f', 'image', MRow+10, MCol-30, 'black', 'false')

endfor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速SEO致胜:提升网站成效的8个步骤

搜索引擎优化&#xff08;SEO&#xff09;决定您网站的可见性和整体成效。 如今&#xff0c;仅仅拥有一个网站是不够的 – 您的网站需要在搜索引擎结果中排名靠前才能吸引流量并产生参与度。 幸运的是&#xff0c;改善您的 SEO 并不总是需要技术专长或复杂的策略。 在这篇文…

Java ==> String类(字符串)

文章目录 一、认识String类1、创建String对象2、不可变的String3、字符串常量池 二、字符串常用操作1、字符串比较1.1 用“”比较1.2 用equals()方法比较1.3用compareTo()方法进行比较 2、获取字符串长度3、字符串查找4、字符串转换4.1valueOf()数值转换为字符串4.2字母大小写转…

使用Github下载YOLO v5项目教程

目录 1、首先打开Github 2、在搜索框搜索yolov5 3、找到合适的yolov5版本 4、选择版本 5、下载 1、首先打开Github 2、在搜索框搜索yolov5 3、找到合适的yolov5版本 这里以第一个为例 4、选择版本 版本的选择要根据自己python的版本以及安装的库的版本&#xff0c;在requi…

leetcode 2710 移除字符串中的尾随零

1.题目要求: 2.题目代码: class Solution { public:string removeTrailingZeros(string num) {while(num[num.size() - 1] 0){num.pop_back();}return num;} };

033_Structure_Static_In_Matlab求解结构静力学问题两套方法

结构静力学问题 静力学问现在是已经很简单的问题&#xff0c;在材料各向同性的情况下&#xff0c;对于弹性固体材料&#xff0c;很容易通过有限元求解。特别是线弹性问题&#xff0c;方程的矩阵形式可以很容易的写出&#xff08;准确得说是很容易通过有限元表达&#xff09;&a…

01.如何用DDD重构老项目

学习资料来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 动机DDD与重构实践重构? 重写从一开始就采用DDD重构步骤1. 添加领域模块2.分离出有价值的代码3.迁移到领域模块4.重复2,3 动机 …

v-on:注册事件(可用@代替:@事件名)

目录 1.v-on&#xff1a; 2.页面效果 3.结构 v-on&#xff1a; (1)作用&#xff1a;注册事件添加监听提供处理逻辑 (2)语法&#xff1a; &#xff08;后&#xff1a;提供处理逻辑&#xff09; ①v-on:事件名"内联语句" ②v-on:事件名"methods中的函数名 一、…

基于OSS搭建在线教育视频课程分享网站

OSS对象存储服务是海量、安全、低成本、高持久的存储服务。适合于存储大规模非结构化数据&#xff0c;如图片、视频、备份文件和容器/虚拟机镜像等。 安装nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz yum -y install zlib zlib-devel gcc-c pcre-devel open…

C++ | Leetcode C++题解之第520题检测大写字母

题目&#xff1a; 题解&#xff1a; class Solution { public:bool detectCapitalUse(string word) {// 若第 1 个字母为小写&#xff0c;则需额外判断第 2 个字母是否为小写if (word.size() > 2 && islower(word[0]) && isupper(word[1])) {return false;…

SpringBoot中@Validated或@Valid注解校验的使用

文章目录 SpringBoot中Validated或Valid注解校验的使用1. 添加依赖2. 使用示例准备2-1 测试示例用到的类2-2 实体Dto&#xff0c;加入校验注解2-2 Controller 3. 示例测试4. Valid 和 Validated注解详解4-1 常用规则注解4-2 分组验证4-2-1 示例准备4-2-2 Controller接口4-2-3 P…

Rust 力扣 - 1297. 子串的最大出现次数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 越短的子串出现的次数越多&#xff0c;我们只需要求某个长度为min_size的子串出现的次数&#xff0c;并且该子串中不重复字符小于等于max_letters的数量 遍历长度长度为min_size的子串&#xff0c;然后将不重复…

【机器学习】25. 聚类-DBSCAN(density base)

聚类-DBSCAN-density base 1. 介绍2. 实现案例计算 3. K-dist4. 变化密度5. 优缺点 1. 介绍 DBSCAN – Density-Based Spatial Clustering of Applications with Noise 与K-Means查找圆形簇相比&#xff0c;DBSCAN可以查找任意形状和复杂形状的簇&#xff0c;如S形、椭圆、半圆…

yocto中bitbake -e的作用

bitbake -e > bb.log是Yocto项目中一个常用的命令操作&#xff0c;以下是对它的详细解释&#xff1a; 1. 命令的组成部分 -e&#xff1a;这是bitbake命令的一个选项。-e选项的作用是让bitbake输出环境变量信息。这些环境变量包含了与当前构建任务相关的大量参数&#xff0…

如何在Apple Vision Pro上打造成功的沉浸式叙述应用

随着科技的进步,沉浸式叙述应用正在成为一种全新的娱乐方式。Apple Vision Pro的发布,标志着空间计算技术迈上了新的台阶。本文将探讨如何在Vision Pro上构建一款类似Encounter Dinosaur的沉浸式叙述应用,具体通过分析《Out There》这款作品,总结出一系列关键点,帮助创作者…

android定时器循环实现轮播图

说明&#xff1a; android定时器加for循环实现轮播图 效果&#xff1a; step1: package com.example.iosdialogdemo;import android.os.Bundle; import android.os.Handler; import android.widget.ImageView; import android.widget.TextView;import androidx.appcompat.ap…

使用onnxruntime-web 运行yolov8-nano推理

ONNX&#xff08;Open Neural Network Exchange&#xff09;模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型&#xff0c;为了让这个推理更直观&#xff0c;我选择了试验下yolov8 识别预览图片&#xff1a; 1. 跨平台兼容性 ONNX 是一种开…

一键AI换衣-可图AI试衣

我们的真的实现了穿衣自由了吗&#xff1f;上传一张人物图片和衣服的图片&#xff0c;就能实现一键换衣。 这就是可图AI试衣项目 魔塔地址&#xff1a;https://www.modelscope.cn/studio ... lors-Virtual-Try-On 参考&#xff1a; 一键AI换衣-可图AI试衣 https://www.jinsh…

【elkb】创建用户和角色

在使用中我们不能把超管的用户信息给到所有者&#xff0c;我们需要为不用的使用场景创建不同的用户。 登录管理员用户 打开管理页面 创建角色 点击角色&#xff0c;创建角色 填写角色信息 设置Kibana 权限 最后点击创建角色 创建用户 点击用户--->创建用户 填写信息 登录…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小&#xff0c;可以用暴力枚举移除的数字&#xff0c;得到答案&#xff0c;时间复杂度为O(n^2)&#…

《Java核心技术 卷I》第4章 对象与类

第4章 对象与类 面向对象程序设计(Object-Oriented Programming&#xff0c;OOP)。 实现一个简单的Web浏览器可能2000个过程&#xff0c;采用面向对象设计风格大约100个类&#xff0c;每个类平均包含20个方法。 类 类(class)是构造对象的模板或蓝图&#xff0c;我们可以将类…