【issue-halcon例程学习】fuzzy_measure_pin.hdev

这篇具有很好参考价值的文章主要介绍了【issue-halcon例程学习】fuzzy_measure_pin.hdev。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

例程功能

 检查IC的引线宽度和引线距离。

代码如下

dev_close_window ()
read_image (Image, 'board/board-06')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 
* --- Fuzzy Measure:
Row1 := 305.5
Col1 := 375.5
Phi1 := 0.982
Length1 := 167
Length2 := 8
gen_measure_rectangle2 (Row1, Col1, Phi1, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle1)
Row2 := 188.5
Col2 := 202.5
Phi2 := Phi1 - rad(180)
gen_measure_rectangle2 (Row2, Col2, Phi2, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle2)
* Create a fuzzy member function to select edge pairs of size of the chip pins (about 11 Pixels)
create_funct_1d_pairs ([0.0, 0.3], [1.0, 0.0], FuzzyAbsSizeDiffFunction)
set_fuzzy_measure_norm_pair (MeasureHandle1, 11.0, 'size_abs_diff', FuzzyAbsSizeDiffFunction)
set_fuzzy_measure_norm_pair (MeasureHandle2, 11.0, 'size_abs_diff', FuzzyAbsSizeDiffFunction)
fuzzy_measure_pairs (Image, MeasureHandle1, 1, 30, 0.5, 'positive', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, RowEdgeMiddle1, ColumnEdgeMiddle1, FuzzyScore1, IntraDistance1, InterDistance1)
fuzzy_measure_pairs (Image, MeasureHandle2, 1, 30, 0.5, 'positive', RowEdgeFirst2, ColumnEdgeFirst2, AmplitudeFirst2, RowEdgeSecond2, ColumnEdgeSecond2, AmplitudeSecond2, RowEdgeMiddle2, ColumnEdgeMiddle2, FuzzyScore2, IntraDistance2, InterDistance2)
* 
* --- Visualization:
dev_display (Image)
* Measuring area
dev_display_measure_object (Row1, Col1, Phi1, Length1, Length2)
dev_display_measure_object (Row2, Col2, Phi2, Length1, Length2)
* Edge pairs
dev_set_draw ('fill')
Pin := 1
dev_display_profile_points ([RowEdgeFirst1,RowEdgeSecond1], [ColumnEdgeFirst1,ColumnEdgeSecond1], Row1, Col1, Phi1, Length1, Length2)
for I := 0 to |ColumnEdgeFirst1| - 1 by 1
    disp_message (WindowHandle, 'size:' + IntraDistance1[I]$'.2f' + ' score:' + FuzzyScore1[I]$'.2f', 'image', RowEdgeSecond1[I], ColumnEdgeSecond1[I] + 10, 'yellow', 'false')
    MRow := RowEdgeSecond1[I] - 5
    MCol := ColumnEdgeSecond1[I] - 20
    dev_set_color ('white')
    gen_circle (Circle, MRow, MCol, 10)
    dev_display (Circle)
    get_string_extents (WindowHandle, Pin, Ascent, Descent, SWidth, SHeight)
    disp_message (WindowHandle, Pin, 'window', MRow - SHeight / 2, MCol - SWidth / 2, 'black', 'false')
    Pin := Pin + 1
endfor
dev_display_profile_points ([RowEdgeFirst2,RowEdgeSecond2], [ColumnEdgeFirst2,ColumnEdgeSecond2], Row2, Col2, Phi2, Length1, Length2)
for I := 0 to |ColumnEdgeFirst2| - 1 by 1
    dev_set_color ('yellow')
    disp_message (WindowHandle, 'size:' + IntraDistance2[I]$'.2f' + ' score:' + FuzzyScore2[I]$'.2f', 'image', RowEdgeFirst2[I], ColumnEdgeFirst2[I] + 10, 'yellow', 'false')
    MRow := RowEdgeFirst2[I] - 5
    MCol := ColumnEdgeFirst2[I] - 20
    dev_set_color ('white')
    gen_circle (Circle, MRow, MCol, 10)
    dev_display (Circle)
    get_string_extents (WindowHandle, Pin, Ascent, Descent, SWidth, SHeight)
    disp_message (WindowHandle, Pin, 'window', MRow - SHeight / 2, MCol - SWidth / 2, 'black', 'false')
    Pin := Pin + 1
