Halcon中的距离算子与边缘计算

距离算子和边缘计算是Halcon图像处理库中常用的功能,用于分析图像中的边缘信息以及计算物体之间的距离。在本文中,我们将详细介绍Halcon中的距离算子和边缘计算,并提供相应的源代码示例。

  1. 距离算子

距离算子是一种用于计算图像中点与点之间距离的工具。Halcon提供了多种距离算子,其中最常用的是欧氏距离算子(Distance)和城市街区距离算子(DistanceCc)。

欧氏距离算子用于计算两个点之间的直线距离,可以通过以下代码示例来使用:

read_image(Image, 'image.jpg')
convert_image_type(Image, 'byte')
threshold(Image, Region, 128, 255)
distance(Image, DistanceMap)

在上述示例中,我们首先读取了一张图像并将其转换为字节类型。然后,我们使用阈值函数将图像转换为二值图像,并将结果保存在Region变量中。最后,我们使用distance函数计算DistanceMap,其中包含了每个像素到最近边缘点的欧氏距离。

城市街区距离算子用于计算两个点之间的曼哈顿距离(沿着网格线的距离),可以通过以下代码示例来使用:

read_image(Image, 'image.jpg')
convert_image_type(Image, 'byte')
threshold(Image, Region, 128, 255)
distance_cc(Image, DistanceMap)

与欧氏距离算子类似,我们首先读取图像并进行类型转换和阈值处

【Halcon视觉】图像测量 机器视觉的测量原理 基于机器视觉的检测过程:对感兴趣的对象或区域进行成像,然后结合其图像信息,利用图像处理软件进行处理,根据处理结果自动判断检测对象的位置,尺寸,外观信息,并依据人为预先设定的标准进行合格与否的判断,最后输出其判断信息给执行机构。机器视觉检测系统采用CCD相机或CMOS相机将被检测的对象信息转换成图像信号,传送给专用的图像处理软件,图像处理软件根据像素分布,亮度,颜色等信息,将图像信号,转变成数字化信号,并对这些信号进行各种运算,来抽取对象的特征,如面积,数... 阅读详情

相关推荐

从Halcon 12到20:这8个被低估的版本更新彻底改变了机器视觉开发

本文深入剖析了从Halcon 12到20版本中八个被低估的关键更新,如Halcon 17.12的偏转法与3D点云融合、18.05的CPU深度学习推理与自动内存管理、19.05的Arm架构支持以及20.05的CPU深度学习训练等。这些更新显著降低了机器视觉技术的应用门槛,提升了开发效率与系统鲁棒性,为工业自动化领域的苛刻场景提供了系统性解决方案。

weixin_29039773的博客 366

工业视觉中微小缺陷检测的7种图像增强方法

在计算机视觉领域,图像增强技术是提升检测精度的关键手段,其核心原理是通过算法处理突出目标特征、抑制背景干扰。特别是在工业质检场景中,面对亚像素级微小缺陷检测挑战,传统图像处理方法往往难以满足精度要求。本文深入解析局部标准差图、Gabor滤波器组等7种经过工业验证的增强算法,这些技术能有效解决信噪比低、背景干扰强等典型问题。结合半导体封装、PCB检测等实际案例,展示了如何通过多方法融合策略将检出率提升至99.9%,为智能制造中的精密检测提供可靠解决方案。

weixin_30394669的博客 317

Halcon 距离计算算子 (distance_pp、distance_pl、distance_pr、distence_Ir、distance_rr、distance_ss)

区域间距离点到点 distance_pp点到直线 distance_pl点到区域的最长最短 distance_pr直线到区域最长最短 distence_Ir(平面度)平面区域与区域最短 distance_rr线到线最长最短distance_ss。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3671

深度解析视觉算法工程师岗位:技术体系、能力模型与实战指南

深圳科瑞技术招聘视觉算法工程师,负责工业视觉系统开发与优化。岗位要求本科及以上学历,熟悉C#/WPF和OpenCV/Halcon等工具,具备21-30岁年龄范围。核心能力包括:1)算法开发(特征提取、缺陷检测等);2)工程化能力(WPF框架开发);3)系统集成(工业相机、PLC等硬件对接)。技术栈涵盖数学基础、图像处理、深度学习及自动化设备通信。典型应用场景包括液晶屏缺陷检测和机器人定位系统。职业发展路径为3年成长为项目负责人,需掌握算法优化、精度提升等关键技术。

郑伟强dev的专栏 188

【企业管理】【管理科学】企业全岗位综合运营与组织知识矩阵体系01

岗位类别核心职责工作内容(详细)协作模式协商焦点博弈策略信任建立机制序列化工作流程关键绩效指标研发类​技术创新与产品开发1.需求分析:R=f(U,M,T) 2.概念设计:C=D(S,B) 3.原型开发 4.测试验证 5.文档编写敏捷团队、跨功能协作技术方案、资源分配、优先级纳什均衡:ui​(si​,s−i​)≥ui​(si′​,s−i​)代码审查、技术分享、结果透明瀑布模型/敏捷迭代1.专利数量P 2.技术就绪度TRL 3.缺陷密度D<0.1/KLOC其中:U=用户需求,

