机器视觉halcon轮廓线处理关键算子-常州龙熙机器视觉培训班_halcon中的轮廓线 导数-程序员宅基地

技术标签: c++  github  计算机视觉  人工智能  编程语言  软件工程师  eclipse  

算子1

edges_sub_pix (ImageReduced1, Edges, ‘canny’,2,20,40)
Canny边缘检测算法
step1: 用高斯滤波器平滑图象;
step2: 用一阶偏导的有限差分来计算梯度的幅值和方向;
step3: 对梯度幅值进行非极大值抑制
step4: 用双阈值算法检测和连接边缘

算子2
segment_contours_xld (Edges, ContoursSplit, ‘lines’, 5,1, 0.5)

1)、segment_contours_xld

参数说明:
Contours 需要进行分割的轮廓。
ContoursSplit 分割后的轮廓tuple。
Mode 分割轮廓的方式,可以选择’lines’(使用直线段分割), ‘lines_circles’(使用直线段和圆(弧)分割), ‘lines_ellipses’(使用直线段和椭圆弧分割)。

SmoothCont 轮廓平滑的参数,可以抑制在折线逼近过程中过短的线段,能更加鲁棒的逼近圆和椭圆。
首先通过折线来逼近输入的轮廓,这样,在弯曲的地方轮廓就会被过度的分割,如果用圆弧可以更好地逼近轮廓,则用圆弧或椭圆弧分别代替相邻的线段。如果SmoothCont设置为> 0,则首先对输入的轮廓进行平滑,这是必要的,因为平滑抑制了轮廓上的异常值,所以一方面可以防止在分割特别短的线的时后带来的异常,另一方面,在使用圆或椭圆分割时,可以实现更稳健的分割;
(1)、不能等于0;
(2)、最好大于等于3并且是奇数;
(3)、建议值是5;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MaxLineDist1 (
1)、需要大于等于0.0;
第一次用Ramer算法(即用直线段递进逼近轮廓)时的MaxLineDist,在逼近完成之后,再用圆弧或椭圆弧对相邻分割线段进行拟合,如果拟合圆弧到轮廓的距离小于逼近线段到轮廓的距离,就用圆弧替代逼近线段,这个过程一致迭代直到所有的线段拟合完毕。

MaxLineDist2 第二次逼近轮廓时的MaxLineDist,只有当MaxLineDist2
这种两步逼近算法效率较高,因为在第一次逼近过程中,递进逼近的直线段较少,因此较大直径的圆弧能够被高效的分割出来。在第二次逼近过程中,能够被小直径圆弧逼近的轮廓被找到,同时大直径圆弧的末端被重新定义。
在此之后,仍然由线段逼近的轮廓部分再次用最大距离MaxLineDist2的多边形逼近进行分割,并且新创建的线段在可能的情况下合并为圆形或椭圆弧。显然,这只会在MaxLineDist2 < MaxLineDist1时更改输出,这种两步方法比使用MaxLineDist2的一步方法更有效,由于在第一步中生成的线段较少,因此必须较少地进行圆或椭圆拟合。因此,使用长圆弧逼近部分输入轮廓会更高效;之后,再用短圆弧去逼近输入的轮廓,最后再细化使用过长圆弧逼近的轮廓的末端;
所述所得轮廓长度至少为3像素,并且包含所述输入轮廓的至少6个连续点;所有输入的长度小于3像素或少于6个轮廓点的轮廓线将被复制到输出轮廓线,不做任何修改。

Remark:
分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性’cont_approx’参数的值来确定(参考get_contour_global_attrib_xld)。
如果’cont_approx’=-1,这一部分轮廓最适合被拟合为直线段。
如果’cont_approx’=0,这一部分轮廓最适合被拟合为椭圆弧。
如果’cont_approx’=1,这一部分轮廓最适合被拟合为圆弧。

算子3

union_collinear_contours_xld ( SelectedXLD1, UnionContours1,100, 20, 2, 0.1, ‘attr_keep’)
100----相间隔的距离

在这里插入图片描述
在这里插入图片描述

算子4

select_shape_xld (ContoursSplit, SelectedXLD1, ‘contlength’, ‘and’, 16.91, 200)

算子5

select_contours_xld (UnionContours, LinesVerticalS, ‘direction’, rad(70), rad(110), 0, 0)

算子6