endfor

要点

  1. 模糊测量——对标准测量的一种扩展,并不意味着测量是“模糊的”,而是用模糊隶属函数来控制边缘的选择。所谓的模糊隶属函数,就是将边缘的特征值转换为隶属度值(我理解为权重值),基于这些隶属值做出是否选择边缘的决定,即当隶属值大于你设定模糊阈值时,边缘就会被选中,反之则同理。这种方法的优点是即使使用很低的最小阈值或平滑,也能灵活处理额外的边缘
      直接用一维测量会产生错误的结果,这时将“引线的宽度的大约为9像素宽度”这个信息转换为模糊隶属函数。即预期的宽度9像素,对应的隶属值为1;对于与预期的大小相差3个像素(6/9)以上,则隶属值为0,中间的值采用线性插值,即宽度大于8像素的隶属值为0.67;当你设置的阈值为0.5时,那宽度为7.5~10.5像素之间的像素边缘对才会被选中。通过这样的模糊测量则可以正确测量引线的宽度;
	gen_measure_rectangle2(Row1, Col1, Phi1, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle1)
	create_funct_1d_pairs([0.0, 0.3], [1.0, 0.0], FuzzyAbsSizeDiffFunction)
	set_fuzzy_measure_norm_pair(MeasureHandle1, 11.0, 'size_abs_diff', FuzzyAbsSizeDiffFunction)
	fuzzy_measure_pairs (Image, MeasureHandle1, 1, 30, 0.5, 'positive', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, RowEdgeMiddle1, ColumnEdgeMiddle1, FuzzyScore1, IntraDistance1, InterDistance1)

create_funct_1d_pairs——从参数对中创建一个函数创建模糊函数;
XValues :入参,函数点的x值;
YValues :入参,函数点的y值;
Function :出参,返回的函数;
set_fuzzy_measure_norm_pair——为边对指定模糊函数(就上面创建的那个);
MeasureHandle :入参,测量句柄;
PairSize :入参,指定边对内部的宽度(猜的,也许是边对与边对间的宽度);
SetType :入参,模糊集的选择方式;
Function :入参,模糊函数;
fuzzy_measure_pairs——进行模糊测量操作;
Image :入参,测量句柄;
MeasureHandle :入参,测量句柄;
Sigma :入参,高斯模糊参数;
AmpThresh :入参,最小边沿振幅;
FuzzyThresh :入参,最小模糊值;
Transition :入参,边对灰度值过渡的标准;
RowEdgeFirst :出参,第一个边点的行值(纵坐标);
ColumnEdgeFirst :出参,第一个边点的列值(横坐标);
AmplitudeFirst :出参,第一条边的边缘振幅(带符号);
RowEdgeSecond :出参,第二个边点的行值(纵坐标);
ColumnEdgeSecond :出参,第二个边点的列值(横坐标);
AmplitudeSecond :出参,第二条边的边缘振幅(带符号);
RowEdgeCenter :出参,边对中心行值;
ColumnEdgeCenter :出参,边对中心列值;
FuzzyScore :出参,边缘对的模糊评估分数;
IntraDistance :出参,边对内边缘距离;
InterDistance :出参,边对间边缘距离;
2. dev_display_profile_points——官方文档没解释;
3. get_string_extents——查询字符串输出大小的宽度和高度,挺好用的函数,可以让显示美观些;文章来源地址https://www.toymoban.com/news/detail-820259.html