weixin_49199313的博客 745

工业视觉分拣系统:基于YOLO的目标检测+姿态估计全栈解决方案

刚性原则:必须选工件上的刚性特征,比如定位孔、边角、凸台,不能选容易形变的位置。远距离原则:两个关键点尽量离得远,距离越远,角度计算的误差越小。比如长条形工件就选两端的特征点,不要选同侧的。高区分度原则:选特征明显、不容易混淆的点,避免对称工件出现180°翻转误判。如果工件完全对称,就增加第三个关键点做方向区分。以我们的五金连接件为例,选两端的两个定位孔中心作为关键点,工件长度25mm,两个点距离20mm,最终角度精度可以做到±0.4°。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 223

2-OpenCVSharp 中实现 Halcon 的 distance_cc 算子(计算两个轮廓(或连接组件)之间的最短距离)

通过上述实现,我们利用 OpenCVSharp 模拟了 Halcon 的算子。此方法计算了两个轮廓之间的最短距离。通过提取轮廓,并逐个点计算距离,我们可以获得准确的距离度量。在实际应用中,可以调整轮廓提取的精度和边缘检测的阈值来优化结果。

weixin_45590420的博客 699

Halcon如何实现线线距离

在halcon中,并没有线线距离的相关算子,实际上,如果是两条直线,在不完全平行的情况下,最终会相交,距离为0。因此,在halcon中,应该处理的是线段与线段之间的距离。这里给出的两种确定线段距离的方法。

手写不期而遇的博客 1181

告别二极管发热!手把手教你用MOS管搭建同步整流电路(附死区时间设置避坑指南)

本文详细介绍了如何利用MOS管搭建同步整流电路(SR),以替代传统二极管,显著降低导通损耗和发热问题。内容涵盖自驱动方案的选择、关键元件参数计算、PCB布局要点及死区时间设置技巧,帮助工程师优化电源设计效率。

weixin_29540599的博客 455

告别QWebEngineView!用QtLocation+SQLite打造离线地图应用(附完整源码)

本文详细介绍了如何利用QtLocation模块与SQLite数据库构建高性能离线地图引擎,解决传统QWebEngineView方案在网络依赖、内存占用和定制化方面的不足。通过多级缓存机制、异步写入优化和纹理压缩技术,实现工业级应用的稳定运行和高效渲染,特别适合车载导航和野外勘探等场景。

weixin_30431445的博客 364

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1279

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 787

PyCharm + Anaconda虚拟环境:完美配置PySide6开发三件套(Designer/UIC/RCC)的避坑指南

本文详细介绍了如何在PyCharm和Anaconda虚拟环境中配置PySide6开发三件套(Designer/UIC/RCC),提供从环境准备到工具集成的完整解决方案。通过清晰的路径定位和PyCharm外部工具配置指南,帮助开发者快速搭建高效的Python GUI开发环境,避免常见配置陷阱。

weixin_28828243的博客 339

大数据分析利器:Tableau实战教程从入门到精通

你有3家分店,每月收集1000条销售数据(日期、分店、口味、销售额、订单数);想用Excel分析“哪家分店最赚钱”,但要做透视表→改格式→画柱状图,耗时30分钟,还经常因为公式错误返工;想看看“草莓味奶茶的月度销量趋势”,得手动筛选数据、调整折线图轴范围,稍不注意就漏看关键节点;想把分析结果分享给合伙人,Excel表格太抽象,对方盯着数字问“你到底想告诉我什么?

AI架构师小马 1497

OsgEarth —— 笔记1 - 创建地球的earth文件

效果         正文      1、准备一张全球的渲染图(tif格式)、一张全球的高程图(tif格式)        2、创建并编写.earth文件           在步骤1目录下创建china-simple.earth,并将如下内容写入。 <map name="Globe" type="geocentric" version="2"> <!-- 全球影像图 --> <image name="GlobeImage" driver="gdal"> &l

7681

C2f-DCN模块详解:可变形卷积与特征融合的完美结合

C2f模块作为YOLOv8的核心创新,代表了目标检测特征提取模块设计的最新进展。通过精简的卷积配置(仅2个基础卷积)、高效的特征重用设计(部分通道分割复用)、以及深层语义与浅层细节的协同建模能力,C2f在结构设计和性能表现上全面超越了前代的C3模块。与C3K2、C3K等变体相比,C2f在遮挡和密集环境下的检测鲁棒性更优,而C3K2和C3K分别在高速检测和多尺度检测方面有专门优化。这种差异化设计反映了YOLO系列模型向场景化、专业化发展的趋势。从设计原理角度看,C2f的核心优势在于其多路径梯度流动优化和。

浩瀚之水的专栏 379

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 维度对流扩散方程的有限元计算方法与边缘计算
下一篇: 边缘计算:将计算能力推向边缘的新兴技术
普通网友
博客等级 码龄3年 41粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值