fit_line_contour_xld (Lines, ‘tukey’, -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

算子7
fit_circle_contour_xld (Circles, ‘atukey’, -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

在这里插入图片描述

在这里插入图片描述

  • Algebraic distance measure代数距离测度
    fit_circle_contour_xld (Contour, ‘atukey’, -1, 2, 0, 10, 1, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    dev_set_color (‘magenta’)

在这里插入图片描述

gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 4 * acos(0), ‘positive’, 1)

  • Geometric distance measure几何距离测度
    fit_circle_contour_xld (Contour, ‘geotukey’, -1, 2, 0, 10, 1, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    函数原型:
    椭圆拟合的难点
    通常我们使用最小二乘法求解如下的最优化问题:

Min∑Ni=1f(xi,E) Min \sum_{i=1}^N f(x_i,E)
Min
i=1

N

f(x
i

,E)

这里f(xi,E) f(x_i,E)f(x
i

,E)表示点xi x_ix
i
在这里插入图片描述

到E(指待拟合的椭圆)的最小距离。一般称为几何距离。但是我们很难直接给定几何距离的解析表达,因此很难求出。因此我们退而求其次,我们采用:为椭圆写下隐式方程,然后将点的坐标带入此隐式方程就得到了点到椭圆的距离。这种方法对于直线拟合、圆拟合,返回的就是到其的真实距离。而对于椭圆拟合,它返回的值是与距离有类似的属性,但不是一个真正的距离值。因此这个距离被称为代数距离。
fit_circle_contour_xld( Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder )

函数作用:
对一些线段的XLD做近似计算直线计算
参数Algorithm的可选项解释如下:
algebraic:这种方法最小化了轮廓点与结果圆之间的代数距离
ahuber:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Huber
atukey:类似于algebraic,轮廓点被加权以减小异常值的影响基于方法Tukey
https://www.jianshu.com/p/b1d5988f1042
geometric:该法最小化了轮廓点与结果圆之间的几何距离,该法被统计是最优的,但占用很多计算时间。如果轮廓点被噪声干扰严重,可以考虑使用该方法。
geohuber:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Huber
geotukey:类似于geometric,轮廓点被加权以减小异常值的影响基于方法Tukey

ClippingFactor控制被弱化的异常值个数,值越小,越多异常值被检测到。
最小拟合一条线的必要轮廓点个数是2,因此,一条轮廓线点个数至少是2+2*ClippingEndPoints

参数列表:
Contours(in):输入轮廓
Algorithm(in):拟合圆的算法
MaxNumPoints(in):用于计算的最大轮廓点个数
MaxClosureDist(in):一个轮廓的末尾点最大间距被认为是闭合
ClippingEndPoints(in):在逼近过程中被忽略的开始及末尾点个数
Iterations(in):迭代的最大次数用于鲁棒加权拟合
ClippingFactor(in):消除异常值的裁剪因子
Row(out):圆心行坐标
Col(out):圆心列坐标
Radius(out):圆半径
StartPhi(out):开始点的角度(rad)
EndPhi(out):末尾点的角度(rad)
PointOrder(out):边界点的顺序

可能前置项:
gen_contours_skeleton_xld, lines_gauss, lines_facet, edges_sub_pix, smooth_contours_xld

可能后置项:
gen_ellipse_contour_xld, disp_circle, get_points_ellipse

在这里插入图片描述

可替代项:
fit_ellipse_contour_xld, fit_line_contour_xld
对于“ * huber”和“ * tukey” ,使用鲁棒误差统计来估计没有离群点的近似圆到等高点的距离标准差。 Clippingfactor 参数(标准差的比例因子)控制着离群值的数量: 选择的值越小,检测到的离群值就越多。 在 tukey 算法中,异常值被去除,而在 huber 算法中,异常值只是阻尼,或者更准确地说,它们是线性加权的。 没有任何鲁棒加权的距离平方作为误差值的优化,即最小二乘公式。 在实际应用中,推荐使用 tukey 方法。参数迭代指定代数、 ahuber 和 atukey 算法的迭代次数。 “几何”、“ geohuber”和“ geotukey”算法忽略这个参数。 如果迭代次数设置为零,则算法不对拟合圆进行迭代改进,而只检查初始猜测是否已经足够接近,这取决于所选择的 outliers 处理方法。为了减少计算负荷,圆的拟合可以局限于轮廓点的子集: 如果将一个非 -1的值分配给最大值点,则只使用最大值点——均匀分布在轮廓上。 与 x 轴有关的同位角在 startphi 和 endphi 中返回,也可以参见椭圆轮廓 xld。 等高线,其起点和终点之间的距离小于或等于 maxclosuredist 被认为是封闭的。 因此,它们是近似于圆形,而不是圆弧。 由于人工制品在预处理的起点和终点的等高线可能是错误的。 因此,可以从圆的拟合中排除等高线起点和终点的剪切终点。 然而,它们仍然被用于确定开始值和内收值。拟合圆形所需等高点的最小数目是3。 因此,要求等高点的数目至少是。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33870565/article/details/135338757

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签