到了这里,关于【issue-halcon例程学习】fuzzy_measure_pin.hdev的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:使用 fuzziness 来进行搜索

    在我之前的文章 “Elasticsearch:fuzzy 搜索 (模糊搜索)”,我详细描述了模糊搜索。尽管那篇文章已经很详尽了,但是还是有 auto 这个配置没有完全覆盖到。在今天的文章中,我们来进一步对这个进行讲解一下。 Fuzziness 参数存在于某些查询中,使用它时,你将受益于根据术

    2024年02月08日
    浏览(39)
  • Halcon学习---图像采集助手

    目录 (一)打开图像采集助手 (二)图像资源的获取方式 1、图像获取接口  2、图像文件 3、可通过快捷键Ctrl+ r读取图像 (三)连接相机,设置参数 1、连接相机,采集图像 2、设置相机参数 (四)检测 (五)代码生成 1、根据需求设置为单幅采集、循环采集  2、采集模式

    2024年02月09日
    浏览(41)
  • Halcon学习之一维测量(1)

    一维测量:测量范围包括直线上的测量和弧线上的测量,直线使用矩形框的测量助手 二维测量: 测量的目的:主要是测量获得工件的实际物理尺寸,这个实现的过程里面还有有个重要的步骤:标定,这个标定不是手眼标定,而是单相机标定( 标定是需要标定板的 ),是为了

    2024年02月10日
    浏览(41)
  • Halcon学习之一维测量(3)

    带定位器的测量。 首先看一下“定位”是什么意思? 回答:比如我们测量一个芯片,这时候我们设置一个测量矩形,来沿着测量目标进行测量。但是下一张当芯片的位置发生变化时,测量矩形的位置就不对了,就不是沿着测量目标了。这样就不对了!芯片在转,测量矩形也

    2024年02月12日
    浏览(32)
  • halcon脚本-深度学习【目标检测】

    本文讲解使用halcon的目标检测是使用步骤,标注工具不使用halcon提供的标注工具,而是使用各个深度学习框架都使用的labelImg工具,然后使用hde脚本以及python脚本转化为标准的halcon训练及文件 本文涉及数据标注、数据转化、训练、评估、预测几个模块。   首先我是用的是

    2024年02月10日
    浏览(46)
  • 使用halcon实现基于深度学习的目标检测

    数据集 数据集的类别已有不需要另外指定,这是因为在读取之前已有数据集的时候,数据集中就会包含了许多数据,其中结构如下: 包括类别序号以及类别名字 预训练模型或者模型 预训练模型也有了基本的参数,如下所示: 训练集、验证集以及测试集的区别 : 一般会认为

    2024年02月05日
    浏览(93)
  • Halcon学习笔记(二)数据结构、通道+XLD

    图像(Image):图像是Halco中最基本的数据结构,用于表示二维图像。它包含了图像的像素值、尺寸、颜色模式等信息。图像可以是灰度图像(单通道图像)或彩色图像(多通道图像),颜色通道可以是RGB、HSV等。图像可以通过读取文件、采集设备或者算法生成。 区域(Regi

    2024年02月22日
    浏览(35)
  • MSPM0L1306例程学习-UART部分(2)

    MSPM0L1306例程学习系列 写在前边的话: 这个系列比较简单,主要是围绕TI官网给出的SDK例程进行讲解和注释。并没有针对模块的具体使用方法进行描述。 所有的例程均来自MSPM0 SDK的安装包,具体可到官网下载并安装: https://www.ti.com.cn/tool/cn/download/MSPM0-SDK/ 因为例程多数包含sy

    2024年01月20日
    浏览(33)
  • halcon混合c#深度学习平整度怎么写

    Halcon是一款强大的机器视觉库,可以用于图像处理和分析。在Halcon中,可以通过C#语言与深度学习模型进行集成。下面是一个简单的示例,展示了如何使用Halcon和C#编写深度学习平整度的代码: 首先,确保你已经安装了Halcon的开发环境,并在C#项目中引入了Halcon的相关引用。

    2024年04月15日
    浏览(37)
  • 模糊C均值聚类(Fuzzy C-means)算法(FCM)

    本文的代码与数据地址已上传至github:https://github.com/helloWorldchn/MachineLearning 1、模糊集理论 L.A.Zadeh在1965年最早提出模糊集理论,在该理论中,针对传统的硬聚类算法其隶属度值非0即1的严格隶属关系,使用模糊集合理论,将原隶属度扩展为 0 到 1 之间的任意值,一个样本可以

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包